简单的WebApi路由问题

时间:2018-02-13 10:37:10

标签: asp.net-web-api asp.net-web-api-routing

我正在尝试使用一个简单的WebAPI项目。

我有一个WebApiConfig.cs:

config.Routes.MapHttpRoute(
         name: "cap-getvehicleoptions",
         routeTemplate: "api/{controller}/{action}/{type}/{capid}",
         defaults: new { controller="Cap", action="GetVehicleOptions" }
     );

然后这个控制器:

 public class CapController : ApiController
    {
    public string GetVehicleOptions(string type, int capid)
    {
        var response = CapService.GetVehicleOptions(type, capid);
        response.Url = string.Format("/api/cap/getvehicleoptions/{0}/{1}", type, capid.ToString());
        return Serialization.Serialize(response);    
    }
}

当我跑步时试试这个:http://localhost:62924/api/cap/GetVehicleOptions/car/55555/

我明白了:

{“Message”:“找不到与请求URI'http://localhost:62924/api/cap/GetVehicleOptions/car/55555/'匹配的HTTP资源。”,“MessageDetail”:“在控制器'Cap'上找不到与请求匹配的操作。” }

我想知道是不是因为int capid属性,但尝试了字符串,但没有帮助。

感谢

2 个答案:

答案 0 :(得分:1)

检查您是否正确配置: 您的注册方法中的WebApiConfig.cs中的路由是什么?

您的WebApiConfig是否已添加到GlobalConfiguration?

示例IN Global.asax:

  protected void Application_Start()
   {
       AreaRegistration.RegisterAllAreas();
       GlobalConfiguration.Configure(WebApiConfig.Register);
       //...
    }

答案 1 :(得分:1)

在您的路线模板中,操作名称包含在URI中。在这种情况下,使用属性指定允许的HTTP方法。

使用[HttpGet]属性装饰动作,它应该可以工作。