.NET Core 在程序集中集成Razor视图

2023-10-27

前言

有时候,我们在开发一个程序集供其他项目引用的时候,可能需要对外输出一些HTML的结构数据。

还有一些情况我们可能开发的是一个中间件,这个中间件需要提供一些界面来对外展示数据或者是内部的一些程序的运行信息,这个时候我们也需要一个界面来做这件事情。

那么,做这些界面最适合的结构非html莫属,在 ASP.NET 中那就是Razor视图了。

怎么样才能在程序集中集成 Razor 视图,并且能够以 NuGet 包的形式提供出去呢?也就是说别人只需要引用包,然后在浏览器敲指定的地址就可以看到你提供的界面了呢? 最典型的就是给你的用户提供Dashboard界面。

其实,做到这些并不难,现在,我来教你一步一步做。

Getting Started

这里我就以一个中间件程序为例,给用户提供一个Dashboard页面。

1、创建 Middleware Library

首先,我们参照我的这篇文章,使用一秒钟的时间新建一个中间件的模板项目。

这个模板项目还是 xproj 的产物,我也一直没有时间更新,所以vs打开的时候升级一下吧。

创建一个文件件,使用 yo aspnetcore-middleware生成一个模板项目。

250417-20170830175227374-406958238.png

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

250417-20170830175940015-728852323.png

我们还需要打开 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" />

250417-20170830180506921-128249095.png

其中RazorPageGenerator是一个工具包,他主要是用来编译 Razor 视图生成我们需要的Razor视图的对象。

另外 Microsoft.Extensions.RazorViews.Sources 这个包是一个源码包,通过 dotnet resore 还原过后你会发现项目中多个几个class类,他们的图标类似一个快捷方式的样式。

250417-20170830181355655-1964487045.png

这几个第三方 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 的命名空间。

250417-20170830184313187-2021689890.png

这个时候,其实 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 查看页面。

250417-20170831091526358-2025038917.png

总结

通过本篇我们学习到了如何在一个类库中集成 Razor 视图来给调用者提供html数据或者提供页面来查看自己的内部信息,当然在实际开发的过程中的需求肯定不是这么简单,还是需要大家在使用的过程中多加学习,等学有所成再来写文章分享给另外一些需要帮助的人。

如果你觉得本篇文章对您有帮助的话,感谢你的【推荐】。

如果你对 .NET Core 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。


本文地址:http://www.cnblogs.com/savorboard/p/razor-in-library.html
作者博客:Savorboard
欢迎转载,请在明显位置给出出处及链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Core 在程序集中集成Razor视图 的相关文章

