Desidero rispondere con un modello di risposta JSON quando si verificano 401 e 403. Per esempio:Modello di risposta 401 e 403 personalizzato con middleware UseJwtBearerAuthentication
HTTP 401
{
"message": "Authentication failed. The request must include a valid and non-expired bearer token in the Authorization header."
}
Sto usando middleware (come suggerito in this answer) per intercettare 404s e funziona benissimo, ma non è il caso con 401 o 403s. Ecco il 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);
}
});
Quando posto sotto app.UseJwtBearerAuthentication(..)
in Startup.Configure(..)
, sembra essere completamente ignorato ed una normale 401 viene restituito.
Quando posto sopra app.UseJwtBearerAuthentication(..)
in Startup.Configure(..)
, allora la seguente eccezione viene generata:
Connection id "0HKT7SUBPLHEM": un'eccezione non gestita è stato gettato dal l'applicazione. System.InvalidOperationException: le intestazioni sono di sola lettura , la risposta è già stata avviata. a Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders.Microsoft.AspNetCore.Http.IHeaderDictionary.set_Item (String chiave, valore StringValues) a Microsoft.AspNetCore.Http.Internal.DefaultHttpResponse.set_ContentType (String valore) su MyProject.Api.Startup. < b__12_0> d.MoveNext() in Startup.cs
"Sistema.InvalidOperationException: le intestazioni sono di sola lettura, la risposta è già stata avviata "viene generata se posta prima di UseJwtBearerAuthentication. – davenewza
l'aggiornamento di speranza aiuterà – Set