我有以下路由规则:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"\d+"}
);
以及具有以下操作的 ProductController:
public Product Get(int id)
{
return _svc.GetProduct(id);
}
public int Post(Product p)
{
return 0;
}
我可以致电Get
预期行动:获取“api/产品/2”
我以为我可以打电话给我的Post
像这样的动作:发布“api/产品”但它不起作用。我收到 404 错误。如果我这样做的话它会起作用:发布“api/产品/2”
我想通过设置 id 的默认值RouteParameter.Optional
这意味着 url 的 {id} 部分不需要存在来匹配路由规则。但这似乎并没有发生。是制定另一条不包含 URL 的 {id} 部分的规则的唯一方法吗?
我有点困惑。谢谢你的帮助。
你需要做id
可为 null 的 int默认为 null
// doesn't work
public Product Get(int? id)
{
return _svc.GetProduct(id);
}
// works
public Product Get(int? id = null)
{
return _svc.GetProduct(id);
}
我大约 95% 确信这两种方法都可以在 MVC 下工作(当为路由参数声明可选时),但 Web API 更严格。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)