如何将字符串 HttpContent POST 到 ASP.net Core Web API?

问题描述 投票:0回答:2

在客户端,我使用

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,并且它不太可能是错误消息中所说的缓冲问题。

我的问题是,

  1. 如何正确发送 Http 正文中的字符串,它不是参数并且可能很长(就像字符串格式的完整玩家配置文件),因此它不适合标头或查询或...
  2. 如何在服务器端正确接收并解析请求体中的字符串?

非常感谢您阅读我的文章。

c# asp.net-web-api dotnet-httpclient
2个回答
0
投票

查看您的 AddMore 方法。我认为您还应该使用 [FromBody] 字符串参数 获取正文内容,我没有看到它被指定。

另请注意,如果您未指定接受/内容类型,则默认为 .NET core 中的 application/json

P.S 还可以考虑使您的 AddMore 方法成为异步方法


0
投票

我不知道为什么我不能编辑自己的帖子。只是想说我重新创建了一个项目并粘贴了相同的代码,并且它起作用了。 也许看到错误消息“发送请求时发生错误 ---> System.Net.WebException:请求需要缓冲数据才能成功”的人可以尝试相同的操作。 希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.