为什么参数名称与Web Api id工作有关,而memberId(都是int)不起作用?
本文关键字:memberId 都是 int 不起作用 参数 Web 工作 id Api 为什么 | 更新日期: 2023-09-27 18:15:14
就在多年编写和使用web api服务方法之后,我正在做一个从Angular调用的项目,然后当web api中的断点没有命中时,我正在使用postman。
我最终追踪到签名传入参数的简单名称
这行不通
[HttpGet]
public IHttpActionResult GetActivityByMemberId(int memberId) {...}
"id"工作,为什么?
[HttpGet]
public IHttpActionResult GetActivityByMemberId(int id) {...}
邮递员,角叫
http://localhost:49810/umbraco/api/activityapi/GetActivityByMemberId/2
我有点迷失了,为什么我要把参数名改为"id",当我甚至没有指定在Postman (testing)或Angular $http.get
…
让我明白!拜托!
这看起来像是路由参数匹配问题。很可能你使用的是基于约定的路由,routeTemplate
有类似
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
将路由模板中的参数名与控制器动作中的参数名进行匹配。
在ASP中阅读路由和动作选择。. NET Web API来更好地理解路由是如何工作的很难解释默认WebAPI配置的相同情况。虽然这个问题是旧的,但发布这个问题只是为了以防这个替代方法对其他人有所帮助!
Web API中的默认路由配置是(没有操作,操作将根据请求的Http动词选择):
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
在这种情况下,期望的方法签名将使用变量名"id",如果您想使用路径"../api/ControllerName/5678"调用方法,则不接受其他名称。
[HttpGet]
public IHttpActionResult GetActivityByMemberId(int id) {...}
然而,一个小小的调整将使URI对任何变量名都有效。只需将方法的签名更改为
[HttpGet]
public IHttpActionResult GetActivityByMemberId([FromUri(Name = "id")] int memberId) {...}