按条件调用中间件组件 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")
。
是否可以只对非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")
。