我的mvc web项目有以下设置
/Area
Admin
HomeController
Customer
HomeController
YearController
/Controllers
AgentsController
EmployeeController
我想将客户区域中Home Controller的路由更改为以下
http://mywebsite/Customer/{action}/{id}
我还希望所有其他路由都以默认方式运行。
http://mywebsite/{area}/{controller}/{index}/{id}
或http://mywebsite/{controller}/{index}/{id}
我访问了CustomerAreaRegistration并将下面的代码添加到RegisterArea方法中,但它无效。当我导航到http://mywebsite/Customer/Create
或http://mywebsite/Agents/View
时,它会正确显示页面。但是,如果我尝试导航到http://mywebsite/Customer/Year/Edit?yearId=3
,则会显示无法找到资源。
这是我的CustomerAreaRegistration
的注册区域方法 public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRouteLowercase(
"MyCustomerHomeDefault",
"Customer/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
context.MapRouteLowercase(
"Customer_default",
"Customer/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
我没有对路由进行任何其他更改,因此我不确定下一步该怎么做。我下载了路由调试器,并说它匹配http://mywebsite/Customer/Year/Edit?yearId=3
的路由是
Matched Route: Customer/{action}/{id}
Route Data
Key Value
action year
id edit
area Customer
controller Home
任何人都可以帮我理解如何解决这个问题吗?
答案 0 :(得分:2)
由于路由条目按照它们输入到注册的顺序进行评估,因此交换路由条目以便首先检查更具体的路由,然后检查更一般的一秒,如下所示:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRouteLowercase(
"Customer_default",
"Customer/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
context.MapRouteLowercase(
"MyCustomerHomeDefault",
"Customer/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}