授权中间件不阻止请求

时间:2018-05-08 06:35:46

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

要为所选用户验证我的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)

这里我还添加[授权]添加其无效工作返回500错误

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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