我正在尝试向我创建的一个非常简单的测试 API 发送 POST 请求,但它只是在请求到达 Controller 方法中的断点并返回 400 错误之前拒绝该请求。
从 Postman 发出的相同请求工作正常,而我用来调用 API 的相同代码在另一个 API 上工作正常。理想情况下,我想比较我的代码发出的请求和 Postman 发出的请求,但我不知道这是否可能。
这不是模型问题或路由问题。
Controller 方法:
[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"));
最佳答案
使用 StringContent 类的构造函数设置 Content-Type header 。
关于c# - 如何调试拒绝 POST 请求的 ASP.NET Core WebAPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52797457/