.net 无法使用HttpClient将post请求发送到我的API控制器

wn9m85ua  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(173)

我正在通过HttpClient进行API webAPP之间的通信<->。
这是我的API控制器:

[HttpPut, Route("voipport/{newPort}")]
    public async Task<IActionResult> PutVoipPort(int newPort)
    {
        try
        {
            await _repository.ChangePort(newPort);
            await _repository.AddNewRecord("PutVoipPort", "Success");
            return Ok();
        }
        catch(Exception exception)
        {
            return BadRequest(exception.Message);
        }

    }

这是从网站发出的:

public async Task VOIPChangePort(int newPort)
    {
        var json = JsonConvert.SerializeObject(newPort);
        var data = new StringContent(json,Encoding.UTF8,"application/json");
        var result = await _httpClient.PutAsync("voipport/{newPort}", data);
        result.EnsureSuccessStatusCode();
        Console.WriteLine(result);
    }

结果是这样的:

{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Date: Fri, 25 Nov 2022 18:15:08 GMT
  Server: Kestrel
  Transfer-Encoding: chunked
  Content-Type: application/problem+json; charset=utf-8
}}

我不知道为什么我不能调用我的控制器方法。

UPDATE这是解决方案

public async Task VOIPChangePort(int newPort)
{
    var result = await _httpClient.PutAsync($"voipport/{newPort}", null);
    result.EnsureSuccessStatusCode();
}
lf5gs5x2

lf5gs5x21#

newPort似乎是路由的一部分,而不是主体。不要传递任何JSON。
当你应该用实际的int纽波特来模板化这个字符串时,你却调用了voipport/{newPort},如下所示:voipport/65000 .

相关问题