C# 在ASP.NET core 2.0中修改请求文件的内容

C# 在ASP.NET core 2.0中修改请求文件的内容,c#,asp.net-core,kestrel-http-server,C#,Asp.net Core,Kestrel Http Server,我正在尝试使用下面的代码更改指定请求文件的主体。index.html文件已正确发送到客户端,但head部分中包含的其他文件在客户端是空的(文件显示在chrome的sources选项卡中)。红隼不报告任何错误。你能解释一下为什么吗 public static Func<HttpContext, Func<Task>, Task> Rewrite() { return async (context, next) => { if (cont

我正在尝试使用下面的代码更改指定请求文件的主体。index.html文件已正确发送到客户端,但head部分中包含的其他文件在客户端是空的(文件显示在chrome的sources选项卡中)。红隼不报告任何错误。你能解释一下为什么吗

public static Func<HttpContext, Func<Task>, Task> Rewrite()
{
    return async (context, next) =>
    {
        if (context.Request.Path.Value == "/")
        {
            var originalStream = context.Response.Body;

            using (Stream bufferStream = new FileStream("./wwwroot/index.html", FileMode.Open, FileAccess.Read))
            {
                context.Response.Body = bufferStream;
                bufferStream.Seek(0, SeekOrigin.Begin);

                using (var reader = new StreamReader(bufferStream))
                {
                    var response = await reader.ReadToEndAsync();
                    response = response.Replace("[ddd]", "<script type=\"text/javascript\" src=\"lib/jquery/dist/jquery.js\"></script>");

                    using (var writer = new StreamWriter(originalStream))
                    {
                        await writer.WriteAsync(response);
                    }
                }
            }
        }
        else
        {
            await next();
        }
    };
}

“head部分中包含的其他文件在客户端是空的”-哪个中间件响应这些请求,结果是什么?在razor页面中不这样做有什么原因吗?(Home/Index是默认的路由(除非另有设置),当只请求
/
时)@Tseng没有理由,但我将使用websockets,因此我不能在不关闭websocket会话的情况下加载不同的页面,但可能仅用于索引的razor页面不是一个坏主意。。然而,我认为这种方式对我来说更具可读性。@CodeCaster标准版,这个例子应该只修改index.html。其他文件以标准方式处理
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.Use(ResponseStreamRewriter.Rewrite());
}