过滤静态文件中间件

时间:2017-04-14 06:10:57

标签: asp.net-core asp.net-core-mvc middleware

有没有办法在发出请求之前拦截请求,所以我可以根据需要编辑图片或创建动态pdf?我尝试使用MapArea并将请求重定向到控制器,但是当我使用staticfiles中间件时,它会捕获请求,而我的控制器不会处理请求。

2 个答案:

答案 0 :(得分:0)

  

有没有办法在发出请求之前拦截请求

是。在调用UseStaticFiles之前,您可以编写自己的中间件并将其添加到IApplicationBuilder。见https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware#ordering

另见https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing。您也可以通过编写路由而不是中间件来解决此问题。

答案 1 :(得分:0)

如果您的静态文件不存在而您想要即时生成它们 - 最好创建自己的middelware并在UseStaticFiles之前注册它。

如果存在文件,但您希望“略微”修改响应(例如,针对不同的用户) - 您可以在静态文件选项中使用OnPrepareResponse处理程序:

var staticFileOptions = new StaticFileOptions
{
    OnPrepareResponse = (context) =>
    {
        var fn = context.File.Name.ToLowerInvariant();
        if (fn.EndsWith(".pdf"))
        {
            SomeService.LogPdfDownload(context.Context.Response);
        }
        else
        {
            context.Context.Response.Headers.Add("Cache-Control", "public, max-age=15552000"); // 180 days
        }
    }
};

app.UseStaticFiles(staticFileOptions);

From docsOnPrepareResponse在设置了状态代码和标题后调用,但在编写正文之前调用