gpt4 book ai didi

asp.net-mvc - Controller 操作未从 JSON 读取 Guid POST

转载 作者:行者123 更新时间:2023-12-03 20:20:55 26 4
gpt4 key购买 nike

我有一个 Controller Action 声明为:

[Route("api/person")]
[HttpPost]
public async Task<IActionResult> Person([FromBody] Guid id) { ... }

我发帖给它:
POST /api/person HTTP/1.1
Host: localhost:5000
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 747a5d76-398c-e1c7-b948-b276bb24976c

{
"id": "b85f75d8-e6f1-405d-90f4-530af8e060d5"
}

我的 Action 被击中了,但是 Guid它接收到的始终是 Guid.Empty值(value)(即:它没有得到我传递的值(value))。

注意,如果我使用 url 参数而不是 [FromBody],这可以正常工作,但我想改用 http 帖子的正文。

最佳答案

Web API documentation 中所述:

By default, Web API uses the following rules to bind parameters:

  • If the parameter is a “simple” type, Web API tries to get the value from the URI. Simple types include the .NET primitive types (int, bool, double, and so forth), plus TimeSpan, DateTime, Guid, decimal, and string, plus any type with a type converter that can convert from a string. (More about type converters later.)
  • For complex types, Web API tries to read the value from the message body, using a media-type formatter.


部分的同一篇文章中进一步了解使用 [FromBody] 您可以看到可以添加属性的示例 [FromBody]在您的参数上,以便绑定(bind)请求正文中的值,就像您所做的那样。但这里有一个问题 - 示例显示,在这种情况下,请求正文应该包含原始值,而不是 JSON 对象。

因此,在您的情况下,您有两个选择:

第一个选项是更改您的请求以提供原始值而不是 JSON 对象
POST /api/person HTTP/1.1
Host: localhost:5000
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 747a5d76-398c-e1c7-b948-b276bb24976c

"b85f75d8-e6f1-405d-90f4-530af8e060d5"

第二种选择是提供具有单个属性的复杂对象并将其用作参数:
public class Request
{
public Guid Id { get; set; }
}

[Route("api/person")]
[HttpPost]
public async Task<IActionResult> Person([FromBody] Request request) { ... }

关于asp.net-mvc - Controller 操作未从 JSON 读取 Guid POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com