【问题标题】:Filter for static file middleware过滤静态文件中间件
【发布时间】:2017-04-14 06:10:56
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您的静态文件不存在并且您想即时生成它们 - 最好创建自己的 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 在设置状态码和标头之后调用,但在写入正文之前

    【讨论】:

      【解决方案2】:

      有没有办法在请求被服务之前拦截它

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 2017-04-12
        • 2019-03-05
        相关资源
        最近更新 更多