2016-08-16 41 views
3

我已經創建了一個簡單的自定義JsonConverter(下面的代碼)來簡單地更改傳遞無效日期時生成的錯誤消息。自定義JsonConverter在部署時被忽略

這是用於ASP.Net MVC網站和ASP.Net Web API的Ajax調用。

我通過ajax發佈了DTO(部分代碼如下)。當我在我的本地環境中這樣做時,所有功能都應該如此;當日期無效時,我收到一個錯誤的請求以及正確的錯誤信息

當我將此發佈到生產服務器時,它完全被忽略,我收到默認的ModelState錯誤列表。

我已驗證我的web.config和Newtonsoft版本;他們在本地和服務器上都是一樣的。

爲什麼轉換器在生產時會被忽略?

Converter是:

public class CustomDateValidationConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return true; 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     if (string.IsNullOrEmpty(reader.Value.ToString())) 
      return null; 

     DateTime d; 
     DateTime.TryParse(reader.Value.ToString(), out d); 
     if (d == null || d == DateTime.MinValue) 
      throw new Exception(string.Format("{0} is invalid", reader.Path.AddSpacesBeforeUppercase(true))); 

     return d; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     serializer.Serialize(writer, DateTime.Parse(value as string)); 
    } 
} 

我在我的DTO使用它作爲:

..... 
    [JsonConverter(typeof(CustomDateValidationConverter))] 
    [DateLessThanOrEqual("CreateDateTo", "Create Date From must be on or before Create Date To")] 
    public DateTime? CreateDateFrom { get; set; } 
..... 
+0

我不認爲所有版本的asp.net-mvc都使用Json.NET進行模型綁定。請參閱例如[如何將JSON.NET作爲ASP.NET MVC控制器的模型綁定器?](http://stackoverflow.com/questions/20980241/how-do-i-sub-in-json-net-作爲模型 - 粘合劑 - 用於-ASP淨MVC-控制器)。 – dbc

+0

我的部署包含.net庫; AFAIK你不需要在服務器上專門安裝'MVC' – Darren

回答

0

檢查生產服務器的日期格式,它可以從你的開發環境不同。所以它可能接受你的輸入日期格式爲有效

+0

剛剛檢查過。他們是一樣的。 – Darren