将DisplayFormatAttribute.ConvertEmptyStringToNull的默认值设置为false

时间:2013-12-01 02:53:10

标签: c# asp.net-mvc-5 asp.net-web-api2

我刚刚将一堆Web服务转换为Web API2。现在,当浏览器发送一个空字符串并且我输入的代码转换为null时,我的C#代码就会爆炸。我研究过全球解决方案,但没有找到我为我工作的方法。

我当然可以为我所有的Web API模型中的每个字符串手动设置它,但我有很多模型,所以更喜欢全局解决方案。

在这里:string.empty converted to null when passing JSON object to MVC Controller和其他页面并尝试实施每个解决方案,但无济于事。

如何将ConvertEmptyStringToNull的默认值全局设置为false?

2 个答案:

答案 0 :(得分:4)

您需要将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; } }

如:

config.Services.Replace(typeof(ModelMetadataProvider), new EmptyStringAllowedModelMetadataProvider());

您将在WebApiConfig中注册,如:

#hero #background { background: #000; height: 150px; opacity: 0.5; } #hero h1, #hero h2 { text-align: center; margin-top: -80px; }

这受到https://gist.github.com/nakamura-to/4029706

的启发

答案 1 :(得分:0)

您可以使用Postsharp尝试Aspect模式,并在Aspect下面声明 它将适用于整个解决方案。为我工作。

INSTALL4j_LOG=yes