3

这让我很困惑,我认为这可能是微软 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/”。谁可以给我解释一下这个?我也可以通过从控制器中删除 Authorize 行(上面的第 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>
4

1 回答 1

0

我似乎很清楚这是由错误配置的路由引起的。您是否正确配置了登录页面的路由?也许试试 Phil Haack 的 RouteDebugger: RouteDebugger 2.0

于 2012-08-31T20:44:49.907 回答