Thu*_*olt 3 c# .net-core asp.net-core
我在应用程序中有 2 个中间件。我想从这些中间件中排除一条路线。我尝试过的是创建一个 BuildRouter 函数并通过它应用中间件,但这不起作用。
public IRouter BuildRouter(IApplicationBuilder applicationBuilder)
{
var builder = new RouteBuilder(applicationBuilder);
builder.MapMiddlewareRoute("/api/", appBuilder => {
appBuilder.ApplyKeyValidation();
appBuilder.ApplyPolicyValidation();
});
return builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
而配置方法是
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseRouter(BuildRouter(app));
app.UseHttpsRedirection();
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。
vgd*_*999 13
对于中间件,您应该使用app.UseWhen而不是app.MapWhen因为MapWhen终止管道。我在尝试使用其他答案的过程中艰难地学到了这一点。
已经有一段时间了,但自从我偶然发现这个之后,其他人也可能会这样。因此,对于您的示例: public void Configure(IApplicationBuilder app, IHostingEnvironment env)
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseWhen(
context => !context.Request.Path.StartsWithSegments("/api"),
appBuilder =>
{
appBuilder.ApplyKeyValidation();
appBuilder.ApplyPolicyValidation();
}
);
app.UseHttpsRedirection();
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用MapWhen带有否定谓词的扩展方法:
app.MapWhen(
httpContext => !httpContext.Request.Path.StartsWithSegments("/pathtoexclude"),
subApp => subApp.UseMyMiddleware()
);
Run Code Online (Sandbox Code Playgroud)
注意:MapWhen将终止管道,因此如果您希望管道在此之后继续,您可以app.UseWhen改用。
| 归档时间: |
|
| 查看次数: |
3563 次 |
| 最近记录: |