当前位置: 首页 > wzjs >正文

做企业网站需要什么广东新闻频道直播

做企业网站需要什么,广东新闻频道直播,前端用什么软件开发,青岛高创网站建设文章目录 前言一、核心功能二、实现步骤1)安装依赖包2)创建中间件类3)中间件扩展方法4)在Program.cs配置5)模板文件示例6)*.md文件示例7)缓存优化8)使用示例 三、注意事项总结 前言 …

文章目录

  • 前言
  • 一、核心功能
  • 二、实现步骤
    • 1)安装依赖包
    • 2)创建中间件类
    • 3)中间件扩展方法
    • 4)在Program.cs配置
    • 5)模板文件示例
    • 6)*.md文件示例
    • 7)缓存优化
    • 8)使用示例
  • 三、注意事项
  • 总结


前言

Markdown 内容的动态渲染,适用于文档系统、博客引擎等场景。

一、核心功能

  • 自动识别请求路径:将 .md.markdown 结尾的请求视为 Markdown 文件请求。

  • 实时转换:将 Markdown 内容转换为 HTML

  • 支持模板嵌入:将渲染后的 HTML 嵌入统一布局模板。

  • 异常处理:处理文件不存在或转换错误。

二、实现步骤

1)安装依赖包

  1. 使用 NuGet 安装 Markdown 解析库(推荐 Markdig):
    Install-Package Markdig
    

2)创建中间件类

  1. MarkdownRenderingMiddleware.cs
    using Microsoft.Extensions.FileProviders;namespace MarkDownMiddleware.Middleware
    {public class MarkdownRenderingMiddleware{private readonly RequestDelegate next;private readonly IFileProvider _fileProvider;private readonly string _template;public MarkdownRenderingMiddleware(RequestDelegate next, IFileProvider fileProvider, string template=null){this.next = next;_fileProvider = fileProvider;_template = template ?? "<html><body>{0}</body></html>";}public async Task InvokeAsync(HttpContext context){var path=context.Request.Path.Value;if (!path.EndsWith(".md")&&!path.EndsWith(".markdown")){await next(context);return;}var fileInfo=_fileProvider.GetFileInfo(path);if (!fileInfo.Exists){context.Response.StatusCode = 404;await context.Response.WriteAsync($"Markdown file ({path}) not found");return;}// 读取 Markdown 内容using var stream = fileInfo.CreateReadStream();using var reader = new StreamReader(stream);var markdown = await reader.ReadToEndAsync();// 转换为 HTMLvar html = Markdig.Markdown.ToHtml(markdown);// 嵌入模板var fullHtml = string.Format(_template, html);// 返回响应context.Response.ContentType = "text/html";await context.Response.WriteAsync(fullHtml);}}
    }
    

3)中间件扩展方法

  1. MarkdownRenderingMiddlewareExtensions.cs
    using MarkDownMiddleware.Middleware;
    using Microsoft.Extensions.FileProviders;namespace MarkDownMiddleware.Extensions
    {public static class MarkdownRenderingMiddlewareExtensions{public static IApplicationBuilder UseMarkdownRendering(this IApplicationBuilder app,string templatePath = null,string fileProviderRoot="wwwroot"){var fileProvider=new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),fileProviderRoot));string template = null;if (!string.IsNullOrEmpty(templatePath)){var templateFile=fileProvider.GetFileInfo(templatePath);if (templateFile.Exists){using var stream=templateFile.CreateReadStream();using var reader=new StreamReader(stream);template = reader.ReadToEnd();}}return app.UseMiddleware<MarkdownRenderingMiddleware>(fileProvider,template);}}
    }
    

4)在Program.cs配置

  1. Program.cs
    using MarkDownMiddleware.Extensions;
    using MarkDownMiddleware.Middleware;
    using Microsoft.AspNetCore.Mvc.ApplicationParts;
    using Microsoft.Extensions.FileProviders;var builder = WebApplication.CreateBuilder(args);// Add services to the container.
    builder.Services.AddControllersWithViews();
    // 注册 IFileProvider 服务(指向 wwwroot 目录)
    builder.Services.AddSingleton<IFileProvider>(new PhysicalFileProvider(builder.Environment.WebRootPath)
    );
    var app = builder.Build();if (!app.Environment.IsDevelopment())
    {app.UseExceptionHandler("/Home/Error");// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.app.UseHsts();
    }app.UseHttpsRedirection();
    //app.UseMiddleware<MarkdownRenderingMiddleware>();
    app.UseMarkdownRendering(templatePath: "/template/layout.html",fileProviderRoot:"Content");
    app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");app.Run();

5)模板文件示例

  1. layout.html
    <!-- Content/template/layout.html -->
    <!DOCTYPE html>
    <html>
    <head><meta charset="utf-8"><title>Markdown Render</title><link rel="stylesheet" href="/styles/markdown.css">
    </head>
    <body><div class="markdown-body">{0} <!-- Markdown 内容插入位置 --></div>
    </body>
    </html>
    

6)*.md文件示例

  1. test.md

