修改静态文件的内容

时间:2014-07-03 15:12:16

标签: asp.net owin katana

当我使用Microsoft.Owin.StaticFiles时,如何在将响应发送到客户端之前修改响应?

        FileServerOptions options = new FileServerOptions();
        options.FileSystem = new Microsoft.Owin.FileSystems.PhysicalFileSystem(Path.Combine(Environment.CurrentDirectory, "Content/"));
        options.DefaultFilesOptions.DefaultFileNames = new string[] { "index.htm", "index.html" };
        options.StaticFileOptions.OnPrepareResponse = (r) =>
        {
            r.OwinContext.Response.WriteAsync("test");
        };
        options.EnableDefaultFiles = true;
        app.UseFileServer(options);

“test”永远不会写入响应中。我试图使用另一个等待执行StaticFiles中间件的中间件:

        app.Use((ctx, next) =>
        {
            return next().ContinueWith(task =>
            {
                return ctx.Response.WriteAsync("Hello World!");
            });
        });

        FileServerOptions options = new FileServerOptions();
        options.FileSystem = new Microsoft.Owin.FileSystems.PhysicalFileSystem(Path.Combine(Environment.CurrentDirectory, "Content/"));
        options.DefaultFilesOptions.DefaultFileNames = new string[] { "index.htm", "index.html" };
        options.EnableDefaultFiles = true;
        app.UseFileServer(options);

但是这没用。我该如何修改回复?

1 个答案:

答案 0 :(得分:4)

准备响应并不意味着修改静态文件的内容。 您只能添加标题。

我需要传递一些变更为静态网页的变量,然后通过使用来解决它 准备响应并将变量作为cookie传递给页面。 这适用于一些变量,但如果您想要显着更改页面,则最好使用mvc组件。

         appBuilder.UseStaticFiles(new StaticFileOptions()
                                  {
                                      RequestPath = new PathString(baseUrl),
                                      FileSystem = new PhysicalFileSystem(staticFilesLocation),
                                      ContentTypeProvider = new JsonContentTypeProvider(),
                                      OnPrepareResponse = r => r.OwinContext.Response.Cookies.Append("baseUrl",_webhostUrl)
                                  });