HttpStatusCodeResult(401) gibt "302 Found"
Verwenden ASP.NET MVC 5, ich möchte wieder entsprechende HTTP-status-code für verschiedene Szenarien (401 für Benutzer nicht authentifiziert, 403, wenn der Benutzer hat keine Rechte für eine Ressource, etc.), als handle Sie in jQuery.
Aber das problem ist, wenn ich versuche zurück zu kehren 401, es gibt immer "302: Found". Was ist der trick für eine benutzerdefinierte status-code, und warum das nicht funktioniert?
public ActionResult My()
{
if (User.Identity.IsAuthenticated == false)
{
return new HttpStatusCodeResult(401, "User is not authenticated.");
//Returns "302: Found"
}
//... other code ...
}
EDIT 1: Interessant, bit:
Wenn ich ersetzen die 401 und 404 so:
return new HttpNotFoundResult("User is not authenticated.");
Dann ist es in der Tat gibt ein 404 und jQuery fangen kann, das problem. Aber es ist nicht eine elegante Lösung, da der Fehler code ist anders.
EDIT 2: 302 ist nicht gut für mich, als wäre das Ergebnis verwendet werden jQuery.get().fail()
, aber 302 nicht triger fail()
- sind Sie die Formularauthentifizierung verwenden?
- werfen Sie einen Blick auf diese: stackoverflow.com/questions/10348111/...
- mrtig: ich habe gesehen, dies vor, aber hilft nicht, da es sagt, es ist gelöst durch die Verwendung von IIS express. Ich benutze IIS express, noch habe ich das problem.
- Daniel A. Weiss: ich bin mit dem Standard-built-in auth ASP.NET MVC5 Vorlage als "Individuelle Benutzerkonten"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lol das ist ein tolles problem
Den Weg auth funktioniert in MVC ist, dass, wenn Sie nicht angemeldet sind und versuchen, auf eine sichere Seite wirft es ein 401 Ausnahme. MVC-dann fängt diese Ausnahme und leitet den Benutzer auf die login-Seite (das ist die 302 sind Sie zu sehen)
Ich nehme an, es gibt ein paar Dinge, die Sie tun können, um es zu beheben:
BEARBEITEN
Wie pro Ihre Kommentare, der folgende code schaltet alle Umleitungen in 401s, wenn die Anfrage per ajax. Dies ist ein Ansatz für die Vermeidung der Ausgabe aufgeführt
jQuery.get
konnte es erkennen.HttpResponse.SuppressFormsAuthenticationRedirect
Eigenschaft von meiner Methode gibt eineActionResult
. Allerdings fand ich das folgende unter die haack Kommentare: es ist ziemlich brauchbar mit einem kleinen Zusatz: gist.github.com/1264267 Wenn Sie dieses code-snippet, ich werde glücklich sein, zu akzeptieren, Ihre Antwort. Nochmals vielen Dank.HttpResponse.SuppressFormsAuthenticationRedirect
?Response.SuppressFormsAuthenticationRedirect = true
wenn Sie sind targeting .net 4.5SuppressFormsAuthenticationRedirect
scheint nicht zu funktionieren (zumindest für AJAX) für mich, also ich ' ll stick mit derApplication_EndRequest()