【发布时间】:2019-02-21 14:36:19
【问题描述】:
我目前正在尝试接受对接受以下模型的 .NET Core Web API 端点的 POST 请求:
public class OrderPost
{
[Required]
public string DeliveryStreet { get; set; }
public string DeliveryBuilding { get; set; }
[Required]
public string DeliveryCity { get; set; }
[Required]
public string DeliveryProvince { get; set; }
[Required]
public string DeliveryPostalCode { get; set; }
[Required]
public string CardName { get; set; }
[Required]
public string CardNumber { get; set; }
[Required]
public string CardExpiry { get; set; }
[Required]
public long CardCvv { get; set; }
[Required]
public List<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public long Id { get; set; }
public string Category { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Uri ImageUrl { get; set; }
public long Price { get; set; }
public DateTimeOffset CreatedAt { get; set; }
public DateTimeOffset UpdatedAt { get; set; }
public long Quantity { get; set; }
}
当我删除 List<OrderItem> 并在没有 List 的情况下发布数据时,调用工作完美。一旦我将列表添加回来并尝试POST 数据,我就会收到400 Bad Request 错误。我有一种感觉,我只是缺少列表中的某些属性或某些东西。我发布的 JSON 是有效的,我仔细检查了。关于可能导致此问题的任何想法?
这是我要发布的 JSON:
{
"deliveryStreet": "Test street",
"deliveryBuilding": "",
"deliveryCity": "TEst",
"deliveryProvince": "TEst",
"deliveryPostalCode": "0852",
"cardName": "Jane Jones",
"cardNumber": "4711 1000 0000 0000",
"cardExpiry": "05 / 20",
"cardCvv": "123",
"orderItems": [{
"id": 1,
"category": null,
"name": "Test",
"description": "Test test test",
"imageUrl": "http://google.com/",
"price": 625,
"createdAt": "2019-02-21T13:25:56.709192",
"updatedAt": "2019-02-21T13:25:56.709192",
"quantity": 5
}]
}
这是我尝试POST 的端点:
[HttpPost]
public IActionResult Post([FromBody]OrderPost data)
{
//Get the credit card type off of the number
var type = StringUtilities.GetCardTypeFromNumber(data.CardNumber);
//Check if valid type was found
if (type == "UNKNOWN")
return BadRequest("Unknown credit card type");
float total = 0;
.................
}
【问题讨论】:
-
你的服务器日志说什么?您应该能够找到一些关于为什么触发 400 的信息。
-
400 表示 请求 错误。它与 JSON 序列化无关。您尚未发布任何服务器端代码或请求示例,甚至 JSON 字符串示例,因此无法提供帮助。检查 Web 服务器的日志,使用浏览器的开发工具或调试代理(如 Fiddler)查看实际发送到服务器的内容。
-
@Tachyon 您是否尝试过调试该代码?发生了什么?输出窗口说什么?
-
@Tachyon 再次检查您的浏览器日志并使用 Fiddler 查看发送的内容。
400表示请求从未进入操作。服务器本身将其作为错误请求拒绝。也许内容类型是错误的?您是如何提出请求的? -
@PanagiotisKanavos 或发出请求:
return BadRequest("Unknown credit card type");或发出请求,但新的 ASP.NET Core WebAPI 属性完成的 ModelState 验证不成功
标签: c# asp.net-core json.net