HttpClient请求没有响应



当我向这个API路由发送后请求时,我没有得到任何响应-没有错误,没有错误的请求状态,等等postData只是一个JSON对象。有趣的是:当我将post数据作为字符串而不是对象发送时,我可以得到响应。

查看下面的代码:

[HttpPost]
[Route("api/updateStaffs/")]
public async Task<object> UpdateStaff([FromBody] object postData)
{
string _apiUrl = "http://localhost:5000/system/getToken";
string _baseAddress = "http://localhost:5000/system/getToken";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var responseMessage = await client.PostAsync(_apiUrl, new StringContent(postData.ToString(), Encoding.UTF8, "application/json"));
if (responseMessage.IsSuccessStatusCode)
{
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = responseMessage.Content;
return ResponseMessage(response);
}
}
return NotFound();
}

无响应:

var postData = new {
user = "test"
pass = "hey"
};
var responseMessage = await client.PostAsync(_apiUrl, new StringContent(postData.ToString(), Encoding.UTF8, "application/json"));
OR
var responseMessage = await client.PostAsync(_apiUrl, new StringContent("{}", Encoding.UTF8, "application/json"));

将得到回应:

var responseMessage = await client.PostAsync(_apiUrl, new StringContent("blahblah", Encoding.UTF8, "application/json"));

接收的API是第三方应用程序,因此我无法验证此错误是否在另一端。

谢谢。

解决了这个问题。必须使用HttpVersion10而不是HttpVersion11。

如果您不想使用PostAsJsonAsync

您需要将匿名类型序列化为JSON,最常见的工具是JSON.NET

var jsonData = JsonConvert.SerializeObject(postData);

然后你需要构造一个内容对象来发送这些数据,在这里我们可以使用ByteArrayContent,但你可以使用不同类型的

var buffer = System.Text.Encoding.UTF8.GetBytes(jsonData);
var byteContent = new ByteArrayContent(buffer);

然后发送请求

var responseMessage = await client.PostAsync(_apiUrl, byteContent);

最新更新