visual studio 配置 asp.net core razor .shtml文件类型和包含,支持跨平台通用

浪淘沙12个月前后端280

自己在 ASP.NET Core 里写 Middleware 解析 SSI

自己在 ASP.NET Core 里写 Middleware 解析 SSI
// 先处理 .shtml 文件(SSI)
app.Use(async (context, next) =>
{
    var path = context.Request.Path.Value;

    if (!string.IsNullOrEmpty(path) && path.EndsWith(".shtml", StringComparison.OrdinalIgnoreCase))
    {
        var filePath = Path.Combine(env.WebRootPath, path.TrimStart('/'));

        if (File.Exists(filePath))
        {
            var content = await File.ReadAllTextAsync(filePath);

            // 处理 <!--#include file="xxx.html" -->
            var regex = new Regex(@"<!--#include\s+file=""([^""]+)""\s*-->", RegexOptions.IgnoreCase);

            content = regex.Replace(content, match =>
            {
                var includeFile = Path.Combine(Path.GetDirectoryName(filePath)!, match.Groups[1].Value);

                if (File.Exists(includeFile))
                {
                    return File.ReadAllText(includeFile);
                }
                else
                {
                    return $"<!-- include {match.Groups[1].Value} not found -->";
                }
            });

            context.Response.ContentType = "text/html; charset=utf-8";
            await context.Response.WriteAsync(content);
            return; // ⚠️ 一定要 return,避免走到 UseStaticFiles
        }
    }

    await next();
});

// 其它静态文件(CSS, JS, 图片等)
app.UseStaticFiles();


相关文章

asp.net core razor加载模板文件路径

  var templateContent = "${include(\"" + App.HostE...

asp.net core razor和api 都同时支持登录身份判断属性写法

using Microsoft.AspNetCore.Mvc.Filters;namespace xxtsoft.Application.Filters{   ...

SqlSugar

   var dt = _db.SqlQueryable<object>("select * fr...

asp.net core post

<form class="layui-form layui-form-pane" action="" method...

asp.net core url编码

using System.Text.Encodings.Web; string url = "测试 参数 &&nbs...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。