gpt4 book ai didi

c# - 如何在 ASP.NET Web API 上获取对象?

转载 作者:太空狗 更新时间:2023-10-29 22:57:57 25 4
gpt4 key购买 nike

这是我的 Web API,它工作正常,我的意思是当我在浏览器中输入这个 URL 时:

http://localhost:18207/api/values/GetMyClass

我检索了这个结果:

<MyClass>
<A>a</A>
<b>b</b>
</MyClass>

我的代码:

public class MyClass
{
public MyClass()
{
this.A = "a";
this.b = "b";
}
public string A { get; set; }
public string b { get; set; }
}


public class ValuesController : ApiController
{
public MyClass GetMyClass()
{
return new MyClass();
}
}

我有另一个控制台应用程序可以使用我的 Web API,我想知道,我怎样才能拥有 MyClass 的复杂类型或对象类型?

我控制台上的代码如下,但它返回字符串类型

 static void Main(string[] args)
{
var cts = new CancellationTokenSource();
MainAsync(args, cts.Token).Wait();
}

static async Task MainAsync(string[] args, CancellationToken token)
{
string baseAddress = "http://localhost:18207/api/values/GetMyClass";

using (var httpClient = new HttpClient())
{
string response = await httpClient.GetStringAsync(baseAddress);
}
}

最佳答案

您的响应可能以 JSON 的形式发送到您的控制台应用程序(你的浏览器接收它作为 XML 的原因是因为不同的 Accept 头,你可以通过查看 Content Negotiation 了解这一点)。因此,您需要做的是解析 JSON 并将其反序列化为您的对象。有很多图书馆可以为您做这件事。

首先确保您的 MyClass 是在您的 Web API 项目和控制台项目都引用的类库项目中定义的。这使我们能够重用类定义,而无需在两个项目中都有一个单独的副本。

接下来,你需要一个JSON解析库。 .NET 中内置了一个,但还有一个名为 Json.NET 的第三方这是黄金标准。我的回答将使用那个,因为我更熟悉它。安装Newtonsoft.Json打包到您的控制台应用程序中。

然后,按如下方式更改您的控制台应用程序:

using Newtonsoft.Json; // at the top of your file

static void Main(string[] args)
{
var cts = new CancellationTokenSource();
MainAsync(args, cts.Token).Wait();
}

static async Task MainAsync(string[] args, CancellationToken token)
{
string baseAddress = "http://localhost:18207/api/values/GetMyClass";

using (var httpClient = new HttpClient())
{
string json = await httpClient.GetStringAsync(baseAddress);
MyClass instance = JsonConvert.DeserializeObject<MyClass>(json);
}
}

JsonConvert 类处理 JSON 的序列化和反序列化。反序列化时,我们只是告诉反序列化到哪个类,它会尝试将 JSON 转换为该类的实例并返回它。

关于c# - 如何在 ASP.NET Web API 上获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34316941/

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