1

この記事ASP.NET - Model Validationによると、モデルのデータ注釈に基づいて、モデル バインド中に発生したエラーの適切な説明が得られるはずです。検証が機能している間、適切なエラーが表示されるのではなく、JSON 解析エラーが表示されます。

これが私のモデルです:

public class SimplePoint
{
    [Required(ErrorMessage="MonitorKey is a required data field of SimplePoint.")]
    public Guid MonitorKey { get; set; }

    public int Data { get; set; }
}

ここに私の検証フィルターがあります:

public class ModelValidationFilterAttribute : ActionFilterAttribute
{
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            if (actionContext.ModelState.IsValid == false)
            {
                actionContext.Response = actionContext.Request
                    .CreateErrorResponse(HttpStatusCode.BadRequest,                                                                                                
                        actionContext.ModelState);
            }
        }
    }

この投稿で特定されているように、InvalidModelValidationProvider を削除する必要がありました: ASP.NET - 問題- このコードは Global.asax Application_Start メソッドに存在します:

GlobalConfiguration.Configuration.Services.RemoveAll(
    typeof (System.Web.Http.Validation.ModelValidatorProvider),
    v => v is InvalidModelValidatorProvider);

Fiddler を使用した私のリクエストは次のとおりです。

POST http://localhost:63518/api/simplepoint HTTP/1.1
User-Agent: Fiddler
Host: localhost:63518
Content-Length: 28
Content-Type: application/json; charset=utf-8

{"MonitorKey":"","data":123}

そして、これが私のコントローラーからの私の応答です:

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcTG9jYWwgVmlzdWFsIFN0dWRpbyBwcm9qZWN0c1xKaXREYXNoYm9hcmRcSml0RGFzaGJvYXJkLldlYi5Nb25pdG9    ySG9zdFxhcGlcc2ltcGxlcG9pbnQ=?=
X-Powered-By: ASP.NET
Date: Fri, 22 Mar 2013 21:55:35 GMT
Content-Length: 165

{"Message":"The request is invalid.","ModelState":{"data.MonitorKey":["Error converting value \"\" to type 'System.Guid'. Path 'MonitorKey', line 1, position 16."]}}

データ注釈で特定されたエラー メッセージが表示されないのはなぜですか (つまり、「MonitorKey は SimplePoint の必須データ フィールドです」)。検証フィルターで ModelState を分析すると、モデル バリデーターによって ErrorMessage が取得されていません。

4

1 に答える 1

2

答えは、モデル プロパティを null 可能にするのと同じくらい簡単なようです。このようにして、JSON 検証に合格し、データ注釈に基づくデータ モデルの検証が開始されます。

public class SimplePoint
{
    [Required(ErrorMessage="MonitorKey is a required data field of SimplePoint.")]
    public Guid? MonitorKey { get; set; }

    [Required]
    public int? Data { get; set; }
}
于 2013-03-22T22:12:23.383 に答える