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

标签 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?

最佳答案

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

这是受 https://gist.github.com/nakamura-to/4029706 的启发

关于c# - 将 DisplayFormatAttribute.ConvertEmptyStringToNull 的默认值设置为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308201/

相关文章:

c# - 为异步完成的事件处理程序传递附加变量

c# - 我怎样才能有效地跳出 C# 中的双循环?

c# - 如何从 facebook 登录 API 获取手机号码?

c# - Web API 2 Owin 刷新 token 不起作用并在其到期时间之前返回 invalid_grant

entity-framework-6 - 在 ASP.Net Core 中间件中调用服务/存储库方法

c# - 启动后台任务 ASP.NET MVC 4.5

c# - 通用类文件名约定

c#单元测试模拟类属性

c# - HttpContext.User 设置正确,然后被下一个请求丢失/替换

c# - 如何使用NEST准确表示此ElasticSearch查询?