From 8d060eb01032597a8ef19df8e708478168e97950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 29 Apr 2018 13:42:15 +0300 Subject: [PATCH] Completed Virtual-File-System.md --- docs/Virtual-File-System.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/Virtual-File-System.md b/docs/Virtual-File-System.md index 2b962e0a12..45d31d2eb7 100644 --- a/docs/Virtual-File-System.md +++ b/docs/Virtual-File-System.md @@ -106,9 +106,9 @@ public class MyService Embedding a file into a module assembly and using it from another project by just referencing the assembly (or adding a nuget package) is very valuable for creating a re-usable module. However, it makes a bit hard to develop the module itself. -Assume that you are developing a module that contains an embedded javascript file. Whenever you change the file you must re-compile the project, re-start the application and refresh the browser page to take the change. Obviously, it is very time consuming and tedious. +Assume that you are developing a module that contains an embedded JavaScript file. Whenever you change the file you must re-compile the project, re-start the application and refresh the browser page to take the change. Obviously, it is very time consuming and tedious. -What if the application could directly use the physical file in the development time? Thus, you could just refresh the browser page to see any change in the javascript file. `ReplaceEmbeddedByPyhsical` method makes that possible. +What if the application could directly use the physical file in the development time? Thus, you could just refresh the browser page to see any change in the JavaScript file. `ReplaceEmbeddedByPyhsical` method makes that possible. The example below shows an application depends on a module (`MyModule`) that contains embedded files and the application can reach the source code of the module on the development time. @@ -138,3 +138,29 @@ public class MyWebAppModule : AbpModule The code above assumes that `MyWebAppModule` and `MyModule` are two different projects in a Visual Studio solution and `MyWebAppModule` depends on the `MyModule`. +### ASP.NET Core Integration + +Virtual File System is well integrated to ASP.NET Core: + +* Virtual files can be used just like physical (static) files on a web application. +* Razor Views, Razor Pages, js, css, image files and all other web contents can be embedded into assemblies and used just like the physical files. +* An application (or another module) can override a virtual file of a module just like placing a file with the same name and extension into the same folder of the virtual file. + +#### Virtual Files Middleware + +Virtual Files Middleware is used to serve embedded (js, css, image...) files to clients/browsers just like physical files in the **wwwroot** folder. Add it just after the static file middleware as shown below: + +````C# +app.UseStaticFiles(); +app.UseVirtualFiles(); +```` + +Adding virtual files middleware after the static files middleware makes it possible to override a virtual file by a physical file by placing in the same location. + +> Virtual Files Middleware only serves the virtual wwwroot folder contents just like the static files. + +#### Views & Pages + +Embedded razor views/pages are available in the application without any configuration. Just place them into standard Views/Pages virtual folders in the module development. + +An embedded view/page can be overrided if a module/application locate a new file into the same location. \ No newline at end of file