我试图将POST请求发送到我已经完成的一个非常简单的测试API,但是它只是在该请求到达控制器方法中的断点之前拒绝了该请求,并返回400错误。
从Postman发出的相同请求可以正常工作,而我用来调用该API的相同代码在另一个API上也可以正常工作。理想情况下,我想将我的代码发出的请求与Postman发出的请求进行比较,但是我什至不知道这样做是否可能。
这不是模型问题或路由问题。
控制器方法:
[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"));
答案 0 :(得分:1)
使用StringContent类的构造函数设置Content-Type标头。