我在我的Web项目中添加了一个区域,我希望能够执行所有必要的身份验证任务。项目中的文件夹结构是:
- Solution
- Web Project
- Areas
- Accounts
- Controllers
AccountController.cs
AccountController
通常是LogOn(LogOnModel model, string returnUrl)
行动。
AccountsAreaRegistration.cs
是自动生成的路线:
context.MapRoute(
"Accounts_default",
"Accounts/{controller}/{action}/{id}",
new {
action = "LogOn",
id= UrlParameter.Optional
}
);
我遇到的第一件事就是简单地将区域名称添加到web.config中的loginUrl
属性中,让路由映射处理重定向 - 非常简单,我想:
<forms loginUrl="~/Accounts/Account/LogOn"
timeout="2880" />
唯一的问题是它不起作用。我收到一条错误,说“无法找到”/ Accounts / Account / Logon“ - 或者我在loginUrl属性中输入的任何值。在我看来,我在Web.Config中指定的URL并没有通过路线表寻找匹配。
*注意:所有这些都是由我的其他控制器中某个操作的[Authorize]属性触发的。
修改
我找到的解决方法是将URL保留为默认值(“帐户/登录”),并在global.asax中添加另一个路由,将请求重定向到右侧区域:
routes.MapRoute("LogOn",
"Account/LogOn/{id}",
new { controller = "Account",
action = "LogOn",
id = UrlParameter.Optional}
).DataTokens.Add("area", "Accounts");
这可以完成工作,但我不知道这是否是解决问题的最佳方案。
答案 0 :(得分:0)
您正在测试的控制器操作是否使用[授权]属性标记?
在请求授权操作后,哪个部分无效,某些操作的授权或路由到登录操作?
答案 1 :(得分:0)
我找到的解决方法是将URL保留为默认值(“帐户/登录”),并在global.asax中添加另一个路由,将请求重定向到右侧区域:
routes.MapRoute("LogOn",
"Account/LogOn/{id}",
new { controller = "Account",
action = "LogOn",
id = UrlParameter.Optional}
).DataTokens.Add("area", "Accounts");
这可以完成工作,但我不知道这是否是解决问题的最佳方案。