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

Asp.net mvc Asp.Net MVC模型绑定到属性类型System.Uri时遇到Mono问题,asp.net-mvc,nginx,mono,Asp.net Mvc,Nginx,Mono,在VisualStudio上调试时,它的性能非常好。即使没有默认构造函数,也只有参数化的 但是当托管在linux服务器中的nginx实例上时。它抛出System.UriFormatException:绝对URI太短 尽管我已经实现了一种变通方法,将其绑定到字符串类型,然后将其转换为Uri。但这不是一种更干净的方式 有人对这种行为有什么想法吗?好的,我终于明白了。在DefaultModelBinder中执行GetPropertyValue时,它使用Object.Equals(obj,string.

在VisualStudio上调试时,它的性能非常好。即使没有默认构造函数,也只有参数化的

但是当托管在
linux服务器中的
nginx
实例上时。它抛出
System.UriFormatException:绝对URI太短

尽管我已经实现了一种变通方法,将其绑定到字符串类型,然后将其转换为Uri。但这不是一种更干净的方式


有人对这种行为有什么想法吗?

好的,我终于明白了。在DefaultModelBinder中执行
GetPropertyValue
时,它使用
Object.Equals(obj,string.empty)
将对象与string.empty进行内部比较

当obj是System.Uri类型时,作为Object.Equals调用Uri.Equals,然后尝试将emtoy字符串类型转换为Uri类型,这会引发异常

请参阅中的代码片段

解决方案: 为类型Uri和BindModel集中创建自定义绑定器

bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;