我在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调用中调用资源地址?
谢谢。
答案 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。