2009-05-11 6 views
3

Celui-ci m'a bloqué, et je pense que cela pourrait être un bug dans l'implémentation MVC de Microsoft. Je construis un site web MVC en utilisant VS2008 SP1. Dans une tentative de verrouiller mon site Web, j'ai modifié mon contrôleur pour ressembler à ceci:Pourquoi ASP.NET MVC MapRoute ouvre-t-il une boîte de dialogue d'authentification Windows?

1 public class IdeaController : Controller 
2 { 
3 [Authorize(Users = "whozmom")] 
4 public ActionResult Index(string zapp, int? page) 

J'utilise l'adhésion ASP.NET et l'authentification par formulaire. Lorsque je publie mon code sur mon hôte, une boîte de dialogue d'authentification Windows apparaît. Je me suis creusé la cervelle en essayant de comprendre quelle modification j'aurais pu faire pour provoquer ça. J'ai à peu près entièrement réécrit mon application en essayant de comprendre cela et l'ai réduit à un changement dans mon fichier Global.asax.cs. Tout d'abord laissez-moi vous montrer (la partie pertinente) la version buggé:

1 routes.MapRoute(
2   "Ideas", 
3   "{zapp}/{page}/", 
4   new { controller = "Idea", action = "Index", zapp = "Office", page = "" } 
5 ); 
6  
7 routes.MapRoute(
8   "Default",            // Route name 
9   "{controller}/{action}/{id}",       // URL with parameters 
10  new { controller = "Idea", action = "Index", id = "" } // Parameter defaults 
11 ); 

Quand je lance mon code avec cette route localement mon navigateur est juste en blanc ... la page d'ouverture de session ne montre jamais. Si j'exécute mon application sur mon hôte, une boîte de dialogue d'authentification Windows apparaît. Si je change mon routage pour être à la place:

1 routes.MapRoute(
2   "Ideas", 
3   "Ideas/{zapp}/{page}/", 
4   new { controller = "Idea", action = "Index", zapp = "Office", page = "" } 
5 ); 
6  
7 routes.MapRoute(
8   "Default",            // Route name 
9   "{controller}/{action}/{id}",       // URL with parameters 
10  new { controller = "Idea", action = "Index", id = "" } // Parameter defaults 
11 ); 

Tout fonctionne bien. Notez la modification sur la ligne # 3, en ajoutant "Ideas /" devant ma chaîne d'URL. Quelqu'un peut m'expliquer cela? Je peux aussi résoudre le problème en enlevant la ligne Autoriser de mon contrôleur (ligne # 3 ci-dessus), mais bien sûr je perds ma sécurité.

MISE À JOUR: Voici ma section de membre à part:

<membership> 
    <providers> 
      <clear /> 
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, 
System.Web, 
Version=2.0.0.0, 
Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a" 
connectionStringName="ApplicationServices" 
enablePasswordRetrieval="false" 
enablePasswordReset="true" 
requiresQuestionAndAnswer="false" 
requiresUniqueEmail="false" 
passwordFormat="Hashed" 
maxInvalidPasswordAttempts="5" 
minRequiredPasswordLength="6" 
minRequiredNonalphanumericCharacters="0" 
passwordAttemptWindow="10" 
passwordStrengthRegularExpression="" 
applicationName="/" /> 
      </providers> 
     </membership> 

Répondre

0

Il me semble clair que cela est causé par une voie configurée de manière incorrecte. Avez-vous configuré la route vers votre page de connexion? Peut-être essayer RouteDebugger par Phil Haack: RouteDebugger 2.0

Questions connexes