Пользовательские модели ответов 401 и 403 с промежуточным программным обеспечением UseJwtBearerAuthentication
Я хочу ответить моделью ответа JSON, когда возникают 401 и 403. Например:
HTTP 401
{
"message": "Authentication failed. The request must include a valid and non-expired bearer token in the Authorization header."
}
Я использую промежуточное программное обеспечение (как предложено вэтот ответ) для перехвата 404-х, и он прекрасно работает, но это не относится к 401 или 403-м. Вот промежуточное ПО:
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 401)
{
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(UnauthorizedModel.Create(), SerializerSettings), Encoding.UTF8);
}
});
Когда помещены НИЖЕapp.UseJwtBearerAuthentication(..)
вStartup.Configure(..)
, кажется, полностью игнорируется и возвращается нормальный 401.
Когда размещены вышеapp.UseJwtBearerAuthentication(..)
вStartup.Configure(..)
затем выдается следующее исключение:
Идентификатор соединения "0HKT7SUBPLHEM": приложение сгенерировало необработанное исключение. System.InvalidOperationException: Заголовки только для чтения, ответ уже начался. в Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders.Microsoft.AspNetCore.Http.IHeaderDictionary.set_Item (строковый ключ, значение StringValues) в Microsoft.AspNetCore.Http.Internal.DefaultHttpResponT.Project.ject Api.Startup. <B__12_0> d.MoveNext () в Startup.cs