【问题标题】:Empty string not being converted to null when passing JSON object to controller将 JSON 对象传递给控制器​​时,空字符串未转换为 null
【发布时间】:2018-09-07 13:08:32
【问题描述】:

在 ASP.NET Core 2.1 中,我注意到这个问题基本上是相反的:string.empty converted to null when passing JSON object to MVC Controller

当我将JSON 对象发送回具有空字符串属性的控制器时,它们不再自动转换为null

以这个JS对象为例:

 var person = {firstName:"", lastName:""}; 

        $http.post("/app/index", person)
            .then(function (response) {
                // Success
            }, function (error) {
                // Failure
            })

当绑定到控制器中的模型时,带有空字符串的属性保持为空字符串:

    //
    // POST: /App
    [HttpPost]
    public async Task<ActionResult> Index([FromBody] AppFormDTO data)
    {
       ....
    }

当将此对象保存到数据库时,我更愿意使用 null 值而不是一堆空字符串。

他们是否更改了ASP.NET Core 2.1 中的DefaultModelBinder?如果是这样,我如何将其更改回 MVC5 中的状态——string.empty 自动转换为 null

更新,添加我的AppFormDTO模型,供参考:

public class AppFormDTO
{
    public string firstName{ get; set; }
    public string lastName{ get; set; }
}

【问题讨论】:

  • 你传递的是空字符串而不是空值。
  • 对,但是在ASP.NET MVC5中,当传入一个空字符串时,会自动转换为null。我正在将 MVC5 项目转换为 ASP.NET Core 2.1,我想知道是否可以在新框架中保留该功能?
  • 你应该传递空值或者可以使用属性属性如果值为空那么它将为空

标签: c# asp.net json ajax asp.net-core-2.1


【解决方案1】:

将此添加到您的 PERSON 模型中的名字/姓氏:

[DisplayFormat(ConvertEmptyStringToNull = false)]
... the model values 

【讨论】:

  • 我已经尝试将这个集合添加到falsetrue,似乎没有什么区别,它仍然是一个空字符串而不是 null。
【解决方案2】:

遵循 ASP.NET Core 的source code

 if (bindingContext.ModelType == typeof(string))
 {
      // Already have a string. No further conversion required but handle ConvertEmptyStringToNull.
      if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && string.IsNullOrWhiteSpace(value))
      {
           model = null;
      }
      else
      {
           model = value;
      }
 }

默认行为设置为空字符串为空。 如果您输入了不正确的ConvertEmptyStringToNull = false,请重新检查您的模型AppFormDTO

【讨论】:

  • 我添加了我的 AppFormDTO 模型以供参考,它不使用 ConvertEmptyStringToNull 属性。你能让它正常工作吗?我在想 JSON 对象的默认模型绑定会覆盖这个。特别是文档中提到的JSONInputFormatterdocs.microsoft.com/en-us/aspnet/core/mvc/models/…),但我不知道如何修改它。
【解决方案3】:

仔细检查 json 对象的这些属性是否为 null 而不是空字符串...

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2014-06-10
    相关资源
    最近更新 更多