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)给我们提供了一个开发 ...
随机推荐
- poj_2528Mayor's posters(线段树)
poj_2528Mayor's posters(线段树) 标签: 线段树 题目连接 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K To ...
- volatile 与 synchronized 区别
在Java中,为了保证多线程读写数据时保证数据的一致性,可以采用两种方式: 同步 如用synchronized关键字,或者使用锁对象. volatile 使用volatile关键字用一句话概括vola ...
- Hive HQL学习
HQL学习 1.hive的数据类型 2.hive_DDL 2.1创建.删除.修改.使用数据库 Default数据库,默认的,优先级相对于其他数据库是最高的 2.2重点:创建表_内部表_ ...
- Thinkphp5.0+Vue2.0前后端分离框架Vuethink
VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的vue-cli脚手架工具构建 ...
- Shell常用命令整理
http://blog.csdn.net/junmail/article/details/4602745 1. ls: 类似于dos下的dir命令 ls最常用的参数有三个: -a -l -F. l ...
- 月薪20k以上的高级程序员需要学习哪些技术呢?
课程内容: 源码分析.分布式架构.微服务架构.性能优化.团队协作效率.双十一项目实战 适用对象: 1-5年或更长软件开发经验,没有工作经验但基础非常扎实,对java工作机制,常用设计思想,常用java ...
- Windows和Linux如何使用Java代码实现关闭进程
在用selenium做自动化测试时,由于各种不明原因,有时Chrome浏览器会出现假死的情况,也就是整个浏览器响应超时,本人脚本主要部署在Windows机器上,所以主要以Windows为主,浏览器为C ...
- Socket与ServerSocket
ServerSocket: 用于打开服务端口,等待客户端连接,运行在服务端. Socket: 用于连接指定服务器的指定端口,运行在客户端. flush是输出到缓冲区,缓冲区没满的话不发送,close的 ...
- 2017-06-26(groupadd groupmod groupdel)
groupadd groupadd 组名 (创建用户组) groupadd -g 组编号 组名 (创建组名 并且指定编号) groupmod groupmod -n 新组名 旧组名 ...
- java面向对象——类
一.类 类(class)是构造对象的模板或蓝图.由类构造(construct)对象的过程称为创建类的实例(instance). 用 java 编写的所有代码都位于某个类的内部.标准的Java 库提供了 ...