ASP.NET Web Api 2-不支持使用参数获取

ASP.NET Web Api 2-不支持使用参数获取,asp.net,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,Asp.net,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,我想为我的Web服务将公开的功能做一个简单的RESTAPI [RoutePrefix("companies")] public class CompaniesController : BaseApiController { [HttpGet, Route("{companyId:int}")] public CustomResponse Get(int companyId) { } [HttpPost] public CustomResponse Post(C

我想为我的Web服务将公开的功能做一个简单的RESTAPI

[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方法时,我收到以下消息:

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

[获取]

[删除]

这个职位运作良好。当我尝试在没有参数的情况下调用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();

下面是一组基于属性的路由,我建议您使用。

尝试将路由添加到POST操作中:

[HttpPost, Route("")]
public CustomResponse Post(CompanySaveViewModel model) { }
这将确保路由定义的一致性:要么使用基于属性的路由,要么使用基于全局约定的路由(我个人更喜欢基于显式属性的路由)。我还建议您避免混合使用这两种类型的路由,并从配置中删除基于约定的路由:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
另外,在引导时不要忘记启用基于属性的路由:

config.MapHttpAttributeRoutes();

下面是一个基于属性的路由,我建议您使用。

删除
RoutePrefix
并尝试相同的方法删除
RoutePrefix
并尝试相同的方法,@darin!通过删除默认的HTTP路由,它开始像一个符咒一样工作。我认为应用程序错误地引入了路由约定,不知道是否需要使用路由约定或基定义约定。谢谢谢谢,达林!通过删除默认的HTTP路由,它开始像一个符咒一样工作。我认为应用程序错误地引入了路由约定,不知道是否需要使用路由约定或基定义约定。谢谢