繁体   English   中英

如何在C#中使用复杂类型的REST服务?

[英]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。

以复杂对象为参数的Web API获取方法

例:

    [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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM