.NET Core 在程序集中集成Razor视图
前言
有時候,我們在開發(fā)一個程序集供其他項(xiàng)目引用的時候,可能需要對外輸出一些HTML的結(jié)構(gòu)數(shù)據(jù)。
還有一些情況我們可能開發(fā)的是一個中間件,這個中間件需要提供一些界面來對外展示數(shù)據(jù)或者是內(nèi)部的一些程序的運(yùn)行信息,這個時候我們也需要一個界面來做這件事情。
那么,做這些界面最適合的結(jié)構(gòu)非html莫屬,在 ASP.NET 中那就是Razor視圖了。
怎么樣才能在程序集中集成 Razor 視圖,并且能夠以 NuGet 包的形式提供出去呢?也就是說別人只需要引用包,然后在瀏覽器敲指定的地址就可以看到你提供的界面了呢? 最典型的就是給你的用戶提供Dashboard界面。
其實(shí),做到這些并不難,現(xiàn)在,我來教你一步一步做。
Getting Started
這里我就以一個中間件程序?yàn)槔?#xff0c;給用戶提供一個Dashboard頁面。
1、創(chuàng)建 Middleware Library
首先,我們參照我的這篇文章,使用一秒鐘的時間新建一個中間件的模板項(xiàng)目。
這個模板項(xiàng)目還是 xproj 的產(chǎn)物,我也一直沒有時間更新,所以vs打開的時候升級一下吧。
創(chuàng)建一個文件件,使用?yo aspnetcore-middleware生成一個模板項(xiàng)目。
然后使用VS打開并升級到 2.0 版本,測試項(xiàng)目被我卸載掉了。
我們還需要打開 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?還原過后你會發(fā)現(xiàn)項(xiàng)目中多個幾個class類,他們的圖標(biāo)類似一個快捷方式的樣式。
這幾個第三方 class 類你可以不用,自己來寫,這樣會更加的靈活。?BaseView.cs?是編譯 Razor 的時候默認(rèn)集成的基類,你可以通過修改這個類來更加另外操控編譯后的Razor對象具有的行為。
2、添加視圖文件
接下來,我們就需要添加我們用到的視圖文件了。 在 Dashboard 項(xiàng)目下新建一個?Views?文件夾,注意文件夾名稱要用 Views。
在 Views 中添加需要的 cshtml 文件,這里要注意和 ASP.NET Core MVC 中的用法有一點(diǎn)不太一樣,具體關(guān)于Razor的模板引擎支持的語法可以查看這里。
在 Views 文件夾中添加如下兩個文件:
Home.cshtml
<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對象文件。
其中最后一個參數(shù)Dashboard為生成的文件 Home.Design.cs 的命名空間。
這個時候,其實(shí) body.html 和 Home.cshtml 已經(jīng)沒有用了,因?yàn)槌绦蛟趫?zhí)行的時候會執(zhí)行Home.Design.cs里面的代碼。
4、調(diào)用對象class
接下來只需要在?DashboardMiddleware.cs?里面調(diào)用 Home.Design.cs 中的 Home 類就可以了
修改一下DashboardMiddleware.cs的構(gòu)造函數(shù),把不需要的Options配置類刪掉,然后修改Invoke代碼:
DashboardMiddleware.cs
public async Task Invoke(HttpContext context){? ?await new Home().ExecuteAsync(context); }
這里不需要再await _next(context)?來接著執(zhí)行下一個中間件了,因?yàn)槲覀兲峁┑捻撁娌粦?yīng)該受到MVC管道的控制,在啟動中間件的時候放到末尾即可。
現(xiàn)在,我們已經(jīng)做好了一個中間件。我們需要建一個示例項(xiàng)目測試一下。
測試
新建一個 ASP.NET Core Web MVC 項(xiàng)目,然后引用我們剛才創(chuàng)建的這個項(xiàng)目。在?startup.cs文件中添加中間件。
public void Configure(IApplicationBuilder app){......app.UseMVC(); ? ?//這里可以在Library內(nèi)部做成一個配置,我為了方便就直接這么寫了app.Map(new Microsoft.AspNetCore.Http.PathString("/dashboard"), x =>{x.UseDashboard();}); }啟動項(xiàng)目,訪問?http://localhost:5000/dashboard?查看頁面。
總結(jié)
通過本篇我們學(xué)習(xí)到了如何在一個類庫中集成 Razor 視圖來給調(diào)用者提供html數(shù)據(jù)或者提供頁面來查看自己的內(nèi)部信息,當(dāng)然在實(shí)際開發(fā)的過程中的需求肯定不是這么簡單,還是需要大家在使用的過程中多加學(xué)習(xí),等學(xué)有所成再來寫文章分享給另外一些需要幫助的人。
如果你覺得本篇文章對您有幫助的話,感謝你的【推薦】。
如果你對 .NET Core 有興趣的話可以關(guān)注我,我會定期的在博客分享我的學(xué)習(xí)心得。
總結(jié)
以上是生活随笔為你收集整理的.NET Core 在程序集中集成Razor视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Orleans的集群构建
- 下一篇: ASP.NET Core 防止跨站请求伪