Тело HTTP-запроса PUT найдено нулевым в контроллере веб-API - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь отправить запрос с 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();

My Web API Controller

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

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Вам не нужно перематывать объект как JSON при использовании PutAsJsonAsyn c:

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();
1 голос
/ 27 февраля 2020

https://docs.microsoft.com/en-us/previous-versions/aspnet/hh944690 (v% 3Dvs.118)

PutAsJsonAsyn c будет сериализовать данный объект типа T, попробуйте PutAsyn c вместо

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

1 голос
/ 27 февраля 2020

вам не нужна дополнительная сериализация, и вы должны вызвать метод Asyn c с помощью 'await'.

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