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