Asp.net 通过GET进行Mvc Web API复杂对象查询
有没有一种方法可以通过“GET”查询web api,但其参数中包含复杂对象 到目前为止,我看到的所有例子似乎都表明我必须使用“POST”。但是我不想使用“POST”,因为这是一个查询,同时我也不想使用一个有16个参数的函数,因为它太脆弱了Asp.net 通过GET进行Mvc Web API复杂对象查询,asp.net,rest,asp.net-mvc-4,asp.net-web-api,Asp.net,Rest,Asp.net Mvc 4,Asp.net Web Api,有没有一种方法可以通过“GET”查询web api,但其参数中包含复杂对象 到目前为止,我看到的所有例子似乎都表明我必须使用“POST”。但是我不想使用“POST”,因为这是一个查询,同时我也不想使用一个有16个参数的函数,因为它太脆弱了 public Product Get(int id, string name, DateTime createdBy, string stockNumber, ... ) { ... } 我希望将上述内容转化为: pu
public Product Get(int id, string name, DateTime createdBy, string stockNumber, ... )
{
...
}
我希望将上述内容转化为:
public Product Get(ProductQuery query)
{
...
}
有办法做到这一点吗?您如何使HttpClient与上述服务一起工作。您可能想看看Web API中的OData支持—也许这会满足您的需要?这取决于查询的实现有多复杂
您可以传递
ProductQuery
参数[FromUri]
假设这是您的ProductQuery
类:
public class ProductQuery
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedBy { get; set; }
public string StockNumber { get; set; }
}
您可以使用[FromUri]
注释动作参数
public Product Get([FromUri] ProductQuery productQuery)
{...}
。。。并且具有ProductQuery
(即Id
,Name
,…)的属性,可以从Uri中的查询字符串传入:
http://.../api/products?Id=1&Name=Product1&CreatedBy=1/4/2013&StockNumber=ABC0001
不,您不能通过GET请求传递模型。通常的做法是将id传递给方法,然后从源代码中获取剩余的数据。我同意Richard的观点。如果它是一个公共api,那么最终可能会出现客户机不支持带有主体的GET请求的问题。更多讨论请参见。POST能否支持OData?我想不是那种安静的人。这很难,我需要在糟糕的实践和失去开箱即用的OData支持之间做出选择。我不知道你为什么不想使用OData?如果使用类似的库,则只能公开所需模型的属性。你可以用OData做一些非常复杂的查询,所以我同意@Richard的观点,并选择OData。听起来不错,我想我可以强迫它使用model binder。