Asp.Net MVC模型绑定到属性类型System.Uri时遇到Mono问题

时间:2014-06-09 10:56:25

标签: asp.net-mvc nginx mono

在Visual Studio上进行调试时,它非常精细。即使没有默认构造函数,也只有参数化。

但托管在nginx的{​​{1}}个实例上。它抛出linux server

虽然我已经实现了将它绑定到字符串类型然后将其转换为Uri的工作。但它不是一种更清洁的方式。

有没有人对这种行为有任何想法?

1 个答案:

答案 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;