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}路径,这也应该有效。

WebApiConfig,路线之间有什么区别?

您应该将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}")]这样会更具描述性。

你不会面对你现在面临的问题。