.NET Core 在程序集中集成Razor视图
前言
有时候,我们在开发一个程序集供其他项目引用的时候,可能需要对外输出一些HTML的结构数据。
还有一些情况我们可能开发的是一个中间件,这个中间件需要提供一些界面来对外展示数据或者是内部的一些程序的运行信息,这个时候我们也需要一个界面来做这件事情。
那么,做这些界面最适合的结构非html莫属,在 ASP.NET 中那就是Razor视图了。
怎么样才能在程序集中集成 Razor 视图,并且能够以 NuGet 包的形式提供出去呢?也就是说别人只需要引用包,然后在浏览器敲指定的地址就可以看到你提供的界面了呢? 最典型的就是给你的用户提供Dashboard界面。
其实,做到这些并不难,现在,我来教你一步一步做。
Getting Started
这里我就以一个中间件程序为例,给用户提供一个Dashboard页面。
1、创建 Middleware Library
首先,我们参照我的这篇文章,使用一秒钟的时间新建一个中间件的模板项目。
这个模板项目还是 xproj 的产物,我也一直没有时间更新,所以vs打开的时候升级一下吧。
创建一个文件件,使用 yo aspnetcore-middleware生成一个模板项目。

然后使用VS打开并升级到 2.0 版本,测试项目被我卸载掉了。

我们还需要打开 Dashboard.csproj ,添加一些我们需要引用的包。
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.RazorViews.Sources" Version="2.0.0" PrivateAssets="All" />
<DotNetCliToolReference Include="RazorPageGenerator" Version="2.0.0" />

其中RazorPageGenerator是一个工具包,他主要是用来编译 Razor 视图生成我们需要的Razor视图的对象。
另外 Microsoft.Extensions.RazorViews.Sources 这个包是一个源码包,通过 dotnet resore 还原过后你会发现项目中多个几个class类,他们的图标类似一个快捷方式的样式。

这几个第三方 class 类你可以不用,自己来写,这样会更加的灵活。 BaseView.cs 是编译 Razor 的时候默认集成的基类,你可以通过修改这个类来更加另外操控编译后的Razor对象具有的行为。
2、添加视图文件
接下来,我们就需要添加我们用到的视图文件了。 在 Dashboard 项目下新建一个 Views 文件夹,注意文件夹名称要用 Views。
在 Views 中添加需要的 cshtml 文件,这里要注意和 ASP.NET Core MVC 中的用法有一点不太一样,具体关于Razor的模板引擎支持的语法可以查看这里。
在 Views 文件夹中添加如下两个文件:
Home.cshtml
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Dashboard</title>
<style>
</style>
</head>
<body>
<h1>This is Dashboard home page.</h1>
<%$ include: body.html %>
</body>
</html>
body.html
<div>
<h2>
This is body content.
</h2>
</div>
3、生成视图对象class
使用 dotnet razorpagegenertor Dashboard 命令来变成生成Razor对象文件。
其中最后一个参数Dashboard为生成的文件 Home.Design.cs 的命名空间。

这个时候,其实 body.html 和 Home.cshtml 已经没有用了,因为程序在执行的时候会执行Home.Design.cs里面的代码。
4、调用对象class
接下来只需要在 DashboardMiddleware.cs 里面调用 Home.Design.cs 中的 Home 类就可以了
修改一下DashboardMiddleware.cs的构造函数,把不需要的Options配置类删掉,然后修改Invoke代码:
DashboardMiddleware.cs
public async Task Invoke(HttpContext context)
{
await new Home().ExecuteAsync(context);
}
这里不需要再await _next(context) 来接着执行下一个中间件了,因为我们提供的页面不应该受到MVC管道的控制,在启动中间件的时候放到末尾即可。
现在,我们已经做好了一个中间件。我们需要建一个示例项目测试一下。
测试
新建一个 ASP.NET Core Web MVC 项目,然后引用我们刚才创建的这个项目。在 startup.cs文件中添加中间件。
public void Configure(IApplicationBuilder app)
{
......
app.UseMVC();
//这里可以在Library内部做成一个配置,我为了方便就直接这么写了
app.Map(new Microsoft.AspNetCore.Http.PathString("/dashboard"), x =>
{
x.UseDashboard();
});
}
启动项目,访问 http://localhost:5000/dashboard 查看页面。

