Cal*_*ass 13 asp.net-mvc-4 asp.net-web-api
我为我的Customer模型制作了一个Web API类.我有标准方法(GET,POST,PUT,DELETE).问题是,我想实现另一个搜索GET方法.像这样的东西:
[HttpGet]
public IEnumerable<Customer> Search(string id)
{
var customers = customerRepository.Search(id);
return customers;
}
Run Code Online (Sandbox Code Playgroud)
搜索方法使用该.Contains()方法基于客户的帐号执行搜索.
问题是,当我导航到:mySite.com/api/Customers/Search/123我得到一个404.我在这里做错了什么?
mar*_*are 50
虽然Darin的答案始终是最高质量的,但这个问题实际上会从一个答案中获益,该答案解释了如何在任何API中实际执行搜索,分页和过滤以及如何使用最新版本的Web API(v2)来完成.
这是一个我认为是这个问题的良好资源(技术无关)的帖子:http: //www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
答案还应该反映ASP.NET Web API v2中的新功能,因为Darin的答案很老.
由于这个问题在谷歌搜索"asp.net web api search"时出现在顶部,我将尝试在这里解释一些事情.
要使用最新版本的ASP.NET Web API(v2)尽可能接近REST原则,应该认真研究最新版本中引入的属性路由.使用旧的,经典的,基于约定的路由(在global.asax.cs或RouteConfig.cs中)实现RESTful路由非常困难.
你应该在这里阅读更多相关信息 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
现在,详细了解如何实现您询问的细节.
最常见的做法是通过查询字符串参数公开这些类型的功能.
例如,根据REST原则,您的Customers资源应该有一个端点
/api/customers
Run Code Online (Sandbox Code Playgroud)
为此,您将在Web API控制器中装饰您的GetCustomers()操作
[HttpGet]
[Route("/api/customers")]
public HttpResponseMessage GetCustomers(string q="", string sortBy="", string sortDirection="", bool active=true, ...)
{
// q = being optional search query
// sortBy = optional sort by column/property
// sortDirection = optional sort direction
// active = filter on 'active' column/property
// ... other filters may be applicable
}
Run Code Online (Sandbox Code Playgroud)
如果要提供过滤后的视图,可以将此操作与经典MVC中的操作紧密实现.
对于一些自定义边缘情况,我只会在真正需要时引入新的控制器和自定义操作.
关于关于SearchFilter强类型对象的注释,让我们解释一下这不会开箱即用,因为默认模型绑定器在使用GET请求时不会绑定到此类.
因此,我要么将这些属性从SearchFilter类中取出并将它们放在动作本身上,这样它们就可以通过查询字符串绑定器进行绑定,或者[FromBody]如果要从请求主体绑定,则使用绑定器.根据http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
HTH
根据默认路由设置,仅允许标准控制器操作名称(RESTful操作名称和调度基于HTTP谓词完成).如果您想违反RESTful约定并使用一些自定义操作名称,则必须修改路由设置,以便在URL中包含操作名称:api/{controller}/{action}/{id}.现在,您可以发送一个请求,/api/Customers/Search/123该请求将调用Customers API控制器上的"搜索"操作.
| 归档时间: |
|
| 查看次数: |
13715 次 |
| 最近记录: |