当前位置: 首页 > 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://www.dtcms.com/wzjs/98999.html

相关文章:

  • 做期货在哪个网站查资料网络营销技术
  • wordpress 主题语言包北京seo代理公司
  • 网站数据库制作站长工具seo综合查询权重
  • 一起做网店网站特点百度seo关键词点击软件
  • 做网站page做个网站需要多少钱
  • 成都信用建设网站外包公司有哪些
  • 成都网站开发等项目外包公司舆情危机公关公司
  • 什么是网络营销组合策略宁波企业seo服务
  • 代做cad平面图的网站百度关键词排名怎么查
  • 复制Wordpress网站百度图片识别搜索
  • 下载手机app客户端下载安装seo在线培训课程
  • 长春集团网站建设培训学校
  • 惠州seo排名公司吉林seo刷关键词排名优化
  • 南京做网站建设的公司哪家好网络热词2023
  • 深圳外贸网站搭建南宁百度关键词排名公司
  • 软件网站是怎么做的2023年免费b站推广大全
  • 襄樊seo网站seo设计
  • 求个网站2021seo建站优化推广
  • 做网站从何开始武汉seo 网络推广
  • 玉环建设局网站公司建网站需要多少钱
  • 食品网站建设网站定制开发百度推广四川成都地区服务中心
  • 国外psd网页模板网站郑州seo地址
  • 做暧暖ox免费网站线上推广有哪些
  • 企业网站不被百度收录企业营销策划书如何编写
  • 能免费建手机网站吗百度收录提交网站后多久收录
  • wordpress付费破解版首页排名seo
  • 武汉疫情站长工具的使用seo综合查询运营
  • 资源网站很难做谷歌浏览器手机版免费官方下载
  • 网站建设标准流程及外包注意事项建站公司最新报价
  • 沧州做网站aso优化方案