总结
通过本篇我们学习到了如何在一个类库中集成 Razor 视图来给调用者提供html数据或者提供页面来查看自己的内部信息,当然在实际开发的过程中的需求肯定不是这么简单,还是需要大家在使用的过程中多加学习,等学有所成再来写文章分享给另外一些需要帮助的人。
如果你觉得本篇文章对您有帮助的话,感谢你的【推荐】。
如果你对 .NET Core 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。
本文地址:http://www.cnblogs.com/savorboard/p/razor-in-library.html
作者博客:Savorboard
欢迎转载,请在明显位置给出出处及链接
.NET Core 在程序集中集成Razor视图的更多相关文章
- 基于ASP.NET Core 3.0快速搭建Razor Pages Web应用
前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案
标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun ...
- ASP.NET Core Razor 视图组件
视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- ASP.NET Core 中的SEO优化(2):中间件中渲染Razor视图
前言 上一篇文章<ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存>中介绍了中间件的使用方法.以及使用中间件实现服务端静态化缓存的功能.本系列文章的这些技巧都是我 ...
- ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...
- 在Asp.net Razor Pages/MVC程序中集成Blazor
今天试了一下在Asp.net core Razor Pages/MVC程序中集成Blazor(Server-side),还是可以完美整合的,这里以Razor Pages为例(.net core 3.1 ...
- 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图
这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...
- Core中使用Razor视图引擎渲染视图为字符串 阅读目录
Core中使用Razor视图引擎渲染视图为字符串 } <!DOCTYPE html> <html> <head> <title>Render view ...
随机推荐
- Python基础之常用模块(一)
模块本质就是一个.py文件,在安装目录下的lib文件夹下可以看到 模块分为三个部分:内置模块(存在于解释器中),第三方模块(lib文件夹下),自定义模块(自己定义的) 1.time模块 import ...
- Docker 中的一些概念
笔者使用 Mac 系统玩的,所以会更多阐述 Mac 上使用的一些东西. 在安装之前有些 Docker 相关的概念需要了解一下,以便我们更好了解 Docker. 简单来说,安装 Docker 之后,会在 ...
- tensorflow l2_normalize函数
1.l2_normalize函数 tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None) 解释:这个函数的作用是利用 L2 范数对指定维度 dim 进 ...
- Orchard 学习
https://github.com/OrchardCMS/Orchard 源码下载 http://www.orchardch.com/ 中文介绍网站
- 5.spark弹性分布式数据集
弹性分布式数据集 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹性分布式数据集 ...
- web项目-easyui-datagrid使用汇总
一,引言 工作的需要,做了3年的wpf--,又因为项目的需求,回归到web的开发. ■ 3 years ago,vue是我三年前没用过的玩意儿. ■ 3 years ago,bootstrap组件 ...
- ASP.NET Core 源码学习之 Logging[2]:Configure
在上一章中,我们对 ASP.NET Logging 系统做了一个整体的介绍,而在本章中则开始从最基本的配置开始,逐步深入到源码当中去. 默认配置 在 ASP.NET Core 2.0 中,对默认配置做 ...
- matlab怎么查看已安装哪些工具箱和…
问题描述:matlab怎么查看已安装哪些工具箱和它们相应的版本 解决方法:在命令行里敲击der,回车 效果:
- git入门(3)git checkout 和git branch分支的创建和删除
在一个项目中,需要多人同时开发,协同coding 要求: 开发时请用开发分支daily/0.0.1, 禁止直接使用master分支开发新建分支 git checkout -b daily/0.0.1 ...
- Angular2 VS Angular4 深度对比:特性、性能
欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~ 在Web应用开发领域,Angular被认为是最好的开源JavaScript框架之一. Google的Angular团队已于3月 ...