有没有办法在发出请求之前拦截请求,所以我可以根据需要编辑图片或创建动态pdf?我尝试使用MapArea并将请求重定向到控制器,但是当我使用staticfiles中间件时,它会捕获请求,而我的控制器不会处理请求。
答案 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 docs:OnPrepareResponse
在设置了状态代码和标题后调用,但在编写正文之前调用