我正在为区域写一条路线,但我在同一个网址上遇到了问题。这是我的网络结构:
Project Authentication:
AccountController
|__SignIn
Project Account:
AccountController
|__ChangePassword
我写路线:
AccountAreaRegistration中的第一条路线:
context.MapRoute(
"Account_Default",
"Account/{action}/{id}",
new
{
controller = "Account",
id = UrlParameter.Optional
},
new[] { "MyProject.Account.Controllers" });
AuthenticationAreaRegistration中的第二条路线:
context.MapRoute(
"Authentication_Account",
"Account/SignIn",
new
{
controller = "Account",
action = "SignIn",
id = UrlParameter.Optional
},
new[] { "MyProject.Authentication.Controllers" });
第一条路线优先于第二条路线,因为在AuthenticationAreaRegistration之前调用了AccountAreaRegistration。
当我打开网址时:〜/帐户/登录 - >我收到错误资源未找到,因为此URL与第一个路由匹配。如何解决我的问题。感谢。
答案 0 :(得分:1)
你想要不同区域的帐户/.../ ..相同的前缀网址? 我不认为这是最好的做法,但如果你真的想要它,你可以削减第二条路线并在第一条路线之前粘贴它。并让您的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" });
答案 1 :(得分:1)
如果您乐意修改路线模板,可以执行以下操作:
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访问您的操作 - 只需将网址设为唯一。
如果这还不够好,您可以按不同的顺序调用路由注册功能,以便首先注册更具体的路由 - 在您的情况下是" Authentication_Account"路线。你需要手动调用它们,而不是在Global.asax中使用RegisterAllAreas