Авторизуйте Middleware, не блокируйте запрос - PullRequest
0 голосов
/ 08 мая 2018

Чтобы проверить мой доступ к API для выбранных пользователей, я написал промежуточное программное обеспечение для HTTP-запроса проверки пользователя Промежуточное программное обеспечение выполняет и изменяет StatusCode запроса

но метод API все еще выполняется

вот мое промежуточное ПО

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

return _next(httpContext);

здесь я регистрирую Middleware

app.UseAuthenticationMiddleware();

вот мой метод API

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

здесь я также добавляю [Authorize] добавляю, что он не работает, возвращает ошибку 500

есть предложения?

1 Ответ

0 голосов
/ 08 мая 2018

При написании пользовательского промежуточного программного обеспечения вы должны вызвать await _next(httpContext) для запуска следующего промежуточного программного обеспечения в конвейере.

Удалите его (условно), и он не будет вызывать промежуточное программное обеспечение в дальнейшем.

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

В качестве альтернативы вы можете просто вернуть выполненное задание через return Task.Completed; вместо return _next(httpContext), если не хотите вызывать другие промежуточные программы в конвейере.

Но это микрооптимизация, поскольку вторая не вызывает асинхронный конечный автомат.

...