Ich habe eine ASP.net 5.0 (MVC 6) Website und verwende diese Website auch für einige mobile Apps. Ich habe einen Controller, der JSON-Daten zurückgibt.ASP.net 5.0 - WebAPI Authorize & ErrorCode 302 statt 401
Der Benutzer muss authentifizieren, um diese Daten zu sehen, damit ich das Attribut [Autorisieren] für den Controller verwenden.
Ich erwartete, einen Fehler 401 für nicht autorisierte Anfragen zu bekommen, nur bekomme ich eine Umleitung (302) auf die Login-Seite. Setzen Sie im Mobile Client den Header so, dass nur "application/json" -Daten akzeptiert werden, aber ich bekomme immer noch die Weiterleitung zur Login-Seite.
Ich habe eine Lösung entwickelt, die funktioniert, aber ich bin nicht sehr glücklich damit. Es funktioniert, aber es ist eine Art Hack.
Gibt es dafür eine bessere Lösung?
Hier ist meine Lösung (Configure-Methode in Startup-Klasse)
//....Some Code
app.Use(async (context, next) =>
{
await next.Invoke();
if (context.Response.StatusCode == 302)
{
StringValues contentType;
if (context.Request.Headers.TryGetValue("Accept", out contentType)
&& contentType.Contains("application/json"))
{
context.Response.StatusCode = 401;
if (env.IsDevelopment())
await context.Response.WriteAsync("No Access");
}
}
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Nach https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-not-authorized-instead-of, es ist fixed –