ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回404

时间:2010-02-19 16:55:40

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing

当我使用以下路线导航到以下网址时出现404错误:

http://localhost:53999/properties/

但是,以下所有内容都已正确路由到我的控制器中的 List 操作:

http://localhost:53999/properties/usa/new-york/manhattan/12

http://localhost:53999/properties/usa/new-york/manhattan

http://localhost:53999/properties/usa/new-york

http://localhost:53999/properties/usa

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    //properties
    routes.MapRoute(
        "Properties",
        "Properties/{country}/{state}/{city}/{id}",
        new
        {
            controller = "Properties",
            action = "List",
            country = UrlParameter.Optional,
            state = UrlParameter.Optional,
            city = UrlParameter.Optional,
            id = UrlParameter.Optional
        } 
    );

    //default
    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );
}

在PropertiesController.cs中:

public ActionResult List(string country, string state, string city, string id)
{
     return View();
}

任何人都知道我错过了什么?看起来应该只是去默认操作,但显然不是......

4 个答案:

答案 0 :(得分:2)

您还可以尝试以下操作(因为您使用的是MVC 1.0)。

在当前路线上添加路线

routes.MapRoute(
    "Properties", "Properties", new { controller = "Properties", action = "List"} 
);

并向控制器添加一个重载的ActionResult List()方法:

public ActionResult List()
{
     return View();
}

答案 1 :(得分:1)

你有没有试过Phil Haack的这个Route Debugger?它可以帮助您确定发生了什么。

答案 2 :(得分:0)

而不是传递

(string)null

尝试传递

UrlParameter.Optional

如Phil Haacks here所述。我不知道这是否会解决问题,因为我目前无法对其进行测试。

答案 3 :(得分:0)

Brad Wilson在这篇文章中回答:http://forums.asp.net/p/1527697/3690295.aspx#3690295

“不,问题是您的磁盘上有一个Properties文件夹,因此它通过标准调度程序(而非MVC)进行调度,然后进行404调度,因为它无法找到默认文档。”