[英]How consume REST service with complex type in C#?
我有一个WebApi服务,可以计算定制产品的价格。 控制器功能为:
public double Get([FromUri]Specifications specifications)
Specifications
是允许定制产品的类:
public class Specifications
{
public string Currency;
public int DesktopLicenses;
public Product Product;
public int Licenses;
}
现在,我如何从C#中使用此服务。 我想避免手动将带有所有Specifications
变量的URI查询编入代码,我希望能够直接使用Specifications
的实例来调用服务。
如果服务是POST,我可以这样做:
Specifications product = new Specifications( ...);
HttpResponseMessage reponse = httpClient.PostAsJsonAsync("api/pricecalculator", product).Result;
但是当我使用GET时却找不到相同的方法。
该示例显示GET在调用中将其传递给一个复杂的对象。 通常,这只是一个简单的请求,然后返回复杂的对象-这是“最佳实践”。 如果您需要通过给它一个复杂的对象来请求某些东西,它仍然应该是POST调用。 我知道专家们喜欢将POST / PUT视为对REST世界的更改/添加-但最后,坦率地说,除了请求正文之外,POST和GET之间的差异为零。 如果需要为服务器提供复杂的数据,请使用请求正文(aka POST)。 如果这是一个简单的请求- /api/listofvendors/zone1
然后使用GET。
例:
[HttpGet]
[Route("~/services/mrf/{mrfnumber}")] // GET specific MRF
public Mrf GetMrfRecord(string mrfnumber) {
using (var ddc = new MRFDataContext(ConnectionString)) {
var options = new DataLoadOptions();
options.LoadWith((Mrf c) => c.MRFParts); //immediate load related MRFParts
ddc.LoadOptions = options;
var mrf = (from u in ddc.Mrfs
where u.MrfNum == mrfnumber
select u).FirstOrDefault();
return mrf ?? null;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.