ASP.NET Core Razor 网页模板中将 Markdown 转换为 HTML

更新日期: 2024-09-06 阅读次数: 507 字数: 489 分类: Windows

习惯了 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 聊聊, 查看更多联系方式

tags: dotnet