在Visual Studio上进行调试时,它非常精细。即使没有默认构造函数,也只有参数化。
但托管在nginx
的{{1}}个实例上。它抛出linux server
虽然我已经实现了将它绑定到字符串类型然后将其转换为Uri的工作。但它不是一种更清洁的方式。
有没有人对这种行为有任何想法?
答案 0 :(得分:0)
好的,我终于得到了这个问题。在DefaultModelBinder中执行GetPropertyValue
时,它会使用Object.Equals(obj, string.Empty)
将Object与string.empty进行比较。
当obj是System.Uri类型时抛出异常,因为Object.Equals调用Uri.Equals,然后尝试将类型转换为emriy字符串类型为Uri。
请参阅https://github.com/mono/mono/blob/master/mcs/class/System.Web.Mvc3/Mvc/DefaultModelBinder.cs
的摘要if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && Object.Equals(value, String.Empty))
{
return null;
}
解决方案: 为类型Uri创建自定义绑定器,并在BindModel内部设置
bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;