gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:05:00 24 4
gpt4 key购买 nike

我有一个计算定制产品价格的 WebApi 服务。 Controller 函数是:

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 之间的差异为零。如果您需要向服务器提供复杂的数据,请使用请求正文(也称为 POST)。如果它是一个简单的请求——/api/listofvendors/zone1——然后​​使用 GET。

Web API Get Method with Complex Object as Parameter

例子:

    [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;
}
}

关于c# - 如何在 C# 中使用复杂类型的 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com