c# - 如何调试拒绝 POST 请求的 ASP.NET Core WebAPI?

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

我正在尝试向我创建的一个非常简单的测试 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/

相关文章:

javascript - 使用 promise Q 库实现异步 javascript 编程的最佳实践

c# - HttpWebRequest WebException 协议(protocol)错误

c# - AES加密方式面临内存泄露

c# - 如何在 Silverlight 中获取屏幕工作区(不是整个屏幕大小)的大小?

c# - 如何遍历类字段并设置属性

javascript - 在特定设置中未调用 WebApi Controller 中的 SignalR 方法

c# - 静态属性和构造函数注入(inject)潜在的内存泄漏

c# - Custom Tag Helper - 替换 html 标签

asp.net-core - ASP.NET核心2 : missing ApplicationInsights

c# - Cosmos DB 中的并行更新数据