4

我在嵌套 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会出现此错误:

参数字典包含用于方法ingroupID的不可为空类型的参数的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。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我认为我是什么have 应该是正确的,但显然它并没有像它应该的那样工作。

4

1 回答 1

7

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

那时一切都会如你所愿。

更多信息:

于 2013-01-30T02:58:40.957 回答