为什么我的路由只获得空参数?

时间:2012-05-19 21:15:56

标签: asp.net-mvc-3 null url-routing asp.net-mvc-routing

我试图让这条路线在我的MVC3应用程序中工作但操作方法总是如此 获取null参数。

一般的想法是我的路线有一个强制参数“类别”和一个可选参数“城市”。可能的请求URL如下所示:

   /Map/SelectCategory/Restaurants
   /Map/SelectCategory/Restaurants/Washington

此路由旨在返回JSON数据,因为它将用作Web服务,这与我在此之后为常规定义的标准/ Map / Category操作相反 网页,工作正常。

所以,我的路线在Global.asax中定义如下:

routes.MapRoute(    // Map It! Controller
            "MapSvc",  // route name
            "Map/SelectCategory/{catID}/{city}",   // URL with parameters
            new { controller = "Map", action = "SelectCategory", city= UrlParameter.Optional }
         );    

 .. Here a route for /Map/Category/{id} ..
 .. Here a route for /Map/Placemark/{id} ..

据我所知,我可以在路由定义中省略'catID',因为它自动绑定为非可选,对吧?通过定义但同样的结果来尝试。

最后但同样重要的是,我在Controller中的操作定义如下:

 public ActionResult SelectCategory(string catID, string city)
 {
     IEnumerable<Models.Placemark> list;
     if (!string.IsNullOrEmpty(city)) {
        list = doThis();
     } else {
        list = doThat();
     }
     return Json(list);
 }

现在我在操作的第一个语句上放置了一个断点但是当我按照路径(/ Map / SelectCategory / Restaurants)中的说明请求URL时,我看到类别和城市参数都是NULL,在这种情况下我期望category参数为“Restaurants”。

解决方案 注意:因为我没有100点声望,所以我必须等待6个小时才能发布答案,我真的必须这样做。

谢谢 @tsegay让我朝着正确的方向前进。 Global.asax中定义的所有其他路由都有带参数的显式URL,但问题是由于默认路由(在空解决方案模板中创建的标准路由)对于这种情况太贪婪而引起的:

 routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional}
 );

我在Global.asax的路由列表的末尾移动它,现在问题就消失了!非常感谢你让我朝着正确的方向前进。

0 个答案:

没有答案