前言

有时候,我们在开发一个程序集供其他项目引用的时候,可能需要对外输出一些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 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。

.NET Core 在程序集中集成Razor视图相关推荐

  1. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    1 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Microsoft Graph 服务针对一些主流的 ...

  2. ASP.NET Core Razor 视图组件

    视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...

  3. netcore 编译 html dll,ASP.NET Core Razor 视图预编译、动态编译

    0x01 前言 ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布.下面我将从 ASP.NE ...

  4. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

    在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...

  5. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

    在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题,并给出了一个案例应用程序:tasklist.今天接着上文的内容,继续了解一下如何使用Azure DevOps进行ASP.NE ...

  6. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

    上个月15日,上海MVP做了一次线下的技术分享活动,我分享的主题是<快速构建容器化的ASP.NET Core应用程序>,有关这次活动的简报,可以参考这里.另外,我的主题分享的PPT也可以点 ...

  7. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  8. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天

    目录 主题 路线图 Jenkins 先决条件 使用Jenkins Azure Pipeline在Azure上的ASP.NET Core应用程序的CI/CD 创建新的管道作业 添加参数 添加管道脚本 运 ...

  9. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天

    目录 主题 路线图 先决条件 Azure Active Directory和服务主体 创建一个Azure Active Directory和服务主体 将应用程序集成到角色 将Jenkins与Azure ...

最新文章

  1. des vue 双倍长 解密_3DES双倍长加密 - osc_ojx9hm4t的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. TRex 学习 (4) ---- stateful ( advanced )
  3. vue项目结构php写哪里,Vue-cli搭建项目后目录结构的分析(图文)
  4. 对当前JAVA流行框架的一些小感悟
  5. 用户自定义类型(User-defined Type)参数的传递
  6. VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]
  7. 在线富文本编辑器FckEditor配置(.Net Framework 3.5)
  8. mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度
  9. mpvue 从零开始 女友拉黑了我 5 不在以下request 合法域名列表中,请参考文档
  10. java文件下载至linux乱码,JAVA 文件下载乱码问题解决办法
  11. Redis 哨兵(sentinel)模式集群配置(5.0.3版本)
  12. readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
  13. [SAP ABAP开发技术总结]选择屏幕——各种屏幕元素演示
  14. web前端 基于html实现花店购物网站源码(HTML+CSS+JavaScript) 企业网站制作
  15. linux 关闭后台程序
  16. Do带你解析:原生APP与web APP的区别
  17. 虚幻4地形怎么增加层_虚幻周报20200114 | 新春快乐!
  18. 域名批量查询 网站域名批量查询
  19. 【案例28】银行对账单管理-在线下载优化记录
  20. back-end 后端开发面试题

热门文章

  1. 完全卸载mysql数据库图文教程
  2. CSS- 横向和纵向时间轴
  3. C#中的多线程 - 并行编程 z
  4. Java中Filter的理解
  5. MFC的Button和Static控件
  6. C# 11 预览,又增加了实用的语法糖
  7. 磨刀不误砍柴工—Exceptionless搭配log4net记录日志
  8. 基于事件驱动架构构建微服务第9部分:处理更新
  9. C#刷剑指Offer | 二叉树中和为某一值的路径
  10. C#刷剑指Offer | 在O(1)时间删除链表节点