You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

授权中间件未拦截请求:自定义API鉴权中间件执行异常排查

问题原因与解决方案

你遇到的问题核心很明确:你的中间件最后调用了return _next(httpContext);,这会让请求继续沿着中间件管道向下传递,最终还是会触发你的API方法——哪怕你已经设置了401状态码,管道的后续流程并不会自动终止。

修正后的中间件代码

只需要去掉对_next的调用,直接返回一个已完成的任务,就能终止整个请求管道,阻止API方法执行:

// 先设置响应内容类型,确保客户端能正确解析返回信息
httpContext.Response.ContentType = "text/plain";
httpContext.Response.StatusCode = 401;
// 等待写入操作完成,避免异步写入的潜在问题
await httpContext.Response.WriteAsync("Invalid username or password.");
// 直接返回完成任务,终止管道,不再执行后续的中间件和API方法
return Task.CompletedTask;

额外补充

如果是在ASP.NET Core 3.0及以上版本中,也可以用httpContext.Abort()直接终止请求,但上面的方式更直观且兼容性更好。另外,务必用await等待WriteAsync执行完成,否则可能出现响应内容未完全写入就中断请求的情况。

内容的提问来源于stack exchange,提问作者LittleDragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:04:15