ABP框架 - 嵌入资源

文档目录css

 

本节内容:html

 

简介web

ABP提供了一个易用的方式,在你的web应用里嵌入Razor视图(.cshtml文件)和其它资源(css,js,img...文件).你可使用这个功能建立包含UI功能的插件/模块.json

 

建立嵌入文件 安全

首先,咱们应当建立一个文件并把它标志为嵌入式资源,任何程序集均可以包含嵌入式资源文件.步骤依项目类型而变.app

 

xproj/project.json 格式dom

假设咱们有个名为EmbeddedPlugIn的项目:ui

把Views文件夹的全部文件标志为嵌入式资源,咱们能够添加一个以下配置到project.json:spa

  "buildOptions": {
    "embed": {
      "include": [
        "Views/**/*.*"
      ]
    }
  }

 

csproj 格式插件

假设咱们有个名为EmbeddedPlugIn的项目:

我选中Index.cshtml文件,转到属性窗口(快捷键为F4)并修改它的"建立操做"为"嵌入式资源":

你应当在你的一个web应用里,为全部你想作为嵌入式资源的文件的建立操做.

 

添加到嵌入式资源管理器

咱们一旦把文件嵌入到程序集里,咱们可使用启动配置把它们添加到嵌入式资源管理器,添加以下一行代码到你模块的PreInitialize方法里:

Configuration.EmbeddedResources.Sources.Add(
    new EmbeddedResourceSet(
        "/Views/",
        Assembly.GetExecutingAssembly(),
        "EmbeddedPlugIn.Views"
    )
);

让咱们解释一下参数:

  • 第一个定义了文件的根目录(如此处是: http://yourdomain.com/Views/).它匹配根命名空间.
  • 第二个程序集包含文件,这个代码应当定义到包含了嵌入式文件的程序集,不然,你应当依照你的状况修改这个参数.
  • 最后一个定义了这些文件在程序集里的根命名空间,这是默认的命名空间(一般是程序集名称)+程序集里文件的位置,用一个.号链接.

 

使用嵌入式视图

对于.cshtml文件,直接从一个控制器的Action里返回.EmbeddedPlugIn程序集里的BlogController以下所示:

using Abp.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc;

namespace EmbeddedPlugIn.Controllers
{
    public class BlogController : AbpController
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

如你所见,定与一般的controller同样,如预期地工做.

 

使用嵌入式资源

为使用嵌入式资源(js,css,img...),咱们只要在咱们的视图中如常地使用它们:

@section Styles {
    <link href="~/Views/Blog/Index.css" rel="stylesheet" />
}

@section Scripts
{
    <script src="~/Views/Blog/Index.js"></script>
}

<h2 id="BlogTitle">Blog plugin!</h2>

我假设主应用包含Styles和Scripts节.咱们也能够如常地使用其它文件(如img).

 

ASP.NET Core 配置

ASP.NET MVC 5.x 项目将经过Owin自动集成嵌入式资源管理器(只要你的启动文件如预期的包含app.UseAbp()),对于ASP.NET Core项目,咱们应当手动添加app.UseEmbeddedFiles()到启动类里,并在app.UseStaticFiles()以后:

app.UseStaticFiles();
app.UseEmbeddedFiles(); //Allows to expose embedded files to the web!

 

忽略文件 

经过,嵌入式资源管理器里的全部静态文件可直接被客户端使用,不过出于安全或其它意图,你能够忽略一些文件扩展名,.cshtml和.config默认状况下被忽略(防止从客户端直接访问).你能够在你模块的PreInitialize里添加更多扩展名:

Configuration.Modules.AbpWebCommon().EmbeddedResources.IgnoredFileExtensions.Add("exe");

 

重写嵌入式文件

嵌入式资源文件的一个重要功能是:它们可被更高层的模块重写,这意味着你能够在你web应用的相同文件夹里建立一个与嵌入式文件同名的文件(web应用中你的文件不要求是嵌入式的资源,由于静态文件比嵌入式文件优先级更高).所以,你能够在应用里重写模块的css,js或view文件,一样地,若是模块A依赖于模块B,且模块A使用相同路径定义了一个嵌入式资源,它就会重写一个模块B的嵌入式资源.

注意:对于ASP.NET Core 项目,你应当把重写文件做为根目录的wwwroot文件夹下.

相关文章
相关标签/搜索