asp.net - .net core 使自定义中间件能够影响路由匹配
问题描述
我正在使用 .net core 2.2 编写一个 web api 项目,我已经定义了一个用于注销的 api,使用 [HttpGet] 属性,它工作正常。但是,当我尝试启用自定义中间件时,无法匹配注销 api,总是返回 404。我不确定自定义中间件是否导致问题。
logout api
[Route("api/[controller]/[action]")]
public class SysUserController : Controller
{
[HttpGet]
public IActionResult Logout(string sysUserId)
{
some code...
}
}
custome middleware
public class TokenMiddleware
{
private readonly RequestDelegate _next;
public TokenMiddleware(RequestDelegate next)
{
_next = next;
}
public Task Invoke(HttpContext httpContext)
{
var token = httpContext.Request.Headers["X-Token"].ToString();
if (token == "xxxxx")
{
return _next(httpContext);
}
httpContext.Response.ContentType = "text/json; charset=utf-8";
httpContext.Response.StatusCode = 401;
return httpContext.Response.WriteAsync(JsonConvert.SerializeObject(new
{
message = "error message"
}));
}
}
startup
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.MapWhen((httpContext) => httpContext.Request.Path.ToString().ToLower() != "/api/sysuser/login",
(obj) => obj.UseTokenMiddleware());
app.UseMvc();
}
解决方案
看起来不错,只需将Configure
方法更改为:
app.MapWhen((httpContext) => httpContext.Request.Path.ToString().ToLower() != "/api/sysuser/login",
(obj) => obj.UseMiddleware<TokenMiddleware>());
app.UseMvc();
经过测试,它可以工作
推荐阅读
- .net - SE.Redis 会在本地有缓存吗?
- go - 在 Delve 中通过源文件设置断点
- reactjs - React Context API - 在页面刷新时持久化数据
- reactjs - React Link to and If 语句
- javascript - MVC - 模态不使用 AJAX 显示
- client - 如何确定 JAX-RS 客户端的 MessageBodyReader 中的请求 URI?
- http - 区分http和http2数据包
- javascript - 获取延迟承诺值jQuery
- r - R中列的多步收集
- java - 如何将参数传递给 paintComponent 以便在不同的类中调用它?