2010-04-21 11 views
2

J'essaie de sécuriser tout mon site MVC, donc avant le contrôleur Home, j'ai ajouté un attribut [Authorize]. Maintenant, si vous l'exécutez à partir de Visual Studio ou naviguez en utilisant l'URL racine (par exemple, http://localhost:2897), il redirige vers la page de connexion, comme prévu. Cependant l'URL dans la barre d'adresse après la redirection ressemble à ceci: http://localhost:2897/Account/LogOn?ReturnUrl=%2fdefault.aspx%3fReturnUrl = Default.aspx pour MVC?

Je n'ai pas testé cela, vu que je n'ai pas implémenté mon code d'authentification. Cependant, cela me semble un gros problème, car je n'ai pas de default.aspx dans mon projet!

Mon étiquette d'authentification dans le web.config ressemble à ceci:

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

Pourquoi ne pas prendre ce chemin comme ReturnUrl par défaut au lieu de default.aspx?

Répondre

2

ASP.NET (pour être précis, FormsAuthentication.RedirectFromLoginPage) ignore toujours le réglage defaultUrl dans web.config lorsqu'un paramètre ReturnUrl est présent. Il n'est honoré que lorsque vous accédez directement à la page de connexion sans passer les paramètres ReturnUrl.

Le modèle de projet ASP.NET MVC fournit un modèle vide Default.aspx pour gérer des demandes comme celles du mode pipeline IIS Classic. Vous devriez être bien avec ça.

+0

Hmmm .. je suppose que je ne pose pas ma question correctement. Je suppose que ma vraie question est, comment puis-je l'obtenir pour mettre le ReturnUrl à Home/Index au lieu de default.aspx? C'est-à-dire, lorsque la personne navigue vers l'URL racine, pas une route spécifique. (Si la personne navigue vers une route spécifique, la ReturnUrl est correcte.) – Cynthia

+0

@Cynthia: Je vois ce que vous voulez dire. Le problème est, en fait, le serveur Web essaie de servir le document par défaut lorsque vous demandez "/". Le modèle par défaut fourni avec ASP.NET MVC * de manière transparente * réécrit les requêtes à "/ default.aspx" en "/" route * sur le serveur * et tente d'exécuter l'action, mais comme il nécessite une authentification, il redirige l'utilisateur vers le page de connexion en utilisant l'URL actuelle comme URL de retour (qui est toujours 'default.aspx'). Effectivement, vous obtenez ce que vous voulez (sauf obtenir 'default.aspx' affiché dans la barre d'adresse). Vous aurez moins de problèmes en mode intégré. –

+0

OK, je l'ai essayé et Default.aspx va au contrôleur/action par défaut. Alors peu importe! Je pensais que ça exploserait, mais apparemment pas. Merci! – Cynthia

Questions connexes