HttpStatusCodeResult (401) gibt "200 OK" zurück

8

Unter Verwendung von ASP.NET MVC 5 möchte ich den entsprechenden HTTP-Statuscode für verschiedene Szenarien zurückgeben (401 für Benutzer wird nicht authentifiziert, 403, wenn Benutzer kein Recht für eine Ressource hat usw.) und dann in jQuery behandeln.

Aber das Problem ist, wenn ich versuche, 401 zurückzugeben, gibt es immer "200: OK" zurück. MVC 5 RC1 gab "302: Found" anstelle von 401, also konnte ich einen Workaround ( ​​HttpStatusCodeResult (401 ) gibt "302 Found" zurück ). Aber jetzt bin ich von MVC 5 RC1 zu MVC 5 gewechselt und dieses Verhalten hat sich geändert. Jetzt ist es immer "200: OK". Meine Umgehung ist also nutzlos, ich kann natürlich 200 durch nichts ersetzen.

%Vor%

Wie löst man das?

    
Adam Szabo 17.11.2013, 18:02
quelle

5 Antworten

3

Die MVC 5+ Pipeline ändert 401 Antwortcodes.

Option 1 Mit .net 4.5

Sie können HttpContext.Response.SuppressFormsAuthenticationRedirect auf true setzen.

z.B. in Ihrer benutzerdefinierten AuthorizeAttribute.cs

%Vor%

Option 2. Wenn Sie .net 4.5 nicht verwenden

%Vor%

und in web.config

%Vor%

Siehe hier für weitere Informationen

    
Damian Green 27.06.2016 10:47
quelle
2

Die Lösung des Problems finden Sie in Ссылка

Sie müssen Ihre Startup -Klasse wie folgt ändern:

%Vor%

}

    
ManojAnavatti 13.04.2016 12:13
quelle
1

Ich benutze simuler Code, der 404 zurückgibt. Dein Code könnte sein:

%Vor%     
Kasper Halvas Jensen 13.04.2016 10:32
quelle
0

Bei Identity-Middleware kann die Umleitung deaktiviert werden, indem die Option LoginPath in Startup.Auth.cs:

entfernt wird %Vor%     
Sel 01.07.2016 09:40
quelle
0

In Statup.cs musste ich AutomaticChallenge auf false setzen. Sobald ich das getan hatte, hörte es mit der URL-Weiterleitung auf (was zu 200 Status führte) und gab mir den 401 Status, den ich wollte.

%Vor%

Wenn Sie eine Cookie-Middleware eingerichtet haben:

%Vor%     
Chad Kuehn 23.05.2017 15:11
quelle