如何调试ASP.NET Core WebAPI拒绝POST请求?

时间:2018-10-13 21:23:09

标签: c# asp.net-web-api asp.net-core .net-core asp.net-core-webapi

我试图将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"));

1 个答案:

答案 0 :(得分:1)

使用StringContent类的构造函数设置Content-Type标头。