在ASP.NET Web API中,我修改了默认的GET操作以接受一个可选参数,该参数将声明获取Object的深度:
public ObjectModel Get(int id, int? loadType = 1)
{
if (loadType.Value == 1)
{
return GetDeepObjectModel(id);
}
else
{
return GetShallowObjectModel(id);
}
}
给定默认路线:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"\d+" }
);
我遇到了有效请求的问题:
https://www.mysite.com/api/objects/1234?loadType=1
会起作用,但我也希望这个相同的动作适用于基本的get - 考虑loadType参数是可选的:
https://www.mysite.com/api/objects/1234
根据第二个请求,我找不到404。似乎当id与可选参数配对时,id不会被计为匹配变量。
我在这里缺少什么吗?我非常不会开始添加新的路线来解决这个问题,因为我对MVC的经验告诉我,添加路线可能会很快失控。
答案 0 :(得分:0)
我不能完全确定这一点,但它似乎是我
上的默认值 int? loadType = 1
参数导致问题。如果我将默认值更改为 null
int? loadType = null
并检查设置默认值的操作
if (!loadType.HasValue)
{
loadType = 1;
}
请求的两个版本都适当地指向了预期的操作。