【发布时间】:2016-12-23 04:30:26
【问题描述】:
我创建了一个简单的自定义 JsonConverter - 代码如下 - 来简单地更改通过无效日期时生成的错误消息。
这用于 ASP.Net MVC 站点以及用于 Ajax 调用的 ASP.Net Web API。
我正在通过 ajax 发布 DTO(下面的部分代码)。当我在本地环境中执行此操作时,一切都会正常运行;当日期无效时,我会收到错误请求以及正确的错误消息
当我将它发布到生产服务器时,它会被完全忽略,我会收到默认的 ModelState 错误列表。
我已经验证了我的 web.config 和 Newtonsoft 版本;它们在本地和服务器上都是一样的。
为什么转换器在生产中会被忽略?
转换器是:
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; }
.....
【问题讨论】:
-
我不认为所有版本的 asp.net-mvc 都使用 Json.NET 进行模型绑定。参见例如How do I sub in JSON.NET as model binder for ASP.NET MVC controllers?。
-
我的部署包含 .net 库; AFAIK,您不需要专门在服务器上安装“MVC”
标签: asp.net asp.net-mvc asp.net-web-api json.net