我有一个Asp.Net Web API
,其功能如下
[HttpPost]
[Route("Employees")]
public IHttpActionResult Employees(SearchBindingModel searchOptions)
{
...
}
它是搜索员工的功能,因此它应该是HttpGet
而不是HttpPost
。问题是SearchBindingModel
非常复杂,我不知道如何将其写为查询字符串。
班级看起来像这样
public class SearchBindingModel
{
public IList<Criteria> Criterias { get; set; }
}
public class Criteria
{
...
}
public class FooCriteria : Criteria
{
...
}
public class BarCriteria : Criteria
{
...
}
由于查询字符串不能包含层次结构,我应该重新考虑我的Web API吗?
或者我应该继续使用HttpPost
吗?
答案 0 :(得分:1)
简而言之,请尽可能遵循最佳实践,但不要挂断它。您似乎拥有使用POST的有效用例。真正的RESTful&#39;主要是为了解释几个竞争标准(http客户端和服务器,这些标准稍有不同等)。
对于复杂的大型模型,有时使用GET是不切实际的,这取决于您的API的消费者(通过浏览器或不通过浏览器),您可能需要考虑查询字符串的浏览器URL长度限制,如上所述https://stackoverflow.com/a/417184/1422377如果您要传递复杂模型的列表,这一点尤其重要。
或者,如果你真的必须使用GET,WEB API将接受来自Body的模型,如下面的示例所示。但是,我建议谨慎使用,因为某些客户端将无法向get请求发送正文(例如,如果您的客户端是.net,则必须使用RestSharp lib而不是本机库)。
public IHttpActionResult Employees([FromBody]SearchBindingModel searchOptions)