如何将任意JSON数据以及自定义标头发送到REST服务器?

28 浏览
0 Comments

如何将任意JSON数据以及自定义标头发送到REST服务器?

如何向具有身份验证标头的REST主机发送JSON字符串?我尝试了3种不同的方法,找到了一种适用于匿名类型的方法。为什么我不能使用匿名类型?我需要设置一个名为“Group-Name”的变量,但是连字符不是有效的C#标识符。

背景:

我需要发送JSON但无法正确获取正文和内容类型。

功能1 - 使用匿名类型的方法:

内容类型和数据是正确的,但我不想使用匿名类型,我想使用字符串。

输出1:

使用AnonymousTypes + PostAsJsonAsync时,内容类型和数据是正确的,但我不想使用匿名类型。

功能2 - 不按预期工作的方法:

将字符串放入StringContent对象中。这会导致内容类型发生变化。

输出2:

使用StringContent + PostAsync时,内容类型错误。

功能3 - 不按预期工作的方法:

由于我知道PostAsJsonAsync可以正确设置contentType,所以让我们使用该方法。(不起作用)

输出3:

使用StringContent + PostAsJsonAsync时,内容类型正确,但POST正文错误。

问题:

我只想将JSON作为字符串或在运行时定义的动态对象发送到服务器,同时正确设置HTTP内容类型和特殊的“Auth-Token”标头。

如果不使用WebAPI(如servicestack或其他任何东西)的示例也可以。

0
0 Comments

问题的原因是,用户想要向一个REST服务器发送任意的JSON数据,并且希望在请求中添加一个自定义的头部。然而,用户不知道该如何实现这个功能。

解决方法是使用StringContent类的构造函数来创建一个新的StringContent实例。该构造函数需要传入三个参数:content、encoding和mediaType。

content参数是要发送的JSON数据。encoding参数是用于编码content的编码方式。mediaType参数是要发送的数据的媒体类型。

通过使用这个构造函数,用户可以创建一个包含要发送的JSON数据的StringContent对象,并将其作为请求的内容。然后,用户可以设置StringContent对象的Headers属性来添加自定义的头部。

以下是一个示例代码,展示了如何使用StringContent类来发送任意的JSON数据,并在请求中添加一个自定义的头部:

// 创建要发送的JSON数据
string jsonData = "{\"name\": \"John\", \"age\": 30}";
// 创建一个包含JSON数据的StringContent对象
StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
// 添加自定义的头部
content.Headers.Add("CustomHeader", "CustomValue");
// 创建HttpClient对象
HttpClient httpClient = new HttpClient();
// 发送请求
HttpResponseMessage response = await httpClient.PostAsync("http://example.com/api/endpoint", content);
// 处理响应
string responseContent = await response.Content.ReadAsStringAsync();

在这个示例中,我们首先创建了要发送的JSON数据。然后,我们使用StringContent类的构造函数创建了一个包含JSON数据的StringContent对象。我们还指定了编码方式为UTF-8,并将媒体类型设置为application/json。接下来,我们使用StringContent对象的Headers属性添加了一个自定义的头部。最后,我们使用HttpClient类来发送POST请求,并将StringContent对象作为请求的内容。在接收到响应后,我们可以使用HttpResponseMessage对象的Content属性来获取响应的内容。

通过使用StringContent类和HttpClient类,我们可以轻松地向REST服务器发送任意的JSON数据,并在请求中添加自定义的头部。这使得我们可以灵活地与REST服务器进行通信,并满足各种不同的需求。

0
0 Comments

问题的出现的原因:

用户在发送自定义的 JSON 数据时遇到了困难,因为不能直接设置 HttpContent 对象的实例,因为它是一个抽象类,需要使用其中的子类来实现。

解决方法:

可以使用 StringContent 来发送自定义的 JSON 数据。StringContent 类可以在构造函数中设置响应的字符串值、编码和媒体类型。

以下是解决方法的代码示例:

using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
public class RestClient
{
    public static async Task PostJsonData(string url, string jsonData)
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
            return await client.PostAsync(url, content);
        }
    }
}

以上代码使用 HttpClient 类发送 POST 请求,并将自定义的 JSON 数据作为请求的内容进行发送。

通过这种方式,用户可以发送任意的 JSON 数据,并且可以自定义请求的头部信息。

参考链接:

- [How do I set up HttpContent for my HttpClient PostAsync second parameter?](https://stackoverflow.com/questions/18971510)

0