【问题标题】:Authorize Middleware not block the request授权中间件不阻塞请求
【发布时间】:2018-05-08 06:35:46
【问题描述】:

为了验证所选用户的 API 访问权限,我为验证用户 http 请求编写了中间件 中间件正在执行并改变请求的StatusCode

但 API 方法仍在执行中

这是我的中间件

 httpContext.Response.StatusCode = 401;
 httpContext.Response.WriteAsync("Invalid username or password.");

return _next(httpContext);

我在这里注册中间件

app.UseAuthenticationMiddleware();

这是我的 API 方法

[HttpPost]       
public async Task<IActionResult> CreatePolicy([FromBody] Customer customerDetails)

这里我还添加了 [Authorize] 添加它的不工作返回 500 错误

有什么建议吗?

【问题讨论】:

  • 那是因为你打电话给await _next(httpContext)。这将执行管道中的 next 中间件。 (有条件地)删除它,它不会在管道中进一步调用中间件
  • @Tseng 我的方法应该有返回类型,因为如果它成功我需要移动下一个中间件 public Task Invoke(HttpContext httpContext)
  • 哦,我们可以使用 async 和 await 让我们试试
  • 它的工作谢谢你的朋友把你的评论作为答案

标签: .net asp.net-core .net-core middleware


【解决方案1】:

编写自定义中间件时,必须调用await _next(httpContext) 来执行管道中的下一个中间件。

(有条件地)删除它,它不会在管道中进一步调用中间件。

if(someConditionIsTrue)
{
    await _next(httpContext);
}

如果不想调用管道中的其他中间件,您也可以通过 return Task.Completed; 而不是 return _next(httpContext) 返回已完成的任务。

但它是一个微优化,因为第二个不调用异步状态机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2020-02-10
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多