7)缓存优化

  1. 在中间件添加内存缓存
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Caching.Memory;namespace MarkDownMiddleware.Middleware
{public class MarkdownRenderingMiddleware{private readonly RequestDelegate next;private readonly IFileProvider _fileProvider;private readonly string _template;private readonly IMemoryCache _memoryCache;public MarkdownRenderingMiddleware(RequestDelegate next,IFileProvider fileProvider,string template = null,IMemoryCache memoryCache = null){this.next = next;_fileProvider = fileProvider;_template = template ?? "<html><body>{0}</body></html>";_memoryCache = memoryCache;}public async Task InvokeAsync(HttpContext context){var path=context.Request.Path.Value;if (!path.EndsWith(".md")&&!path.EndsWith(".markdown")){await next(context);return;}var cacheKey = $"markdown_{path}";if (_memoryCache.TryGetValue(cacheKey, out string cachedHtml)){await context.Response.WriteAsync(cachedHtml);return;}var fileInfo=_fileProvider.GetFileInfo(path);if (!fileInfo.Exists){context.Response.StatusCode = 404;await context.Response.WriteAsync($"Markdown file ({path}) not found");return;}// 读取 Markdown 内容using var stream = fileInfo.CreateReadStream();using var reader = new StreamReader(stream);var markdown = await reader.ReadToEndAsync();// 转换为 HTMLvar html = Markdig.Markdown.ToHtml(markdown);// 嵌入模板var fullHtml = string.Format(_template, html);// 返回响应context.Response.ContentType = "text/html";await context.Response.WriteAsync(fullHtml);_memoryCache.Set(cacheKey, fullHtml, TimeSpan.FromMinutes(10));}}
}

8)使用示例

  1. 访问https://localhost:7066/test.md

三、注意事项

  • 安全性:限制文件目录,避免路径遍历攻击。

  • 性能:对高频访问的 Markdown 文件启用缓存。

  • SEO 优化:在模板中添加 标签增强搜索引擎友好性。


总结

通过此中间件,可快速实现 Markdown 内容的动态渲染,适用于文档系统、博客引擎等场景。


文章转载自:

http://5fB9ZzY3.pghgq.cn
http://RdNf9qnV.pghgq.cn
http://fBpgdc05.pghgq.cn
http://WqRJTDaP.pghgq.cn
http://z2ElXp1z.pghgq.cn
http://3sPwdqFc.pghgq.cn
http://9Z8j4yQr.pghgq.cn
http://xXMuhoOJ.pghgq.cn
http://y8jK1S3F.pghgq.cn
http://unA2hsUU.pghgq.cn
http://3oMORfKe.pghgq.cn
http://WQMWDqUG.pghgq.cn
http://0NIf1BcP.pghgq.cn
http://yD5iHVrM.pghgq.cn
http://0KKdDf1U.pghgq.cn
http://kAObpsBe.pghgq.cn
http://hejPJK4T.pghgq.cn
http://aPcf3gNH.pghgq.cn
http://NhAyUaKZ.pghgq.cn
http://CvTM5ObA.pghgq.cn
http://tV64JFFA.pghgq.cn
http://nkFhxqd9.pghgq.cn
http://6LUn4HN7.pghgq.cn
http://Sz0mqbQD.pghgq.cn
http://0EBFzgXf.pghgq.cn
http://Rajdzjne.pghgq.cn
http://lsBucoRv.pghgq.cn
http://xM1HnNjR.pghgq.cn
http://tY30jZJm.pghgq.cn
http://xdJGNRzX.pghgq.cn
http://www.dtcms.com/wzjs/741800.html

相关文章:

  • 甘肃住房城乡建设厅网站首页wordpress退出
  • 广东省高校质量工程建设网站同心食品厂网站建设项目任务分解
  • 网站开发运营公司系统里看不到wordpress
  • 怎么查寻一个网站做的竞价免费网站设计定制
  • 衡水网站制作设计网络推广的几种主要方法
  • 设计接单子网站做排行榜的网站
  • 网站做管制户外刀具网站后台上传内容前台首页不显示
  • 淄博什么兼职的网站建设锚文本外链网站
  • 网站建立多少钱网站开发团队人员
  • 淘宝做的网站会不会过期有一个做场景动画的网站
  • 开放一个网站多少钱网站建设路由器怎么设置
  • 怎么做网站导航杭州网站建设洛洛科技
  • 定制网站建设公司排行wordpress 分类折叠
  • seo品牌优化百度资源网站推广关键词排名永康公司做网站
  • 招标网站建设申请深圳最新消息
  • 怎么用7牛云做网站建立平台型组织第一步需要做什么
  • 中山网站建设如何房产网站建设
  • 网站加外链深圳网站设计哪好
  • 重庆网站推广系统专业做家电的网站
  • 做企业网站收费多少品牌形象设计的意义
  • 公司网站备案名称广东双语网站建设价格
  • 医药公司网站建设备案幕墙配件在那个网站做推广好
  • 虚拟主机网站建设步骤?网站建设空标记
  • 昆明企业网站设计公司网站建设公司团队简介
  • 长沙网站快速排名优化网站开发研
  • 无锡企业网站建设报价如何给网站做seo优化
  • 深圳排名网站python 菜鸟教程
  • 哪个网站可以做教师招聘题目360全景图制作
  • 动态效果的网站建设技术wordpress get cat id
  • 用家庭宽带做网站制作一个网站大概需要多少钱