2009-02-14 3 views
3

Chaque fois que je limiterai l'accès anonyme dans mon site MVC je reçois une erreur 404:problème de restreindre l'accès anonyme à un ASP.Net MVC site

Server Error in '/' Application. The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make > sure that it is spelled correctly.

Requested URL: /Account/Login

Je viens jouer avec MVC (RC1 Refresh) pour la première fois et après avoir fait fonctionner mon fournisseur d'abonnement sortant, je voulais verrouiller le site pour empêcher l'accès anonyme. J'ai essayé la manière traditionnelle en utilisant web.config avec:

<configuration> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</configuration> 

mais ai eu l'erreur ci-dessus, même si je explicitement autorisé l'accès anonyme à la page d'ouverture de session.

J'ai aussi essayé la technique mentionnée dans Scott Gu's blog et sécurisé A propos de la page en ajoutant l'attribut [Authorize] dans le HomeController

[Authorize] 
public ActionResult About() 
{ 
    return View(); 
} 

mais ai la même erreur quand j'ai essayé d'accéder à cette page.

J'ai même essayé une installation propre sur une machine séparée.

Alors, comment activer l'autorisation dans ASP.Net MVC RC1 Refresh?

Répondre

6

Le fichier Web.Config par défaut contient une erreur. Il a:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login"/> 
</authentication> 

Cela devrait être:

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

(Excusez-moi poser et de répondre à ma propre question, mais il m'a fallu les âges pour repérer cela et n'a pas pu trouver des indices via Google ou SO. si cela a été posté avant de vous sentir libre de fermer).

+0

Assurez-vous que [Authorize] vous marquez votre réponse une réponse acceptée. :) –

+0

Merci, cela aurait pu être une chasse d'oie de plusieurs heures. – Matthew

+0

Wow, merci beaucoup. Celui-là m'a fait me gratter la tête! –

0

Je ne suggère pas d'utiliser l'authentification par formulaire.

Utilisez plutôt un pipeline de middleware.

public void ConfigureAuth(IAppBuilder app) 
{ 
    // Enable the application to use a cookie to store information for the signed in user 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login") 
    }); 
} 

Ofcourse, vous devez retirer le module FormsAuthentication de configuration Web et d'utiliser le mot-clé