随机推荐

  • 运行ddddocr项目,报错 DLL load failed: 找不到指定的模块

    我的环境是python3 7 9的 from onnxruntime pybind11 state import noqa ImportError DLL load failed 找不到指定的模块 看了网上什么改这改那的 太麻烦了 后来发现
  • 2.搭建一个spring-boot项目(git项目)

    很多同学在搭建一个springboot项目的时候会遇到很多问题 闲来无事我就自己搭建了一个基础的框架 大家可以自己看看 框架主要包括 初始化配置 数据库配置 Mysql mybatis plus JPA 自动生成代码 logback 基本上
  • Grafana 安装(Centos7)

    一 联网安装 1 Grafana安装 1 下载grafana wget https dl grafana com oss release grafana 8 0 3 1 x86 64 rpm wget https dl grafana co
  • java stream 多个filter_跟光磊学Java开发-流式编程

    使用Stream API操作集合 假设现在有一批名字数据 需要筛选出姓张的人后来需求又变了 需要筛选出姓张 而且名字长度大于等于3的人 使用传统方式操作集合只要操作集合都不得不需要使用循环遍历元素每次筛选后都需要使用新的集合存储元素 pac
  • jdbc的练习:建立一个连接数据库的类

    import java sql public class DatabaseConnection String driver com mysql jdbc Driver String url jdbc mysql localhost 3306
  • 【Pytorch深度学习实战】(8)双向循环神经网络(BiRNN)

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • c语言:char *c;测试

    include
  • html图片列表选择器,CSS 列表

    CSS 列表 从某种意义上讲 不是描述性的文本的任何内容都可以认为是列表 人口普查 太阳系 家谱 参观菜单 甚至你的所有朋友都可以表示为一个列表或者是列表的列表 由于列表如此多样 这使得列表相当重要 所以说 CSS 中列表样式不太丰富确实是
  • Laravel 图片不显示解决方案

    转自 https blog csdn net qq 18951197 article details 93163149 图片文件存储位置为 项目目录 storage app public 1 在项目目录下执行命令创建过软链接 php art
  • ELF文件查看利器之objdump用法

    Android在NDK开发工具中提供了objdump 用来帮助开发者查看编译后目标文件的组成结构和具体内容 常用的有以下几个功能选项 1 a或者 archive headers 这个参数起到的作用和ar命令相似 用来看一个 a静态库文件中包
  • OpenStack--部署nova控制节点与计算节点

    官方部署文档 https docs openstack org mitaka zh CN install guide rdo common get started compute html 1 安装并配置 nova 控制节点 官方安装文档
  • ISP算法学习之LSC(镜头阴影校正)

    LSC Lens Shading Correction 是ISP算法中的一个重要组成部分 用于校正镜头遮挡 lens shading 现象 镜头遮挡是由于镜头和图像传感器的光学特性导致的图像亮度不均匀的现象 通常 图像的中心部分较亮 而边缘
  • 破解软件的原理是什么(软件被破解公开)

    到底魔高一丈吗 还是路的高度是一丈 破解与破解之间就像矛盾和矛盾 从第一个软件上线之日起 这就成为了永恒的话题 即使是牛群也不可避免地破译了自己的软件 这不是技术问题 而是信息化时代的产物 软件基于二进制文件存储在系统中 运行时系统平台必须
  • rsync推拉复制同步脚本编写(详细)内附jenkins通过rsync脚本部署到tomcat

    本处基于saltstack的配置目录里分解rsync的tar包 倒序讲解 root master rsync ls rsyncd tar gz 后两个是推复制rsyncd tui master tar gz rsync tui slave
  • JDBC连接MySQL数据库

    文章目录 前言 一 怎么链接数据库 二 使用步骤 https img blog csdnimg cn 91945baa8c094d48890a557614f46fd7 png x oss process image watermark ty
  • stm32定时器详解

    目录 一 时基配置 定时器定时周期计算 二 捕获 比较通道配置 定时器捕获比较模式说明 三 中断优先级配置 四 开启中断与定时器相关函数 链接 一 时基配置 定时器时基配置主要是配置定时器周期 即分频系数和自动重载寄存器 比如现在我需要配置
  • 土壤湿度计检测模块 土壤湿度传感器 机器人智能小车

    https item taobao com item htm spm a1z09 2 0 0 67002e8dtYpcae id 522556171397 u rklgtpkf6bb 土壤湿度模块是一个简易的水分传感器可用于检测土壤的水分
  • 组件路由传参【vue3】

    大家对于vue3也已经不太陌生了 但是在路由传参中会遇到一点小问题 不知大家是否也遇到过 一起来看一下 首先是我们熟悉的vue路由传参 无非就是个router来进行的操作 首先就是导入vue router 这里一定要导入4版本的 不然vue
  • 文件和注册表的重定向解决方法

    注册表重定向解决办法 转载http www 2cto com os 201411 350858 html 32位程序如何访问64位的注册表 HKLM Software 在调用函数RegCreateKeyEx创建注册表项时 对其第六个参数RE
  • .NET Core 在程序集中集成Razor视图

    前言 有时候 我们在开发一个程序集供其他项目引用的时候 可能需要对外输出一些HTML的结构数据 还有一些情况我们可能开发的是一个中间件 这个中间件需要提供一些界面来对外展示数据或者是内部的一些程序的运行信息 这个时候我们也需要一个界面来做这