我刚刚将一堆 Web 服务转换为 Web API2。现在,当浏览器发送一个空字符串并将我的代码转换为 null 时,我的 C# 代码崩溃了。我研究了全局解决方案,但没有找到适合我的解决方案。
我当然可以为所有 Web API 模型中的每个字符串手动设置它,但我有很多模型,因此更喜欢全局解决方案。
来过这里:string.empty converted to null when passing JSON object to MVC Controller和其他页面,并尝试实现每个解决方案,但无济于事。
如何将 ConvertEmptyStringToNull 的默认值全局设置为 false?
最佳答案
您需要将 ModelMetadataProvider
替换为将 ConvertEmptyStringToNull
设置为 false
如:
public class EmptyStringAllowedModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(CachedDataAnnotationsModelMetadata prototype, Func<object> modelAccessor)
{
var metadata = base.CreateMetadataFromPrototype(prototype, modelAccessor);
metadata.ConvertEmptyStringToNull = false;
return metadata;
}
protected override CachedDataAnnotationsModelMetadata CreateMetadataPrototype(IEnumerable<Attribute> attributes, Type containerType, Type modelType, string propertyName)
{
var metadata = base.CreateMetadataPrototype(attributes, containerType, modelType, propertyName);
metadata.ConvertEmptyStringToNull = false;
return metadata;
}
}
您可以像这样在您的 WebApiConfig 中注册:
config.Services.Replace(typeof(ModelMetadataProvider), new EmptyStringAllowedModelMetadataProvider());
关于c# - 将 DisplayFormatAttribute.ConvertEmptyStringToNull 的默认值设置为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308201/