2016-08-16 84 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