具有不同查询字符串的Web API多个GET操作

时间:2015-07-06 13:09:19

标签: c# .net asp.net-web-api

在我的ApiController中,我需要处理这些请求:

GET: api/User?role=theRole
GET: api/User?division=?theDivision
...
GET: api/User?other=stringValue

所有这些请求都可以通过以下方法处理:

public HttpResponseMessage Get(String stringParam)

但显然我不能使用重载...

我该如何解决这种情况?我应该使用带有可选参数的单一方法吗?

2 个答案:

答案 0 :(得分:2)

根据这个答案:https://stackoverflow.com/a/12620238/632604你可以这样编写你的方法:

public class UsersController : ApiController
    {

        // GET api/values/5
        public string GetUsersByRole(string role)
        {
            return "Role: " + role;
        }

        public string GetUsersByDivision(string division)
        {
            return "Division: " + division;
        }
    }

Web API将按照您的要求路由请求:

enter image description here

答案 1 :(得分:0)

您可以考虑做的一件事是修改WebApiConfig文件中的默认路由,您将看到默认路由如何设置为

routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );

将此更改为

for

然后,您可以使用正确的HTTP操作标记每个Web API操作,例如[HttpGet]。要了解有关在Web API中路由和处理多个HTTP操作的更多信息,请查看http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api