2010-10-06 4 views
16

Heute begann ich mit der MVC 3 Beta zu spielen. Gestartet mit einer Anwendung von Standard-MVC 3-Vorlage, hinzugefügt, wie eine neue Aktion in der Heimsteuerung folgt (mit Blick dafür)ASP.NET MVC Beta Autorisieren Attribut sendet mich zu falschen Aktion

[Authorize] 
public ActionResult Secured() 
{ 
    ViewModel.Message = "This is secured area, only authenticated users should be here."; 
    return View(); 
} 

Jetzt, wenn ich versuche zu Gesicherter Aktion zu navigieren zu gehen ich eine 404-Seite erhalten kein Fehler gefunden.

Hier ist der Abschnitt Authentifizierung aus meiner web.config.

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
</authentication> 

Wenn ich es richtig das Autorisieren Attribut verstehe in einer 401 nicht autorisierten HTTP-Antwort zur Folge haben soll, die durch die Authentifizierung Handler abgefangen werden soll, und leiten Sie mich zum loginUrl. Was zu einer Account/LogOn Aktion führen sollte.

Meine MVC 2 Anwendung funktioniert wie erwartet und bringt mich zu Account/LogOn Aktion, fehle ich etwas? oder Ist das ein Fehler in MVC 3 Beta?

+0

Es ist nicht nur du - hatte nur das gleiche Problem! –

Antwort

10

ScottGu replies to a similar question on his blog, dass dies offenbar ein Fehler ist.

dieses Problem umgehen, diesen Eintrag hinzuzufügen:

<add key="autoFormsAuthentication" value="false" /> 

zu Ihrem <appSettings /> Abschnitt in der Stammdatei Web.config der Webanwendung.

+0

Danke David, ich bin froh, dass ich und Levi einen Bug in MVC 3 Beta gefunden haben :). –

+2

Ich benutze MVC 3 RTM und ich fand diesen Bug wieder auftauchen und diese AppSettings Schlüsselumgehung repariert es nicht. Schritte zu reproduzieren: 1) Hinzufügen neue MVC 3 Website (mit allen "Home", "Konto" Controller Sachen. 2) Stellen Sie [Autorisieren] zu HomeController Klasse. An diesem Punkt gibt es kein Problem - Weiterleitungen zu allem, was in web.config gut ist. Wenn ich jedoch 3) _ViewStart.cshtml Datei in den Stamm der App verschieben (so dass alle Ansichten in meinen Bereichen auch Basis-Layout verwenden), dann bekomme ich das 404 Konto/Login-Problem. Ich denke, es stammt aus der _ViewStart-Datei. Ich habe einige seltsame Dinge gefunden, wenn ich diese Funktion verwende. – tbehunin

+2

Diese Einstellung selbst behebt das Problem NICHT. Ich musste hinzufügen, damit die Windows-Authentifizierung funktioniert. –

15

es mit dem RTM nicht

Sie benötigen

<add key="loginUrl" value="~/Account/LogOn" /> 

den appSettings in der Web.Config hinzufügen mehr arbeiten

Die Probleme ist in configutil in WebMatrix.WebData

private static string GetLoginUrl() 
{ 

    return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl; 
} 



staticFormsAuthenticationSettings() 
{ 
    LoginUrlKey = "loginUrl"; 
    DefaultLoginUrl = "~/Account/Login"; 
} 
+0

Danke für die Lösung! –

+0

Das hat meine Bewerbung behoben. Danke, dass du darauf hingewiesen hast. Prost :) –

+2

Dies sollte stattdessen die akzeptierte Antwort werden! –

2

Nachdem ich WebMatrix * .dll im bin-Verzeichnis gelöscht habe, ist alles in Ordnung.

+1

Ich hatte ein ASP.NET MVC 3-Projekt, das mit der Razor-View-Engine erstellt wurde. Da auf unserem Produktionsserver ASP.NET MVC 3 nicht installiert ist, kopierte ich während der Bereitstellung die benötigten Assemblys (einschließlich WebMatrix * .dll) in den bin-Ordner. Wir haben kürzlich eine ASP.NET MVC 3 WebForms-View-Engine-App zur Produktion bereitgestellt, sodass ich alle Assemblys aus der Razor-Anwendung kopiert habe, sodass ich sie nicht zweimal ausführen musste. Dazu gehörten die WebMatrix * .dll-Dateien. Sobald ich diese DLLs aus meinem BIN-Ordner entfernte, gingen alle meine Probleme weg. Wie bist du zu dem Schluss gekommen, die WebMatrix dlls zu entfernen? –

0

MVC 4 zeigt das gleiche Problem. Jedoch auf MVC 4, wenn die Authentifizierung Modus korrekt = „Forms“ in der Konfigurationsdatei festgelegt, wie im Folgenden das Problem verschwindet:

<authentication mode ="Forms"> 
    <forms loginurl = "your login" timeout ="2880" slidingExpiration="true"> 
</authentication> 

Es funktioniert für mich. Nimm den Modus raus und es gibt dir Ärger.