Как я могу отладить ASP.NET Core WebAPI отклоняя запрос POST? - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь отправить запрос POST в очень простой тестовый API, который я сделал, однако он просто отклоняет запрос до того, как он достигнет точки останова в методе контроллера, и возвращает ошибку 400.

Идентичный запрос от Postman работает нормально, и тот же код, который я использую для вызова API, отлично работал на другом API.В идеале я хотел бы сравнить запрос, сделанный из моего кода, и запрос от Почтальона, но я не знаю, возможно ли это вообще.

Это не проблема модели или проблемы маршрутизации.

Метод контроллера:

[HttpPost]
public void Post([FromBody] User user)
{
    user.CreatedAt = DateTime.Now;
    UserContainer.Users.Add(user);
}

Код вызова API:

HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };

HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = new Uri("https://localhost:5001/api/");

Task<HttpResponseMessage> task = client.PostAsync("user", new StringContent("{\"id\":\"7\",\"firstName\":\"Kanye\",\"lastName\":\"West\"}"));
task.Wait();
task.Result.IsSuccessStatusCode.Should().BeTrue();

Модель:

public class User
{
    public int      Id        { get; set; }
    public DateTime CreatedAt { get; set; }
    public string   FirstName { get; set; }
    public string   LastName  { get; set; }
}

Решено Мне нужно заменитьэта строка:

Task<HttpResponseMessage> task = client.PostAsync("user", new StringContent("{\"id\":\"7\",\"firstName\":\"Kanye\",\"lastName\":\"West\"}"));

При этом:

Task<HttpResponseMessage> task = client.PostAsync("user", new StringContent("{\"id\":\"7\",\"firstName\":\"Kanye\",\"lastName\":\"West\"}", Encoding.UTF8, "application/json"));

1 Ответ

0 голосов
/ 15 октября 2018

Установить заголовок Content-Type, используя конструктор класса StringContent.

...