我在嵌套Web API路由设置方面遇到了困难。
给出路由配置:
config.Routes.MapHttpRoute(
name: "UsersGroups",
routeTemplate: "api/users/{userID}/groups/{groupID}",
defaults: new { controller = "UsersGroups", groupID = UrlParameter.Optional }
);
和控制器动作如此:
public AuthGroup Get(long userID, int groupID)
{
//Get specific group here
}
public IEnumerable<AuthGroup> Get(long userID)
{
//get all groups for user here
}
调用此路由/api/users/1528/groups
会出现此错误:
参数字典包含
groupID
中方法System.Int32
的非可空类型AuthGroup Get(Int64, Int32)
的参数UsersGroupsController
的空条目。可选参数必须是引用类型,可空类型,或者声明为可选参数。
我期待它用单个long参数来抓取动作,但显然由于某种原因它忽略了这一点并直接进入具有大多数参数的那个。
根据MS提供的关于Web API如何解释路由的内容:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection我认为我所拥有的应该是正确的,但显然它似乎不应该正常工作。
答案 0 :(得分:7)
您应该使用RouteParameter.Optional
(来自Web API),而不是UrlParameter.Optional
(来自ASP.NET MVC)。
一切都会按照您的意愿行事。
更多信息:
UrlParameter.Optional
- http://msdn.microsoft.com/en-us/library/system.web.mvc.urlparameter.optional(v=vs.108).aspx
RouteParameter.Optional
- http://msdn.microsoft.com/en-us/library/system.web.http.routeparameter.optional(v=vs.108).aspx