习惯了 Markdown 来记录笔记,所以编辑时使用的是 Markdown。但是在网站展示时, 希望将其转换为 HTML。
于是,搜索了一下 C# 相关的 Markdown 库。找到一个 Markdig 的库:
https://github.com/xoofx/markdig
但是,这个不能直接在 ASP.NET Core MVC 的 Razor 代码文件中使用。 需要自己封装一下。还是太麻烦了,于是找了另一个基于 Markdig 封装好的库。
https://github.com/RickStrahl/Westwind.AspNetCore.Markdown
ASP.NET Core Markdown Support
⚡️ 安装依赖
dotnet.exe add package westwind.aspnetcore.markdown
安装后,会看到 xxx.proj 文件中,新增了配置
<ItemGroup>
<PackageReference Include="westwind.aspnetcore.markdown" Version="3.21.0" />
</ItemGroup>
🔨 .NET 8.0 中使用 westwind.aspnetcore.markdown
由于官方示例中是 ASP.NET Core 3.0 的用法,而 .NET 8 的 ASP 写法已经变化。看了几个 github 项目才搞明白怎么用。
.NET 8 的用法:
Program.cs
using Westwind.AspNetCore.Markdown;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddMarkdown();
// ...
var app = builder.Build();
// must be configured before app.UseRouting()!
app.UseMarkdown();
app.UseRouting();
// ...
app.Run();
Index.cshtml razor 模板文件中:
@using Westwind.AspNetCore.Markdown
<div>
@Markdown.ParseHtmlString("## Hello world!")
</div>
✅ 完成,这样就能看到 Markdown 格式被转换成了 HTML 格式。
❎ 报错
在 cs 代码文件,及 cshtml 文件中,都不用忘了引入这个库
using Westwind.AspNetCore.Markdown;
@using Westwind.AspNetCore.Markdown
否则会报错:
Program.cs(6,18): error CS1061: 'IServiceCollection' does not contain a definition for 'AddMarkdown' and no accessible extension method 'AddMarkdown' accepting a first argument of type 'IServiceCollection' could be found (are you missing a using directive or an assembly reference?)
Program.cs(39,5): error CS1061: 'WebApplication' does not contain a definition for 'UseMarkdown' and no accessible extension method 'UseMarkdown' accepting a first argument of type 'WebApplication' could be found (are you missing a using directive or an assembly reference?)
Index.cshtml(95,6): error CS0103: The name 'Markdown' does not exist in the current context
在 VIM 中开发,不使用 Visual Studio 这样的智能 IDE,就是会有这个烦恼。
🌍 I18N 多语言翻译资源的 markdown 转换
如果在翻译用的资源文件中使用了 markdown,然后想在 Razor 中进行 HTML 转换,会报错:
cannot convert from 'Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString' to 'string'
正确的写法是,通过 .Value 将 LocalizedHtmlString 转换为 string:
@Markdown.ParseHtmlString(@Localizer["Content"].Value)
微信关注我哦 👍
我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式