2016-08-16 9 views
3

無効な日付が渡されたときに生成されるエラーメッセージを単純に変更するために、以下の簡単なカスタムJsonConverter - コードを作成しました。配備時にカスタムJsonConverterが無視される

これは、ASP.Net MVCサイトで使用されており、ASP.Net Web API for Ajaxコールでも使用されています。

私はajax経由でDTO(以下の部分コード)を投稿しています。ローカル環境でこれを行うと、すべてが機能するはずです。日付が無効な場合は、正しいエラーメッセージとともに悪い要求を受け取ります。

これを実働サーバーに公開すると、完全に無視され、デフォルトのModelStateエラーの一覧が表示されます。

web.configとNewtonsoftのバージョンを確認しました。ローカルでもサーバーでも同じです。

なぜ本番環境でコンバータが無視されるのですか?

Converterは次のとおりです。私は私のDTOでそれを使用しています

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)); 
    } 
} 

として:

..... 
    [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を使用しているとは思いません。たとえば、[ASP.NET MVCコントローラのモデルバインダとしてJSON.NETを継承するにはどうすればいいですか?](http://stackoverflow.com/questions/20980241/how-do-i-sub-in-json-net- as-model-binder-asp-net-mvc-controllers)を使用します。 – dbc

+0

私の展開には.netライブラリが含まれています。 AFAIKあなたはサーバー上で具体的には、 'MVC'をインストールする必要はありません – Darren

答えて

0

運用サーバーの日付の形式を確認し、それはあなたの開発環境とは異なる場合があります。したがって、有効な日付形式を入力することができます

+0

ちょうどチェックしました。彼らは同じです。 – Darren

関連する問題