【问题标题】:Model [FromBody] and Guid mapping in Web Api 2Web Api 2 中的模型 [FromBody] 和 Guid 映射
【发布时间】:2014-11-26 14:42:24
【问题描述】:

我正在实现 web api 2,我发现 Guid 映射的奇怪行为。这是我的问题定义

这是我的模型示例

public class MyModel
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

我在控制器上执行以下操作,其中我将 MyModel 作为输入 [FromBody]

[HttpPost, Route("create")]
public IHttpActionResult Create([FromBody]MyModel model)
{
    // some implementation
}

一切正常,而不是 Guid 映射。当我在请求正文中发布新 MyModel 的 JSON 时:

{
    "Id":"1d93dfa2-sb34-403d-a766-bdcf1cf47a71",
    "Name":"name"
}

名称已正确设置为“名称”,但每次生成的 Guid 都是新的 Guid。

请问这个问题是什么原因造成的?如何设置正确的 Guid 值映射?

【问题讨论】:

    标签: c# guid asp.net-web-api2


    【解决方案1】:

    问题是1d93dfa2-sb34-403d-a766-bdcf1cf47a71 不是有效的Guid。

    Guid 仅包含 0-9a-f,而您的字符串中包含 s,因此不是有效的 Guid,因此模型绑定器不会将任何内容绑定到模型中的该属性。

    【讨论】:

    • 是的,你是对的。我错误地修改了 a -> s 而不是 a -> d。不过,在这种情况下,我希望异常不是新的 guid。
    • 当您说“新 guid”时,是 9a3fb67d-cc00-409e-b7e8-5f4c8ef806ac(或类似名称)还是 00000000-0000-0000-0000-000000000000
    • @dav_i 我已经测试过了,它是 00000000-0000-0000-0000-000000000000,所以它不是一个新的 Guid,而是一个空的 Guid。
    • 是的,有道理,使用 binder 无法检测到的任何属性类型的默认值。
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多