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

ASP.NET Web Api 2 - GET with parameters not supported

我想为我的网络服务将公开的功能做一个简单的 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 and/or DELETE 方法时,我收到以下消息:

我正在尝试使用给定的 URL 调用这些方法:

http://localhost:11111/api/companies/1 [获取]

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

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

谢谢大家的帮助!

尝试为您的 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 我建议您学习的基于属性的路由。