对 .net Core 7 Web API 的 POST 请求返回空字符串

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

因此,我使用在 localhost 上运行的以下 C# 代码向部署在 IIS 10 上的 .net Core 7 Web api 发送 POST 请求。

我可以使用 C# 代码成功发出 GET 请求,但是 POST 请求返回 200 且响应正文为空。我使用 PostMan 测试了 POST 端点以及来自应用程序的 AJAX 请求,并且成功了。 AJAX 调用和 PostMan 请求实际上都会触发 API 方法执行的更改,但 C# 代码不会触发任何更改。

还请注意,当我在本地运行 API 并将本地应用程序指向本地 API 时,POST 会起作用。我已经用头撞墙两周了,试图解决这个问题,所以非常感谢您的帮助!

var request = new HttpRequestMessage(HttpMethod.Post, "{URL}");
request.Headers.Add("Authorization", "Bearer {API_TOKEN}");
client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
var content = new StringContent("{\r\n  \"State\": \"PA\",\r\n  \"Zip\": \"19087\",\r\n  \"Country\": \"United States\"\r\n}", null, "application/json");
request.Content = content;
var response = Task.Run(async () => await client.SendAsync(request)).Result;
response.EnsureSuccessStatusCode();
var ret = Task.Run(async () => await response.Content.ReadAsStringAsync()).Result;
c# asp.net-mvc .net-core asp.net-core-webapi httprequest
1个回答
0
投票

当我在本地运行 API 并将本地应用程序指向本地 API 时, 邮政工作有效。我已经用头撞墙两周了 试图解决这个问题,所以非常感谢您的帮助!

根据您的描述和共享代码,我尝试调查您的代码片段并发现了一些不一致之处。

首先,如果您也能分享您的控制器代码就更好了。但是,您请求的第一个问题

content
格式不正确。

我建议您检查您的请求模型并尝试相应地序列化它们。

我已尝试以下方式并且其按预期工作。

这是我尝试的示例:

演示控制器:

[Route("api/[controller]")]
[ApiController]
public class WebAPIRequestController : ControllerBase
{
    [HttpPost]
    [Route("WebAPIReturningEmptyString")]
    public async Task<IActionResult> WebAPIReturningEmptyString([FromBody]  string testdata)
    {
        return Ok("Request has been received!");

    }
}

客户要求:

public async Task<string> CallAPI()
{

    HttpClient client = new HttpClient();
    var _requestUrl = "http://localhost:5094/api/WebAPIRequest/WebAPIReturningEmptyString";
    var request = new HttpRequestMessage(HttpMethod.Post, _requestUrl);
    //request.Headers.Add("Authorization", "Bearer {API_TOKEN}");
    //client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
    ///var content = new StringContent("{\r\n  \"State\": \"PA\",\r\n  \"Zip\": \"19087\",\r\n  \"Country\": \"United States\"\r\n}", null, "application/json");
    var content = new StringContent("\"This is a test data\"", Encoding.UTF8, "application/json");
    request.Content = content;
    var response = Task.Run(async () => await client.SendAsync(request)).Result;
    ///var response = await client.SendAsync(request).Result
    response.EnsureSuccessStatusCode();
   // var ret = Task.Run(async () => await response.Content.ReadAsStringAsync()).Result;

    var responseBody = await response.Content.ReadAsStringAsync();
    return responseBody;
}

注意: 如您所见,我对您的代码进行了评论,导致 API 请求无法访问。因为如前所述,reuqest 内容的格式不正确。

另一个问题是您使用了

Task.Run(async () => await response.Content.ReadAsStringAsync()).Result;
,它始终为空,并且您无法读取 API 响应。

相反,您可以执行以下操作,以便相应地读取 API 响应:

 var responseBody = await response.Content.ReadAsStringAsync();

输出:

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