2014-07-03 149 views
2

當我使用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); 

「測試」從未寫入響應。我試圖使用另一箇中間件,它等到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); 

但是,這沒有奏效。我如何修改回覆?

回答

3

關於準備響應並不意味着要修改靜態文件的內容。 您只能添加標題。

我需要傳遞一些變化到靜態網頁,我通過使用 來解決這個問題。在準備響應並傳遞變量作爲頁面的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) 
            });