ABP官方文档翻译 6.5 内嵌资源文件
内嵌资源文件
介绍
ABP提供了一种简单的方式在web应用中使用内嵌Razor视图(.cshtml文件)和其他资源(css,js,img...files)。你可以使用这个特征创建包含UI功能的plugins/modules。
创建内嵌文件
首先,我们要创建一个文件并标记它为嵌入资源。任何程序集都可以包含嵌入资源。progress 的改变基于工程的格式
xproj/project.json形式
假定我们有一个工程,名为EmbeddedPlugin,如下所示:

为了在Views文件下的所有文件都为嵌入资源,我们可以在project.json文件中添加如下配置:
"buildOptions": {
"embed": {
"include": [
"Views/**/*.*"
]
}
}
csproj形式
假定我们有一个工程,名为EmbeddedPlugin,如下所示:

选择Index.cshtml文件,到属性窗口(快捷键F4)改变它的Build Action为Embedded Resource。

在web应用中你想使用的所有文件都应该改变他们的build action为embedded resource。
添加内嵌资源管理器
一旦我们将文件嵌入到程序集中,我们就可以使用startup configuration来将文件添加嵌入资源管理器。你可以在模块的PreInitialize方法中添加下面的一行代码:
Configuration.EmbeddedResources.Sources.Add(
new EmbeddedResourceSet(
"/Views/",
Assembly.GetExecutingAssembly(),
"EmbeddedPlugIn.Views"
)
);
我们来解释一下参数:
- 第一个参数定义了文件的根目录(如 http://yourdomain.com/Views/here)。它匹配根命名空间。
- 第二个参数定义了包含的文件的程序集。这段代码应该在包含嵌入文件的程序集中。否则,你应该相应的更改这个参数。
- 最后一个参数定义了程序集中文件的根命名空间。这个是默认的命名空间(通常为程序集的名称),通过点加上'在程序集中的文件夹'。
使用内嵌视图
对于.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();
}
}
}
如你所见,和正常的视图一样按期望的使用。
使用内嵌资源
为了使用嵌入资源(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>
假定主应用有样式和脚本部分。我们可以像通常一样使用其他文件(如图片)。
ASP.NET Core 配置
ASP.NET MVC 5.x通过Owin(如果你的启动文件包含app.UseAbp())自动集成嵌入资源管理器。对于AS.NET Core工程,我们应该手动在Startup类中添加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应用中的文件不需要作为嵌入资源,因为静态文件的优先级高于嵌入文件)。因此,你可以重写应用中的css、js或模块/插件的视图文件。如果模块A依赖于模块B并且模块A在同样的路径定义了一个嵌入资源,他会覆盖模块B的嵌入资源。
注意:对于ASP.NET Core工程,应该把重写文件放到wwwroot文件夹作为根路径。
ABP官方文档翻译 6.5 内嵌资源文件的更多相关文章
- ABP理论学习之内嵌资源文件
返回总目录 本篇目录 介绍 创建内嵌文件 暴露内嵌文件 使用内嵌文件 介绍 在一个web应用中,有供客户端使用的javascript,css,xml等文件.它们一般是作为分离的文件被添加到web项目中 ...
- ABP官方文档翻译 6.3 本地化
本地化 介绍 应用程序语言 本地化源 XML文件 注册XML本地化源 JSON文件 注册JSON本地化源 资源文件 自定义源 当前语言是如何决定的 ASP.NET Core ASP.NET MVC 5 ...
- ABP官方文档翻译 5.4 SwaggerUI集成
SwaggerUI集成 介绍 ASP.NET Core 安装Nuget包 配置 测试 ASP.NET 5.x 安装Nuget包 配置 测试 介绍 在它的网站上:“...使用Swagger可用的API, ...
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
- C#中内嵌资源的读取
起因 作为一个从Cpper转到C#并且直接从事WPF开发的萌新来说,正式编码过程中碰到了不少问题,一路上磕磕碰碰的.因为软件设计需求上的要求,需要将一些配置文件(XML.INI等)内嵌到程序中,等需要 ...
- spring 5.x 系列第20篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (代码配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置类为com.heibaiyin ...
- spring 5.x 系列第19篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (xml配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置文件为springApplic ...
- [VSTO] 区分MAILITEM的ATTACHMENT是真正的附件还是内嵌资源
在遍历MailItem的Attachments集合的时候发现,不管是真正的附件还是内嵌资源,比如邮件内容中内嵌的图片(Embedded Image),都是Attachments集合的元素,通过查看at ...
- 【转】WebResource实现在自定义控件中内嵌JS文件
在类库中的资源 其他项目中要使用 需要嵌入才行 参考文献:WebResource实现在自定义控件中内嵌JS文件 1. WebResource简介 ASP.NET(1.0/1.1)给我们提供了一个开发 ...
随机推荐
- HDU 1014 Uniform Generator【GCD,水】
Uniform Generator Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 移动App,AJAX异步请求,实现简单的增、删、改、查
用ajax发异步请求时,要注意url."AppServer"为后台项目名,"LoginServlet.action"为web.xml中的<url-patt ...
- MongoDB模拟多文档事务操作
Mongodb不支持多文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务. 以两个银行账户之间的转账行为为例,来说明如何实现多文档间的事务操作. ...
- vhost:一种 virtio 高性能的后端驱动实现
什么是 vhost vhost 是 virtio 的一种后端实现方案,在 virtio 简介中,我们已经提到 virtio 是一种半虚拟化的实现方案,需要虚拟机端和主机端都提供驱动才能完成通信,通常, ...
- day2 作业
1.判断下列逻辑语句的True,False. 1),1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 ...
- github 中删除仓库
删除时,填充的名字是库的名字
- dede织梦栏目页和文章页中获取当前栏目名称方法
一般情况下,在dede织梦系统中列表页.栏目页和文章页中获取当前所在栏目名称只需要代码:{dede:type}[field:typename]{/dede:type}即可,不需要定义ID,默认的就是当 ...
- Bundle使用&NSBundle
之 前在初始化一个类的时候:TestViewController *viewcontroller=[[TestViewController alloc]initWithNibName:@"T ...
- mysql 多列索引的生效规则
mysql中 myisam,innodb默认使用的是 Btree索引,至于btree的数据结构是怎样的都不重要,只需要知道结果,既然是索引那这个数据结构最后是排好序:就像新华字典他的目录就是按照a,b ...
- 序列化和Json
实现了python与python程序之间内存的交互 常用场景: 1 把内存的数据写到磁盘 2 socket只能传字符串,二进制,通过序列化 ============================== ...