ASP.NET Web Api 2 - 不支持参数的GET

时间:2017-01-07 08:09:10

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

我想为web服务公开的功能做一个简单的REST API。

[RoutePrefix("companies")]
public class CompaniesController : BaseApiController {

    [HttpGet, Route("{companyId:int}")]
    public CustomResponse Get(int companyId) { }

    [HttpPost]
    public CustomResponse Post(CompanySaveViewModel model) { }

    [HttpDelete, Route("{companyId:int}"]
    public CustomResponse Delete(int companyId) { }
}

好的,这应该有效。 POST方法工作正常。但是,当我尝试调用GET和/或DELETE方法时,我收到以下消息:

我尝试使用给定的网址调用这些方法:

http://localhost:11111/api/companies/1 [GET]

http://localhost:11111/api/companies/1 [删除]

enter image description here

POST工作正常。当我尝试在没有参数的情况下调用GET 时,它也能正常工作。当我有任何GET / DELETE方法的参数时,会出现问题。这可能是什么问题?

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

尝试为POST操作添加路线:

[HttpPost, Route("")]
public CustomResponse Post(CompanySaveViewModel model) { }

这将确保路由定义的一致性:要么使用基于属性的路由,要么使用基于全局约定的路由(我个人更喜欢基于显式属性的路由)。我还建议你避免混合两种类型的路由,并从配置中删除基于约定的路由:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

另外,不要忘记在引导时启用基于属性的路由:

config.MapHttpAttributeRoutes();

这是基于属性的nice overview基于属性的路由,我建议您通过。