ASP.NET Web API模型绑定将JS对象空串转null如何保留原始值
ASP.NET Web API空字符串转null问题解决方案
这个问题是ASP.NET Web API模型绑定的默认行为导致的,你可以从服务端和前端两个方向解决,优先推荐服务端配置:
服务端解决方案(最可靠)
全局配置(对所有接口生效)
在.NET Framework版本的Web API中,找到App_Start/WebApiConfig.cs文件,在Register方法中添加如下配置,修改JSON序列化规则,禁止将空字符串转换为null:
public static void Register(HttpConfiguration config) { // 原有配置保留,新增下面的内容 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add( new Newtonsoft.Json.Converters.StringConverter() ); config.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate; }
如果是ASP.NET Core版本的Web API,在Program.cs中添加配置:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringConverter()); options.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.IgnoreAndPopulate; });
单属性配置(仅对指定字段生效)
如果你只想修改部分字段的转换逻辑,直接在模型类对应的属性上添加[DisplayFormat(ConvertEmptyStringToNull = false)]特性即可:
public class UserModel { public int ID { get; set; } public string Fname { get; set; } // 禁止该字段空字符串转null [DisplayFormat(ConvertEmptyStringToNull = false)] public string Mname { get; set; } public string Lname { get; set; } }
前端JavaScript解决方案
如果暂时无法修改服务端代码,可以用临时兼容方案:
- 提交前将空字符串替换为前后端约定的特殊占位符,比如
"||EMPTY||",服务端接收后再将占位符替换回空字符串即可。 - 不推荐给空字符串加空格伪装成非空值,会对后续业务逻辑判断产生额外的校验成本,容易引发BUG。
内容的提问来源于stack exchange,提问作者kuntal
相关产品推荐
相关产品推荐

