在Visual Studio上進行調試時,它非常好。即使沒有默認的構造函數,也只有參數化的。Asp.Net MVC模型綁定到屬性類型System.Uri遇到Mono問題
但是託管在linux server
的nginx
實例中。它引發System.UriFormatException: Absolute URI is too short
雖然我已經實現了將其綁定到字符串類型然後將其轉換爲Uri的工作。但它不是一個更乾淨的方式。
有沒有人對此行爲有任何想法?
在Visual Studio上進行調試時,它非常好。即使沒有默認的構造函數,也只有參數化的。Asp.Net MVC模型綁定到屬性類型System.Uri遇到Mono問題
但是託管在linux server
的nginx
實例中。它引發System.UriFormatException: Absolute URI is too short
雖然我已經實現了將其綁定到字符串類型然後將其轉換爲Uri的工作。但它不是一個更乾淨的方式。
有沒有人對此行爲有任何想法?
好吧,我終於得到了問題。在DefaultModelBinder中執行GetPropertyValue
時,它使用Object.Equals(obj, string.Empty)
將Object與string.empty進行比較。
這引發異常,而obj類型System.Uri,因爲Object.Equals調用Uri.Equals,然後嘗試將類型轉換爲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;