Asp.net mvc 为什么ASP.NET MVC MapRoute会弹出一个Windows身份验证对话框?

Asp.net mvc 为什么ASP.NET MVC MapRoute会弹出一个Windows身份验证对话框?,asp.net-mvc,asp.net-mvc-routing,maproute,Asp.net Mvc,Asp.net Mvc Routing,Maproute,这一点让我感到困惑,我认为这可能是微软MVC实现中的一个缺陷。我正在使用VS2008 SP1构建一个MVC网站。为了锁定我的网站,我对控制器进行了如下编辑: 1 public class IdeaController : Controller 2 { 3 [Authorize(Users = "whozmom")] 4 public ActionResult Index(string zapp, int? page) 我正在使用ASP.NET成员资格和表单身份验证。当

这一点让我感到困惑,我认为这可能是微软MVC实现中的一个缺陷。我正在使用VS2008 SP1构建一个MVC网站。为了锁定我的网站,我对控制器进行了如下编辑:

1    public class IdeaController : Controller
2    {
3    [Authorize(Users = "whozmom")] 
4    public ActionResult Index(string zapp, int? page)
我正在使用ASP.NET成员资格和表单身份验证。当我将代码发布到主机时,会弹出一个Windows身份验证对话框。我一直绞尽脑汁想弄清楚我可能做了什么编辑导致了这一点。为了解决这个问题,我几乎完全重写了我的应用程序,并在Global.asax.cs文件中将其缩小为一个更改。首先,让我向您展示(相关部分)有缺陷的版本:

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   );
当我在本地使用此路由运行代码时,我的浏览器会显示为空白…登录页永远不会显示。如果我在主机上运行应用程序,它会弹出一个Windows身份验证对话框。如果我将路线改为:

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   );
一切正常。注意第3行的编辑,在我的URL字符串前面添加了“Ideas/”。有人能给我解释一下吗?我也可以通过从我的控制器中删除授权行(上面的第3行)来解决这个问题,但是我当然会失去安全性

更新:这里是我的正式会员部分:

<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>

我很清楚,这是由错误配置的路由造成的。您是否正确配置了登录页面的路径?也许可以试试Phil Haack的RouteDebugger: