【发布时间】:2020-02-26 19:01:57
【问题描述】:
在客户端,我使用HttpClient 类向服务器端的 ASP.net 核心 Web API 发布请求。
我想在请求的正文中发送一个字符串 ("OK"),并在标头中发送一个字符串参数 (numStr=5),我已经阅读了许多类似的线程,但仍然失败。
这是客户端方法:
public async void SendBodyAsync(Action<string> onRespond)
{
try
{
string URL = "http://localhost:60039/api/calculator/AddMore";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, URL);
request.Headers.Add("numStr", "5");
request.Content = new StringContent("OK", Encoding.UTF8, "text/plain"); //causes error
HttpResponseMessage response = await mHttpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
string result = await response.Content.ReadAsStringAsync();
onRespond(result);
}
catch (HttpRequestException ex)
{
Debug.LogError(ex); //Unity3D console Debug
onRespond(null);
}
}
这是服务器操作:
[Route("api/[controller]/[action]")]
[ApiController]
public class CalculatorController : ControllerBase
{
public string AddMore([FromHeader]string numStr)
{
//string bodyStr;
//get string from Request.Body and set the value to bodyStr
return (int.Parse(numStr) + 10).ToString();
}
}
如果我从客户端方法中删除request.Content = new StringContent("OK", Encoding.UTF8, "text/plain"); 行,则响应值为15,这是正确的。
但是使用request.Content,客户端显示错误:
发送请求时出错---> System.Net.WebException:请求需要缓冲数据以 成功。
服务器断点没有触发,所以请求没有成功发送出去。
我使用HttpListener 创建了另一个非常简单的服务器方法,它将request.Content 正确读取为clientContext 流。我认为问题可能在于request.Content 不等于 Http 正文,并且不太可能是错误消息所述的缓冲问题。
我的问题是,
- 如何在 Http 正文中正确发送字符串,它不是参数并且可以很长(如字符串格式的完整玩家资料),因此不适用于标题或查询或...
- 如何在服务器端正确接收和解析请求正文中的字符串?
非常感谢您阅读我的帖子。
【问题讨论】:
-
问题解决了吗?
-
我刚刚重新创建了服务器项目,它工作正常,没有进行任何更改,我不知道为什么。但无论如何感谢您阅读我的帖子。我猜看到相同错误消息的人可以尝试重新创建项目。希望对您有所帮助。
-
太好了,你可以发布你是如何克服它的。
标签: c# asp.net-web-api dotnet-httpclient