昨天发了一篇介绍这个库:C# Blazor中显示Markdown文件,介绍怎么在Blazor中显示Markdown内容的文章,文章内的代码是没有高亮的,思来相去,还是要做好,于是百度到这篇文章.NET C# Blazor 服务端渲染Markdown,现在渲染效果如下:

自认为应该是比较完美了,下面说说怎么做的。

一、准备工具

1.1 添加Markdown转html包:Markdig

Markdig:Markdig 是一个快速、强大、符合CommonMark标准、可扩展的 .NET Markdown 处理器。

<PackageReference Include="Markdig" Version="0.27.0" />

1.2 引入Prism插件

此Prism非彼Prism,是一个JS插件:Prism 是一个轻量级、健壮且优雅的语法高亮库。这是Dabblet的一个衍生项目。

_Layout.cshtmlhead中引入:

<head>
....
<!--重置浏览器样式-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.css">
<!--代码块主题-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/themes/prism-coy.min.css">
<!--工具栏插件-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/toolbar/prism-toolbar.min.css">
<!--行号插件-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/line-numbers/prism-line-numbers.min.css">
...
</head>
<body>
...
<!--prism核心js (用于渲染代码块)-->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/prism.min.js"></script>
<!--显示代码块行号-->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
<!--工具栏(一些插件的前置依赖)-->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/toolbar/prism-toolbar.min.js"></script>
<!--代码块显示语言名称-->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/show-language/prism-show-language.min.js"></script>
<!--复制代码-->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>
<!--自动去cdn加载对应语言的代码高亮js-->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.27.0/plugins/autoloader/prism-autoloader.min.js"></script>
</body>

二、使用

我将Markdown展示单独提取成了组件MarkdownComponent.razor,将加载的Markdown文件相对路径、需要链接的文章链接和源码链接做成参数,方便后面其他工具复用,下面的代码片段主要在这个文件内。

组件参数定义:

@code {[Parameter]public string LocalPostFilePath { get; set; } = null!;[Parameter]public string RemotePostUrl { get; set; } = null!;[Parameter]public string SourceCodeUrl { get; set; } = null!;
}

Markdown内容读取,Markdown格式转htmlOnInitializedAsync()方法中定义:

protected override async Task OnInitializedAsync()
{var markdownData = await File.ReadAllTextAsync(LocalPostFilePath);// markdown 转为 htmlvar htmlData = Markdown.ToHtml(markdownData);// 转为 prism 支持的语言标记(不是必须,可以删除)htmlData = htmlData.Replace("language-golang", "language-go");// TODO: 使用 https://github.com/mganss/HtmlSanitizer 清洗html中的xssif (htmlData.Contains("<script") || htmlData.Contains("<link")){_hasXss = true;}// 将 普通文本 转为 可以渲染的html的类型_postHtmlContent = (MarkupString) htmlData;
}

最后一步,需要在组件完成后,调用Prism插件方法,写在方法OnAfterRenderAsync(bool firstRender)中,这是做代码高亮的关键代码:

protected override async Task OnAfterRenderAsync(bool firstRender)
{await _jsRuntime.InvokeVoidAsync("Prism.highlightAll");
}

渲染相对来说就简单了(只针对我们使用),见下面的代码:

<div class="line-numbers">@{if (_hasXss){@_postHtmlContent.ToString()}else{@_postHtmlContent}}
</div>

IcoTool.razor调用该组件:

<MarkdownComponentLocalPostFilePath="wwwroot/2022/02/2022-02-22_02.md"RemotePostUrl="https://dotnet9.com/1715"SourceCodeUrl="https://github.com/dotnet9/dotnet9.com/blob/develop/src/Dotnet9.Tools.Web/Pages/Public/ImageTools/IcoTool.razor"/>

当然组件封装看个人需求,大致思路是上面的,就不贴详细代码了,有兴趣看看Dotnet9工具箱源码。

参考文章:

  • .NET C# Blazor 服务端渲染Markdown

