Asp.NET MVC路由问题:无法找到资源

时间:2013-12-17 17:37:34

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我的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/Createhttp://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 

任何人都可以帮我理解如何解决这个问题吗?

1 个答案:

答案 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 }
    );
}