asp.net - 部署时自定义 JsonConverter 被忽略

标签 asp.net asp.net-mvc asp.net-web-api json.net

我创建了一个简单的自定义 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 - 部署时自定义 JsonConverter 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980984/

相关文章:

c# - SQL 日期输入工作正常,但现在出现错误 站点位于 Azure 上

c# - inetsvr 的 appcmd 在发出后发出错误

javascript - 将文本框值与模型属性 mvc 进行比较

c# - 跟踪保存在 "live"进度条中的数据库的进度 asp.net mvc

c# - 将 JSON 绑定(bind)到模型时使 WebAPI 拒绝未知字段

asp.net-mvc - 对于 Asp.Net MVC 4 Web 应用程序 + API + Windows 服务,什么是放置验证的正确位置 - 在 Model 或 ViewModel 上?

asp.net - 是否需要授予应用程序池身份对Web文件夹的读取权限?

c# - 使用c#显示pdf文件的特定页面

asp.net - IIS 7 上的条件 https 重定向

c# - 自托管 ASP.NET Web API 的 SSL 证书绑定(bind)在重启后丢失