Modelo de respuesta personalizado 401 y 403 con middleware UseJwtBearerAuthentication
Quiero responder con un modelo de respuesta JSON cuando se produce un 401 y 403. Por ejemplo:
HTTP 401
{
"message": "Authentication failed. The request must include a valid and non-expired bearer token in the Authorization header."
}
Estoy usando middleware (como se sugiere enesta respuesta) para interceptar 404s y funciona muy bien, pero no es el caso con 401 o 403s. Aquí está el middleware:
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);
}
});
Cuando se coloca ABAJOapp.UseJwtBearerAuthentication(..)
enStartup.Configure(..)
, parece ignorarse por completo y se devuelve un 401 normal.
Cuando se coloca ARRIBAapp.UseJwtBearerAuthentication(..)
enStartup.Configure(..)
, se genera la siguiente excepción:
ID de conexión "0HKT7SUBPLHEM": la aplicación generó una excepción no controlada. System.InvalidOperationException: los encabezados son de solo lectura, la respuesta ya ha comenzado. en Microsoft. Api.Startup. <b__12_0> d.MoveNext () en Startup.cs