Piranha CMS 中间件,用于捕获对 /uploads 的请求

Piranha CMS middleware to capture requests to /uploads

提问人:atoms 提问时间:2/13/2023 最后编辑:atoms 更新时间:2/14/2023 访问量:64

问:

当对 image|file 发出请求时,它不会到达我的中间件。

我可以看到,当它被调用时,它会添加UseCmsPiranhaStartupFilter

serviceBuilder.Services.AddTransient<IStartupFilter, PiranhaStartupFilter>();

这将添加到 ApplicationBuilder。UseStaticFiles()

public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
    return builder =>
    {
        builder
            .UseSecurityMiddleware()
            .UseStaticFiles()
            .UseMiddleware<RoutingMiddleware>()
            .UseMiddleware<SitemapMiddleware>();
        next(builder);
    };
}

如何覆盖此功能,以便为请求调用我的中间件?

我希望在我的中间件的方法中接收到一个调用,注册如下:/uploads/foo.jpgInvokeAsync

app.UsePiranha(options =>
{
    options.Builder.CustomImageTools();
});

目前,只有文件和网站图标请求到达我的中间件中的 InvokeAsync 方法。

asp.net-core asp.net-core-middleware 食人鱼-cms

评论

0赞 Brando Zhang 2/13/2023
如果你想修改你的应用程序的中间件,为什么不直接把这个中间件直接放在程序.cs中呢?app.UseMiddleware<UploadsMiddleware>();

答:

1赞 Håkan Edling 2/14/2023 #1

由于 asp.net 中的中间件是按照它们添加到管道中的顺序执行的,因此在对 Piranha 进行任何调用之前添加拦截器应该就足够了。

您可以通过在 in 的调用上方添加服务来添加中间件。UseCms()startup.cs

services.AddPiranha(options =>
{
    options.CustomImageFilter();
    options.UseCms();
}

public class CustomImageFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return app =>
        {
            app.UseWhen(
                context => some_condition,
                appbuilder => appbuilder.CustomImageTools()
            );
            // Call the next configure method
            next(app);
        };
    }
}