Ich erstelle ein brandneues Projekt mit Visual Studio 2013, wähle Asp.Net MVC und das Framework 4.5.1 Das Projekt wird erstellt, und dann tue ich nichts anderes als F5, um die Standard-Webseite zu starten. Leider führt dies zu einer Weiterleitung zur Anmeldeseite, die auch auf die Anmeldeseite umgeleitet wird. Hier ist eine kurze Version der URL, die ich im Browser habe:
http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525
Ich habe keine Fehler in der Ereignisanzeige. Aber auf dem Bildschirm sehe ich:
"HTTP-Fehler 404.15 - Nicht gefunden Das Anforderungsfilterungsmodul ist Konfiguriert, um eine Anforderung abzulehnen, deren Abfragezeichenfolge zu lang ist."
Die Website wird mit der Standardeinstellung in IIS Express ausgeführt. Wie kann ich dieses Problem beheben? Ich vermute, mit meinem Visual Studio 2013 stimmt etwas nicht?
Es funktioniert, wenn ich eine brandneue Website erstelle und sie in IIS hosten. Wenn ich jedoch eine neue Website erstelle (ohne etwas zu ändern) und einfach auf play (das Start IIS Express standardmäßig) klicke, ist dies nicht der Fall.
Ich habe alle Websites in den Dokumenten\IISExpress\config\applicationhost.config gelöscht. Ich habe alles neu kompiliert und diesen Eintrag erstellt:
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Ich bekomme den Fehler immer noch mit IIS Express, nicht mit IIS.
Bitte beachten Sie, dass es sich hierbei möglicherweise um einen schädlichen Hinweis handelt. Es ist selten eine gute Idee, eine Konfigurationsdatei für eine Anwendungshost direkt zu ändern. Es gibt normalerweise Tools, die dies für Sie sicher tun (z. B. innerhalb von Visual Studio). Stellen Sie sicher, dass Sie eine Sicherungskopie dieser Datei erstellen, falls Ihr IIS Express in den Papierkorb gerät.
Um dieses Problem zu beheben, habe ich die Standard-Konfigurationsdatei IIS verwendet, die sich hier befindet:
C:\Windows\System32\inetsrv\config\applicationHost.config
Zu meinem Dokument
%userprofile%\documents\iisexpress\config\applicationhost.config
Und es hat funktioniert.
Dies lag daran, dass ich einige Windows-Authentifizierungssätze hatte und nicht das anonyme Konto.
Markieren Sie das Projekt in Visual Studio
Öffnen Sie den Bereich "Eigenschaften" auf der rechten Seite (oder drücken Sie F4).
Setzen Sie "Windows-Authentifizierung" auf "Deaktiviert".
Setzen Sie "Anonyme Authentifizierung" auf "Aktiviert".
Dieses Problem ist auf den Authentifizierungsmodus zurückzuführen (standardmäßig), der von der MVC 5-Vorlage ausgewählt wird. Dadurch wird der ReturnUrl-Stil der Umleitung ausgelöst, der zu einer Endlosschleife führen kann, wenn er nicht ordnungsgemäß konfiguriert ist.
Fügen Sie diesen Schlüssel zu Ihrer Webconfig-Datei hinzu, um die OWIN-Starterkennung zu deaktivieren.
<add key="owin:AutomaticAppStartup" value="false"/>
Bei der Login-Aktion fehlt das [AllowAnonymous]
-Attribut.
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
// code....
}
2. Möglichkeit , spezifisch für IIS Express: Wenn Sie dasselbe Standardprojekt WebApplication1
mehrfach erstellt haben und mit verschiedenen Authentifizierungseinstellungen spielen, speichert IIS Express zusätzliche Authentifizierungseinstellungen in seiner Konfigurationsdatei . So etwas wie:
<location path="WebApplication1">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
</configuration>
Die Konfigurationen befinden sich im Dokumentenordner Documents\IISExpress\config\
des Benutzers, und Sie sollten nach folgenden Elementen suchen:
applicationhost.config
Dann löschen Sie einfach den oben erwähnten xml-Knoten <location path="WebApplication1">
.
Wenn Sie Visual Studio 2015 oder höher verwenden, überprüfen Sie diesen Pfad für die Konfigurationsdatei: $(solutionDir)\.vs\config\applicationhost.config
Jede Lösung hat eine eigene Konfigurationsdatei.
Ich musste ( Source Link ) entfernen:
<authorization>
<deny users="?" />
</authorization>
Ich weiß, dass ich zu spät komme, und dies ist nicht direkt für die OP-Frage. Wenn jedoch in der Zukunft jemand hierher kommt, ist eine weitere Prüfung des Attributs AllowAnonymous
und Authorize
das Ergebnis, dass alle untergeordneten Aktionen ebenfalls überprüft werden müssen.
Ich hatte zum Beispiel mein Layout (das auch die Anmeldeseite verwendet), das zwei untergeordnete Aktionen für Breadcrumbs und Seitenleiste aufruft, und sie hatten kein AllowAnonymous
-Attribut (der Controller hatte das Authorize
-Attribut).
Ich hoffe das hilft.
Wählen Sie in IIS Ihre Website aus und suchen Sie nach Authentifizierung. Wenn Sie die Formularauthentifizierung verwenden,
Die Vorlage ASP.Net MVC 5 fügt dem Projekt Microsoft.Owin und zugehörige Bibliotheken hinzu. Da die Owin-Infrastruktur keine Forms-Authentifizierung erfordert, führt die Vorlage außerdem den folgenden Schlüssel in web.config ein.
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
</system.webServer>
Das Vorhandensein dieses Schlüssels könnte ein Grund für das unerwünschte Zurückkehren zur Anmeldeseite sein. Durch das Kommentieren kann das Problem für einige Personen behoben werden.
Ich hatte das gleiche Problem, weil mein MVC-Projekt für .Net 4.5 konfiguriert war, aber .Net 4.0 als Anwendungspool in IIS verwendet wurde. Umgestellt auf .Net 4.5-Anwendungspool und das Problem wurde behoben. Ich hoffe, das hilft jemand anderem!
Ich habe mich stundenlang mit diesem Thema beschäftigt.
Für mich war es in der Datei Startup.Auth.cs.
Wenn dieser Code auskommentiert wurde, wurde die Weiterleitungsschleife gestoppt.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
TL: DR? Rufen Sie keine geschützte Web-API (keine Web-API, für die eine Autorisierung erforderlich ist) von einer Autorisierungsseite wie ~/Account/Login (die dies alleine NICHT tut) auf. Wenn Sie dies tun, gelangen Sie auf der Serverseite in eine Endlos-Weiterleitungsschleife.
Ich fand, dass der Täter indirekt AccountController::Authorize
war und die Tatsache, dass AccountController
mit [Authorize]
verziert ist.
Die Hauptursache war, dass Sammy () von HomeViewModel () (Zeile 6 von home.viewmodel.js) aufgerufen wurde, die auf eine "protected web API" zugegriffen hat. Dies wurde für/Account/Login durchgeführt, was dazu führte, dass/Account/Login auf sich selbst umgeleitet wurde.
Sie können bestätigen, dass dies die Ursache Ihres Problems ist, indem Sie mehrere Methoden verwenden:
AccountController::Authorize
mit [AllowAnonymous]
verzierenDie Lösung bestand darin, das App-Bundle (a.k.a "~/bundles/app") nur für Ansichten auszugeben, für die bereits eine Autorisierung erforderlich war. Meines Wissens sind/Accounts/Views klassische MVC-basierte Views und nicht Teil des App-Datenmodells/Viewmodel, aber ich hatte den Aufruf des Bündels Scripts.Render(@"~/bundles/app")
versehentlich in _Layout.cshtml verschoben (wodurch geschützte Web-API-Aufrufe für alle MVC-Aufrufe ausgeführt werden Ansichten einschließlich/Konto /.)
in meinem Fall: in meiner _layout.cshtml benutze ich Html.Action, um Action von Authorize Controller aufzurufen: Beispiel: Html.Action ("Count", "Product") -> Schleifenfehler
fix: dekoriere nach [AllowAnonymous] -Attribut in dieser Aktion (oder entferne diese Html-Helfer aus _layout)
Stellen Sie sicher, dass sich in der Pipeline keine Aktionen befinden, die über das Attribut authorize .. verfügen. In meinem Fall hatte mein Layout einen Navigationsmenü-Controller, dem das Attribut allowAnonymous fehlte.
Diese Antworten sind mehr oder weniger Teile desselben Puzzles. Ich werde versuchen, alles an einem Ort zu platzieren. Das von OP beschriebene Problem traf meine Anwendung in dem Moment, in dem ich die OWIN-Pipeline und AspNET Identity implementierte.
Also mal sehen, wie man es repariert ...
Ich denke, Sie brauchen es, denn wenn Sie es nicht tun, brauchen Sie keine Authentifizierung, und ich denke, Sie tun es. Abgesehen davon, dass Sie eine Authentifizierung im alten Stil verwenden, und ich denke, dass Sie dies nicht tun. Entfernen Sie daher auch nicht das Startattribut OWIN ...
[Assembly: OwinStartupAttribute(typeof(YourApp.Probably_App_Start.SomethingLikeAuthConfig))]
... oder die Konfigurationszeile ...
<add key="owin:AppStartup" value="YourApp.Probably_App_Start.SomethingLikeAuthConfig" />
Jetzt haben wir das geklärt, Sie brauchen die Authentifizierung. Dies bedeutet, dass entweder jeder Ihrer Controller das Attribut [Authorize]
Benötigt oder dass Sie dasselbe für alle Controller an einem Ort tun können, indem Sie das Objekt global registrieren (z. B. in RegisterGlobalFilters()
, Zeile filter.Add(new AuthorizeAttribute())
). Im ersten Fall (wenn Sie jeden Controller separat sichern) überspringen Sie diesen Teil, und fahren Sie mit dem nächsten fort. Im letzteren Fall sind alle Ihre Steuerungen gegen unbefugte Zugriffe gesichert, sodass Sie einen Einstiegspunkt für diese Berechtigung benötigen - ungeschützte Login()
Aktion. Einfach hinzufügen...
[AllowAnonymous]
... und du solltest gut sein.
Wenn sich Ihr Benutzer anmeldet, speichert sein Browser verschlüsselte (hoffentlich!) Cookies, um die Dinge für das System zu vereinfachen. Sie benötigen also ein Cookie - löschen Sie nicht die Zeile mit der Aufschrift UseCookieAuthentication
.
Windows Authentication
(Deaktiviert) ausschalten und jeden Benutzer mindestens hereinlassen müssen Solange IIS Express betroffen ist, setzen Sie Anonymous Authentication
(Aktiviert).Wenn Sie Ihre Website starten, werden diese Einstellungen in IIS Express configuration (applicationhost.config
) Kopiert. Dort sollten Sie die folgenden zwei Zeilen sehen:
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="true" />
Möglicherweise haben Sie in Ihrer web.config die Berechtigungskonfiguration deny users="?"
. Dies bedeutet, dass das Autorisierungssubsystem angewiesen wird, anonyme Benutzer am Betreten zu hindern. Mit OWIN funktioniert dies weiterhin wie geplant. Sie müssen dies entweder entfernen oder Ihrem anonymen Benutzer den Zugriff auf die Anmeldeseite ermöglichen, indem Sie Folgendes verwenden:.
<location path="Account/Login"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
HTH
Ich habe das gleiche Problem dank dieser akzeptierten Antwort gelöst: ASP.NET Login Redirect Loop, wenn Benutzer nicht in der Rolle sind.
Es ist möglich, dass der Controller, der die Login-Aktion enthält, mit einer AuthorizeAttribute
(sogar einer benutzerdefinierten) verziert ist, während die Login-Aktion nicht mit dem AllowAnonymous
-Attribut versehen ist. Das Entfernen von AuthorizeAttribute
aus dem Controller und das Hinzufügen von AllowAnonymous
zur Anmeldeaktion kann eine mögliche Lösung sein.
Ich hatte ähnliche Probleme, wenn es in einer Endlosschleife war, als ich lokal auf der Website anrief. Es stellte sich heraus, dass beim lokalen Debuggen die Ports umgeleitet wurden. Ich habe die Portnummern im Bildschirm Projekteigenschaften aktualisiert, die Azure-Definition jedoch im Cloud-Projekt unverändert gelassen, und alles begann wie erwartet.
in meinem fall war es ein sehr verdrahtetes problem, ich habe den home controller nach nicht vorhandener rolle dekoriert. es kommt also zu einer Umleitungsschleife.
Ich hatte das gleiche Problem mit meinem Asp.Net MVC 4-Projekt. Ich habe es gelöst, indem ich zu Startup.cs gehe und die Zeile für ConfigureAuth (App) auskommentiere.
public void Configuration(IAppBuilder app)
{
//ConfigureAuth(app);
}
Ich habe auch sichergestellt, dass die Windows-Authentifizierung in IIS für mein Projekt aktiviert war und alle anderen Authentifizierungsoptionen deaktiviert waren.
Für mich stellte sich heraus, dass mein LoginViewModel Verweise auf Dateien mit Übersetzungsressourcen enthält, die anscheinend durch Authentifizierung geschützt sind. Ich entfernte diese Verweise und das Problem wurde gelöst.
Für mich hat Entfernen der folgende Block das Problem behoben:
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
Annehmen
<authentication mode="None" />