完美:C# Blazor中显示Markdown并添加代码高亮相关推荐

  1. 介绍这个库:C# Blazor中显示Markdown文件

    1 讲目的 前几天上线了一个在线Icon转换工具[1],为了让大家使用放心,改了点代码,在转换下载Icon图标后立即删除临时文件,并在工具下面贴上了工具的开发步骤和代码,大家看这样改是否合适,见Iss ...

  2. html显示docx,网页中显示PDF的HTML代码.docx

    网页中显示PDF的HTML代码 您可能想打开文档至某一特别页面或目标,或显示书签.要与 链接一起放入一个动作命令,可紧接在 PDF 文件名后面键入数字符号 (#) 和该命令.以下表格显示可能的动作命令 ...

  3. 使用prismjs为网站添加代码高亮功能

    prismjs 是一款轻量.可扩展的代码语法高亮库,使用现代化的 Web 标准构建,使用 Prismjs 可以快速为网站添加代码高亮功能,支持超过113中编程语言,还支持多种插件,是简洁.高效的代码高 ...

  4. ckeditor4.4.6添加代码高亮

    研究了很久才发现,在 ckeditor4.4.6中添加代码高亮超级简单啊,下面直接上过程 ckeditor4.4.6支持自定义代码高亮,利用Code Snippet插件并默认启用highlight.j ...

  5. HTML自动获取地址,网页中自动获取经纬度值并在地图中显示当前位置实例代码...

    下面的HTML代码就是实例完整代码,如果你需要本项目完整实例代码,下载链接在文章最底部 网页中自动获取经纬度值并在地图中显示当前位置,可在地图中进行拖动选择当前位置并输出经纬度,这是项目实例代码,可参 ...

  6. activiti高亮显示图片_第 09 篇:让博客支持 Markdown 语法和代码高亮

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到HelloGitHub-Team 仓库[1] 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法 ...

  7. Django博客--5.让博客支持 Markdown 语法和代码高亮

    文章目录 0.前言 1.安装 Python Markdown 2.在 detail 视图中解析 Markdown 3.safe 标签 4.代码高亮 5.效果展示 0.前言 Markdown 是一种 H ...

  8. markdown引入代码_第 09 篇:让博客支持 Markdown 语法和代码高亮

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到HelloGitHub-Team 仓库[1] 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法 ...

  9. 在vue项目中使用prismjs(网页代码高亮插件)

    在vue项目中使用prismjs 什么是prismjs prismjs是一款代码高亮美化插件,在一些技术博客类的网站中需要展示代码时,可以使用它类似与markdown的代码块, 官网链接:https: ...

最新文章

  1. usaco A game
  2. util类中非静态方法中注入serivce,在controller层是使用util。
  3. html选中radio隐藏div,radio类型的input标签选中后隐藏其他元素
  4. 第五天学习Java的笔记(if,switch顺序结构)
  5. Java静态方法与非静态方法的泛型
  6. 【转载】我是一个线程(修订版)
  7. 央视被黑内幕,居然存在暴库及上传漏洞
  8. C语言求斐波那契数列前10项
  9. QT5实现摄像头预览与扑捉图像
  10. android for armeabi,【我的Android进阶之旅】解决错误ABIs [armeabi] are not supported for platform....
  11. Svchost.exe病毒的简单处理
  12. 波士顿动力Spot mini,MIT 猎豹、宇树科技、蔚蓝四足机器人类别
  13. 吉他指弹入门——日式指弹的pm技巧
  14. android 源代码分析 绘制,Android源码分析(View的绘制流程)
  15. 一个破解压缩包密码的软件——ziperello
  16. Android 解决65536
  17. 拉格朗日乘子和KTT条件
  18. 新神魔大陆服务器维护,《新神魔大陆》手游8月20日合服维护公告
  19. 阿里云发布的数加是什么鬼
  20. 黄聪:CR2格式批量转换JPG(美图看看)

热门文章

  1. java数据类型后加三个点...
  2. RabbitMQ学习3----运行和管理RabbitMQ
  3. ECShop 前台用户中心调整左侧栏目及中心部分呈现页面
  4. SAP中查询用户操作日志的事务码
  5. paip.C#.NET JSON解析总结
  6. 基于GDAL库,读取海洋风场数据(.nc格式)c++版
  7. day4----函数-闭包-装饰器
  8. Codeforces Round #410 (Div. 2) D. Mike and distribution 思维+数学
  9. 斯坦福大学Andrew Ng - 机器学习笔记(8) -- 推荐系统 大规模机器学习 图片文字识别...
  10. LeetCode - 3Sum Closest