Web API路由到具有多个可选参数的函数

时间:2014-10-07 08:40:51

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

我在WebAPI控制器中声明为路由的以下函数头:

[Route("page/{page}/{cityfilter?}/{statefilter?}/{organizationfilter?}")]
public IEnumerable<Contact> GetContact(int page, string cityfilter = null, string statefilter = null, string organizationfilter = null)
{
     ...
}

这里的问题是我希望每个参数都是可选的,所以我想要一个包含cityfilter,statefilter,组织过滤器,其中两个或三个的请求。他们,然后通过这个函数处理和路由器,但我不知道如何构建URI,以便,例如,这条路由只适用于statefilter。

我如何在WebAPI中执行此操作?我应该如何从例如Jquery Ajax调用中调用资源地址?

谢谢。

1 个答案:

答案 0 :(得分:3)

由于参数是简单类型(字符串),因此可以从路径数据(URL路径)或查询字符串绑定它们。因此,您可以将可选参数移动到查询字符串,并使您的路由仅匹配page参数。

[Route("page/{page}")]

以下是您用于从浏览器或AJAX调用中调用此操作的URL示例:

www.yourapidomain.com/page/1?cityfilter=aCityFilterString&statefilter=aStateFilterString&organizationfilter=anOrganizationFilter

您当然可以省略任何可选参数或更改其顺序。

操作方法签名可以保留在示例中。

有关详细信息,请查看parameter binding ASP.NET Web API