我想为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 [删除]
POST工作正常。当我尝试在没有参数的情况下调用GET 时,它也能正常工作。当我有任何GET / DELETE方法的参数时,会出现问题。这可能是什么问题?
谢谢大家的帮助!
答案 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
基于属性的路由,我建议您通过。