将数据发送到 ASP.NET Core API 时邮递员状态 400 Bad Request
Postman status 400 Bad Request when sending data to ASP.NET Core API
我目前遇到一个问题,Postman 给出了 400 Bad Request 响应,告诉我某些字段是必需的。
这是我用 Postman 发送的 json 对象:
{
"Id": "2",
"Content": "Een bericht",
"Likes": 0,
"PublishDate": "2022-05-05",
"User_Id": "1"
}
这是 post 人的回复:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-c29c164c5467d68f12bdc49bec8b1b09-f14521a6d718ce63-00",
"errors": {
"Id": [
"The Id field is required."
],
"Content": [
"The Content field is required."
],
"User_Id": [
"The User_Id field is required."
]
}
}
我用 ASP.NET 核心创建了 API,我将请求发送到该核心。在 API 中,我有我的模型:
public class Tweet
{
public string Id { get; private set; }
public string Content { get; private set; }
public int Likes { get; private set; }
public DateTime PublishDate { get; private set; }
public string User_Id { get; private set; }
public Tweet()
{
}
public Tweet(string id, string content, int likes, DateTime publishDate, string user_Id)
{
Id = id;
Content = content;
Likes = likes;
PublishDate = publishDate;
User_Id = user_Id;
}
}
这是我使用 post 方法的控制器:
[Route("api/[controller]")]
[ApiController]
public class TweetController : ControllerBase
{
private ITweetRepo _repository;
public TweetController(ITweetRepo repo)
{
_repository = repo;
}
// POST api/<TweetController>
[HttpPost]
public ActionResult<Tweet> PostTweet([FromBody] Tweet tweet)
{
try
{
if (tweet == null)
{
return BadRequest("Tweets' message is null or message invalid");
}
var createdTweet = _repository.CreateTweet(tweet);
return CreatedAtAction(nameof(PostTweet), createdTweet);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
经过一些调查,我注意到 Postman 的回复所谈论的字段是不可为空的属性。
也许 visual studio 中的这些警告与我的问题有关?
我非常感谢任何建议。提前谢谢你
从推文中删除两个构造函数 class。当 Tweet 对象被实例化时,这些值被覆盖。
必须将属性设置为可为空
public int? Likes {get;set;}
构造函数可以在 post
中接受空值
在 .NET 6 中,non-nullable
属性 必须是必需的,否则模型验证将失败,您将收到 400 Bad Request 错误。
在您的方案中,您使用 private
setter,这使得 属性 只读 。也就是说无论你是否设置属性的值,模型总是无法绑定成功,导致模型验证失败。
如果你真的想将数据发送到后端,你需要删除私有访问修饰符:
public class Tweet
{
public string Id { get; set; }
public string Content { get; set; }
public int Likes { get; set; }
public DateTime PublishDate { get; set; }
public string User_Id { get; set; }
public Tweet()
{
}
public Tweet(string id, string content, int likes, DateTime publishDate, string user_Id)
{
Id = id;
Content = content;
Likes = likes;
PublishDate = publishDate;
User_Id = user_Id;
}
}
我目前遇到一个问题,Postman 给出了 400 Bad Request 响应,告诉我某些字段是必需的。 这是我用 Postman 发送的 json 对象:
{
"Id": "2",
"Content": "Een bericht",
"Likes": 0,
"PublishDate": "2022-05-05",
"User_Id": "1"
}
这是 post 人的回复:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-c29c164c5467d68f12bdc49bec8b1b09-f14521a6d718ce63-00",
"errors": {
"Id": [
"The Id field is required."
],
"Content": [
"The Content field is required."
],
"User_Id": [
"The User_Id field is required."
]
}
}
我用 ASP.NET 核心创建了 API,我将请求发送到该核心。在 API 中,我有我的模型:
public class Tweet
{
public string Id { get; private set; }
public string Content { get; private set; }
public int Likes { get; private set; }
public DateTime PublishDate { get; private set; }
public string User_Id { get; private set; }
public Tweet()
{
}
public Tweet(string id, string content, int likes, DateTime publishDate, string user_Id)
{
Id = id;
Content = content;
Likes = likes;
PublishDate = publishDate;
User_Id = user_Id;
}
}
这是我使用 post 方法的控制器:
[Route("api/[controller]")]
[ApiController]
public class TweetController : ControllerBase
{
private ITweetRepo _repository;
public TweetController(ITweetRepo repo)
{
_repository = repo;
}
// POST api/<TweetController>
[HttpPost]
public ActionResult<Tweet> PostTweet([FromBody] Tweet tweet)
{
try
{
if (tweet == null)
{
return BadRequest("Tweets' message is null or message invalid");
}
var createdTweet = _repository.CreateTweet(tweet);
return CreatedAtAction(nameof(PostTweet), createdTweet);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
经过一些调查,我注意到 Postman 的回复所谈论的字段是不可为空的属性。
我非常感谢任何建议。提前谢谢你
从推文中删除两个构造函数 class。当 Tweet 对象被实例化时,这些值被覆盖。
必须将属性设置为可为空
public int? Likes {get;set;}
构造函数可以在 post
中接受空值在 .NET 6 中,non-nullable
属性 必须是必需的,否则模型验证将失败,您将收到 400 Bad Request 错误。
在您的方案中,您使用 private
setter,这使得 属性 只读 。也就是说无论你是否设置属性的值,模型总是无法绑定成功,导致模型验证失败。
如果你真的想将数据发送到后端,你需要删除私有访问修饰符:
public class Tweet
{
public string Id { get; set; }
public string Content { get; set; }
public int Likes { get; set; }
public DateTime PublishDate { get; set; }
public string User_Id { get; set; }
public Tweet()
{
}
public Tweet(string id, string content, int likes, DateTime publishDate, string user_Id)
{
Id = id;
Content = content;
Likes = likes;
PublishDate = publishDate;
User_Id = user_Id;
}
}