MVC4中相同URL上的路由
本文关键字:路由 URL MVC4 | 更新日期: 2023-09-27 18:21:31
我正在为区域编写路由,但在同一个URL上遇到了问题。这是我的网络结构:
Project Authentication:
AccountController
|__SignIn
Project Account:
AccountController
|__ChangePassword
我写路线:
AccountArea注册的第一条途径:
context.MapRoute(
"Account_Default",
"Account/{action}/{id}",
new
{
controller = "Account",
id = UrlParameter.Optional
},
new[] { "MyProject.Account.Controllers" });
身份验证区域注册中的第二条路径:
context.MapRoute(
"Authentication_Account",
"Account/SignIn",
new
{
controller = "Account",
action = "SignIn",
id = UrlParameter.Optional
},
new[] { "MyProject.Authentication.Controllers" });
第一个路由的优先级高于第二个路由,因为在AuthenticationAreaRegistration之前调用了AccountAreaRegulation。
当我打开URL:~/Account/SignIn->I get error Resource not found,因为此URL与第一个路由匹配。如何解决我的问题。谢谢
如果你很乐意修改路线模板,你可以这样做:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Authentication_Account",
"Authentication/SignIn",
new
{
controller = "Account",
action = "SignIn",
id = UrlParameter.Optional
},
new[] { "MyApp.Areas.Authentication.Controllers" });
}
只修改您的"Authentication_Account"模板使用~/Authentication/SignIn和~/Account/ChangePassword来访问您的操作-只需使URL唯一即可。
如果这还不够好,您可以按不同的顺序调用路由注册函数,以便首先注册更具体的路由——在您的情况下,即"Authentication_Account"路由。您需要手动调用它们,而不是在Global.asax 中使用RegisterAllAreas
您想要相同的前缀url,如Account/…/。。针对不同区域?我不认为这是最好的做法,但如果你真的想要,你可以剪切第二条路线,然后在第一条路线之前粘贴。并让您的AuthenticationAreaRegistration MapRoute为空。
所以你的AccountAreaRegistration应该是这样的:
context.MapRoute(
"Authentication_Account",
"Account/SignIn",
new
{
controller = "Account",
action = "SignIn",
id = UrlParameter.Optional
},
new[] { "MyProject.Authentication.Controllers" });
context.MapRoute(
"Account_Default",
"Account/{action}/{id}",
new
{
controller = "Account",
id = UrlParameter.Optional
},
new[] { "MyProject.Account.Controllers" });