c# - 从中间件中排除路由 - .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();
}
而配置方法是
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseRouter(BuildRouter(app));
app.UseHttpsRedirection();
app.UseMvc();
}
但这不起作用。
解决方案
您可以使用MapWhen
带有否定谓词的扩展方法:
app.MapWhen(
httpContext => !httpContext.Request.Path.StartsWithSegments("/pathtoexclude"),
subApp => subApp.UseMyMiddleware()
);
注意:MapWhen
将终止管道,因此如果您希望管道在此之后继续,您可以使用app.UseWhen
。
推荐阅读
- c++ - 递增 std::string::end() 迭代器是否未定义?
- c - 有没有更好的方法来检查这两个变量而不是四个 ifs?
- vb.net - 从 radiobuttonlist vb.net 更改样式并添加标签
- typescript - AWS CodeBuild tsc 错误 TS2307:找不到模块
- reactjs - 重复相同的输入不显示
- vba - 用实际图像替换图像文件名
- android - Xamarin Forms Android - 保存到文件
- c++ - 这个 2D 矩阵选择排序是如何工作的?
- c++ - 使用 URL 下载 C++ 文件不起作用。(%username% 和用户)
- python - 如何使用 unpack 和编解码器