在客户端,我使用
HttpClient
类向服务器端的 ASP.net Core 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 body,并且它不太可能是错误消息中所说的缓冲问题。
我的问题是,
非常感谢您阅读我的文章。
查看您的 AddMore 方法。我认为您还应该使用 [FromBody] 字符串参数 获取正文内容,我没有看到它被指定。
另请注意,如果您未指定接受/内容类型,则默认为 .NET core 中的 application/json
P.S 还可以考虑使您的 AddMore 方法成为异步方法
我不知道为什么我不能编辑自己的帖子。只是想说我重新创建了一个项目并粘贴了相同的代码,并且它起作用了。 也许看到错误消息“发送请求时发生错误 ---> System.Net.WebException:请求需要缓冲数据才能成功”的人可以尝试相同的操作。 希望有帮助。