ABP框架 - 嵌入資源


文檔目錄

 

本節內容:

 

簡介

ABP提供了一個易用的方式,在你的web應用里嵌入Razor視圖(.cshtml文件)和其它資源(css,js,img...文件).你可以使用這個功能創建包含UI功能的插件/模塊.

 

創建嵌入文件 

首先,我們應當創建一個文件並把它標志為嵌入式資源,任何程序集都可以包含嵌入式資源文件.步驟依項目類型而變.

 

xproj/project.json 格式

假設我們有個名為EmbeddedPlugIn的項目:

把Views文件夾的所有文件標志為嵌入式資源,我們可以添加一個如下配置到project.json:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM