unity c# httppost 带参数(json)请求,类似postman里的raw设置的json,返回json 并且解析,超时设置
时间: 2024-09-08 15:02:53 浏览: 140
Unity能够在WebGL包使用的json解析.dll
4星 · 用户满意度95%
在Unity中使用C#通过HTTP POST请求发送带JSON参数的数据,并接收JSON响应通常会涉及到`System.Net.Http`库。下面是一个简单的示例代码,展示了如何创建HttpClient实例、设置POST请求头、携带JSON数据以及处理超时情况:
```csharp
using System;
using System.IO;
using System.Net.Http;
using Newtonsoft.Json;
public class HttpClientWrapper
{
private readonly HttpClient httpClient = new HttpClient();
public async Task<string> PostJson(string url, object jsonData, TimeSpan timeout)
{
// 设置超时
httpClient.Timeout = timeout;
// 将JSON转换为字符串
string jsonContent = JsonConvert.SerializeObject(jsonData);
// 创建请求内容
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
try
{
// 发送POST请求并获取响应
HttpResponseMessage response = await httpClient.PostAsync(url, content);
response.EnsureSuccessStatusCode(); // 检查是否成功
// 读取并解析JSON响应
string responseBody = await response.Content.ReadAsStringAsync();
dynamic responseObject = JsonConvert.DeserializeObject(responseBody);
return responseBody;
}
catch (HttpRequestException ex)
{
// 处理网络请求异常
Console.WriteLine($"HTTP请求错误: {ex.Message}");
return null;
}
}
}
```
在这个例子中,你需要首先导入`Newtonsoft.Json`库(如果尚未引入),它提供序列化和反序列化JSON的功能。
然后,你可以像这样使用这个封装的`PostJson`方法:
```csharp
HttpClientWrapper wrapper = new HttpClientWrapper();
string requestUrl = "http://example.com/api/endpoint";
object data = new { key1 = "value", key2 = 42 };
TimeSpan timeout = TimeSpan.FromSeconds(5); // 设置超时时间(这里是5秒)
string responseJson = await wrapper.PostJson(requestUrl, data, timeout);
if (responseJson != null)
{
// 解析JSON响应
int responseValue = ((dynamic)responseJson).key2;
Debug.Log($"Response value: {responseValue}");
}
else
{
Debug.LogError("Failed to fetch response.");
}
```
记得替换`requestUrl`为你实际的目标URL。
阅读全文