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
我建议您学习的基于属性的路由。
我想为我的网络服务将公开的功能做一个简单的 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
我建议您学习的基于属性的路由。