在我的ApiController中,我需要处理这些请求:
GET: api/User?role=theRole
GET: api/User?division=?theDivision
...
GET: api/User?other=stringValue
所有这些请求都可以通过以下方法处理:
public HttpResponseMessage Get(String stringParam)
但显然我不能使用重载...
我该如何解决这种情况?我应该使用带有可选参数的单一方法吗?
答案 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将按照您的要求路由请求:
答案 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