加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – Web API嵌套路由无法按预期工作

发布时间:2020-12-16 06:32:04 所属栏目:asp.Net 来源:网络整理
导读:我在嵌套Web API路由设置方面遇到了困难. 给定路由配置: config.Routes.MapHttpRoute( name: "UsersGroups",routeTemplate: "api/users/{userID}/groups/{groupID}",defaults: new { controller = "UsersGroups",groupID = UrlParameter.Optional }); 和控
我在嵌套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会出现此错误:

The parameters dictionary contains a null entry for parameter groupID of non-nullable type System.Int32 for method AuthGroup Get(Int64,Int32) in UsersGroupsController. An optional parameter must be a reference type,a nullable type,or be declared as an optional parameter.

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

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

解决方法

您应该使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读