我刚刚将一堆Web服务转换为Web API2。现在,当浏览器发送一个空字符串并且我输入的代码转换为null时,我的C#代码就会爆炸。我研究过全球解决方案,但没有找到我为我工作的方法。
我当然可以为我所有的Web API模型中的每个字符串手动设置它,但我有很多模型,所以更喜欢全局解决方案。
在这里:string.empty converted to null when passing JSON object to MVC Controller和其他页面并尝试实施每个解决方案,但无济于事。
如何将ConvertEmptyStringToNull的默认值全局设置为false?
答案 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;
}
答案 1 :(得分:0)
您可以使用Postsharp尝试Aspect模式,并在Aspect下面声明 它将适用于整个解决方案。为我工作。
INSTALL4j_LOG=yes