Web API嵌套路由无法按预期工作

jem*_*ick 4 asp.net-web-api asp.net-web-api-routing

我在嵌套Web API路由设置方面遇到了困难.

给定路由配置:

config.Routes.MapHttpRoute(
    name: "UsersGroups",
    routeTemplate: "api/users/{userID}/groups/{groupID}",
    defaults: new { controller = "UsersGroups", groupID = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

和控制器动作如下:

public AuthGroup Get(long userID, int groupID)
{
     //Get specific group here
}

public IEnumerable<AuthGroup> Get(long userID)
{
    //get all groups for user here
}
Run Code Online (Sandbox Code Playgroud)

调用此路由/api/users/1528/groups会出现此错误:

参数字典包含方法in groupID的非可空类型参数的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数.System.Int32AuthGroup Get(Int64, Int32)UsersGroupsController

我期待它用单个long参数来获取动作,但显然由于某种原因它忽略了这一点并直接进入具有大多数参数的那个.

根据MS上有关Web API如何解释路由的内容:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection我想我是什么应该是正确的,但显然它似乎不应该工作.

Fil*_*p W 7

您应该使用RouteParameter.Optional(来自Web API),而不是UrlParameter.Optional(来自ASP.NET MVC).

一切都会按照你的意愿行事.

更多信息: