按条件调用中间件组件 Asp.Net Core

Call middleware component by condition Asp.Net Core

是否可以只对非js的请求执行中间件。因为我有一个执行中间件的中间件对我的服务器的 js 请求没有多大意义。 有没有可能的方法来检查请求是否不是直接的?

您不能仅针对某些请求执行中间件,但您可以检查请求是否满足中间件中的条件,例如,如果请求中存在 header。

假设您的 js 客户端调用您的 api 在每个请求中添加自定义 header 您可以编写一个中间件检查 header 并在 header 存在。

app.Use((context, next) =>
{
    if (context.Request.Headers.Any(h => h.Key == "Custom-Header"))
    {
           DoStuff();
    }

    return next();
})

针对特定请求执行中间件,您可以尝试MapWhen

public void Configure(IApplicationBuilder app)
{
    app.MapWhen(context => context.Request.Query.ContainsKey("branch"),
                           HandleBranch);

    app.Run(async context =>
    {
        await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
    });
}

为了检查是否处理了请求,实现你自己的逻辑来替换context.Request.Query.ContainsKey("branch")