3

asp.net mvc webApi を使用したのはこれが初めてで、ProductViewModel というパラメーターを持つ Post/Put メソッドがあります。RequiredこのViewModelの一部のプロパティには、などの検証するデータ注釈がありStringLenghtます...私は次のようなポストメソッドを持っています:

public HttpResponseMessage Post([FromBody] ProductViewModel value)
{
   if (ModelState.IsValid)
   {
      // persist data here...

      return Request.CreateResponse(HttpStatusCode.OK);
   }

   return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors());
}

エラーGetErrors()を取得してクライアントに渡すための拡張機能としてメソッドがあります。List<>私の質問は: ModelState が機能しないのはなぜですか?

ビューモデルのプロパティに null を渡すと、この検証は機能しません。 IsValidプロパティは常にtrue. これを回避して MVC などの ModelState を機能させる方法はありますか?

私のモデルは次のようになります。

public class ProductViewModel
{
    [Display(ResourceType = typeof(Resources.Global), Name = "Name")]
    [Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Required")]
    [StringLength(100, ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Range")]
    public string Name { get; set; }

    [Display(ResourceType = typeof(Resources.Global), Name = "ShortName")]
    [Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Required")]
    [StringLength(20, ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Range")]
    public string ShortName { get; set; }
}

ありがとうございました。

4

1 に答える 1

1

リクエストの一部として Content-Type を渡していることを確認していただけますか? (コンテンツタイプが渡されない場合、特定のタイプのデフォルト値が設定され、モデルの状態にエラーは発生しません...このバグは最近修正されました)。

また、次のこともできます。

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)
于 2013-03-20T19:07:00.907 に答える