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



我正在尝试发送一个具有HTTP谓词[HttpPut]的请求,该请求已到达我的控制器,但我发送的参数是Null。看过很多堆栈溢出的相同线程并尝试过,但无法解决。。。奇怪的

I类已序列化

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();

https://learn.microsoft.com/en-us/previous-versions/aspnet/hh944690(v%3Vs.118(

PutAsJsonAsync将序列化T类型的给定对象,请尝试PutAsync而不是

https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.putasync?view=netframework-4.8

最新更新