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

郑州做网站建设如何在google上免费推广

郑州做网站建设,如何在google上免费推广,电脑做软件的app,找人做网站需要多少钱文章目录 前言一、核心功能二、实现步骤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/133175.html

相关文章:

  • 宗学华 网站建设seo信息网
  • 北京网站开发网站建设报价盘古百度推广靠谱吗
  • 服务器网站怎么用网络营销和传统营销有什么区别
  • 单仁营销网站的建设徐州seo排名公司
  • 衣联网和一起做网站。哪家强it学校培训学校哪个好
  • 新浪网站是什么程序做的查淘宝关键词排名软件有哪些
  • 服装网站建设建议郑州seo培训
  • 怎么创建一个网站做草根站长海外营销方案
  • 深圳网站制作google免登录网页版
  • 网站建设百度云友情链接平台网站
  • html标签代码大全微博seo营销
  • 网站建设费用多少钱如何制作网址
  • 万网网站建设步骤百度推广助手客户端
  • 自己建服务器做网站违法网络竞价推广开户
  • wordpress主题调用插件seo快速排名利器
  • 做搜狗网站优化排软件开发培训机构去哪个学校
  • 支付网站怎么做的如何进行网站宣传推广
  • asp网站后台模板seo短视频保密路线
  • 网站访客统计代码快速刷排名的软件最好
  • 化工外贸网站建设搜索引擎排名优化seo
  • 加强网站建设的通知互联网营销师培训课程免费
  • 新网站建设平台chrome浏览器官网入口
  • 淮南做网站推广开鲁网站seo站长工具
  • 网站建设鼠标移动变颜色百度网盘app免费下载安装老版本
  • 宁波 外贸b2c网站建设免费下载百度seo
  • 现在网站做多宽的怎样推广网站
  • 找别人做网站注意什么企业网站推广方案
  • 北京网站优化页面百度一下 你就知道官方
  • 江西住房和城乡建设部网站首页网站建设网络公司
  • 公众号和网站先做哪个比较好上海优化seo