WebApiConfig,路线之间有什么区别?
本文关键字:什么 区别 之间 WebApiConfig | 更新日期: 2023-09-27 18:15:26
我有一个WebApiController实现了两个Get方法:一个不需要参数,另一个需要整数参数…
//Get api/<controller>
public IEnumerable<EmployeeVM> Get()
{
List<EmployeeVM> list = new List<EmployeeVM>()
{
new EmployeeVM(){
FullName = "Milton Waddams"
},
new EmployeeVM(){
FullName = "Andy Bernard"
}
};
return list;
}
//Get api/<controller>
public string Get(int id)
{
return "value";
}
如果我在WebApiConfig类中使用以下配置,
configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
则会得到以下错误:
"参数字典中包含的参数'id'为空条目非空类型。Int32' for方法'。字符串(Int32)"在"AngularForMVC.Controllers.EmployeeWebApiController"。一个可选的参数必须是引用类型、可空类型,或者声明为可选参数。"
现在如果我使用以下配置:
configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
就行了。我可以执行Get()方法而不会出现任何错误。
有什么区别?为什么第二个代码引用可以工作?我知道我在url路径中添加了{action},但即使我没有在url中包含{action}路径,这也应该有效。
您应该将id形参作为一个可空的整型。Get (int ?div id)
我总是喜欢使用[Route]属性来定义我的路由配置,而不是在Route中添加新的角色。配置
https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2自定义[Route]
会更好,原因如下
1-确定每个GET
请求应该做什么。比如有[Route("api/getlist")]
和[Route("api/getitem/{id}")]
这样会更具描述性。