繁体   English   中英

在 Web API 控制器中发现 HTTP PUT 请求正文为空

[英]HTTP PUT Request Body Found Null In Web API Controller

我正在尝试使用到达我的控制器的 HTTP Verb [HttpPut]发送请求,但我发送的参数是Null 已经看到很多堆栈溢出同一个线程并尝试过但无法弄清楚......奇怪!

我已经序列化的类

Content requestContent = new Content();
requestContent.Name = "Name";
requestContent.Value = "Value";

这是我的请求正文

private readonly HttpClient _httpClient;

public GetAzureResponseClient(HttpClient httpClient)
{
    _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
}

var requestBody = JsonConvert.SerializeObject(requestContent); 
var uri = new Uri("http://localhost:64288/api/ConnectUs/TestMethod");
var response = _httpClient.PutAsJsonAsync(uri, new StringContent(requestBody, Encoding.UTF8, "application/json")).Result;
client.DefaultRequestHeaders.Add("Authorization", "Basic" + "YourAuthKey");
var responseFromServer = await response.Content.ReadAsStringAsync();

我的 Web API 控制器

public ActionResult<Content> TestMethod([FromBody]Content param)

使用 PutAsJsonAsync 时,您不需要将对象重新包装为 JSON:

HttpClient client = new HttpClient();
var uri = new Uri("http://localhost:64288/api/ConnectUs/TestMethod");
var response = await client.PutAsJsonAsync(uri, requestContent); // LOOK HERE
client.DefaultRequestHeaders.Add("Authorization", "Basic" + "YourAuthKey");
var responseFromServer = await response.Content.ReadAsStringAsync();

您不需要额外的序列化,并且必须使用“await”调用 Async 方法。

        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Basic" + "YourAuthKey");
        var uri = new Uri("http://localhost:64288/api/ConnectUs/TestMethod");
        var response = await client.PutAsJsonAsync(uri, requestContent);
        var responseFromServer = await response.Content.ReadAsStringAsync();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM