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文件夾下.

相關文章
相關標籤/搜索