Api控制器声明多个Get语句
在MVC4中使用新的Api控制器,我发现一个问题。 如果我有以下方法:
public IEnumberable<string> GetAll()
public IEnumberable<string> GetSpecific(int i)
这将工作。 但是,如果我想要检索一些不同types的不同数据,即使将$.getJSON
设置为GetAllIntegers
方法,它也将默认为GetAllIntegers
方法:
public IEnumberable<int> GetAllIntergers()
(错误的命名约定)
我能做到这一点吗?
Web API控制器中只能有一个GetAll
方法吗?
我认为想要实现我想要的更容易。 下面是一段代码,用于显示我想要在一个ApiController
:
public IEnumerable<string> GetClients() { // Get data } public IEnumerable<string> GetClient(int id) { // Get data } public IEnumerable<string> GetStaffMember(int id) { // Get data } public IEnumerable<string> GetStaffMembers() { // Get data }
这一切都在路由。 默认的Web API路线如下所示:
config.Routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
使用默认的路由模板,Web API使用HTTP方法来select操作。 结果它会将没有参数的GET请求映射到它可以find的第一个GetAll
。 为了解决这个问题,你需要定义一个path,其中包含操作名称:
config.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
之后,您可以使用以下url发送请求:
- API / yourapicontroller / GetClients
- API / yourapicontroller / GetStaffMembers
这样你可以有多个GetAll
in Controller。
此处更重要的一点是,使用这种路由方式时,必须使用属性来指定允许的HTTP方法(如[HttpGet])。
还有一个select是将基于默认Web API动词的路由与传统方法混合使用,这里有很好的描述:
- Web API:混合传统和基于动词的路由
万一别人面临这个问题。 这是我如何解决这个问题。 使用控制器上的[Route]属性路由到特定的URL。
[Route("api/getClient")] public ClientViewModel GetClient(int id) [Route("api/getAllClients")] public IEnumerable<ClientViewModel> GetClients()