这让我很困惑,我认为这可能是微软 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>