2017-07-07 8 views
0

ASP.NET Coreが有効なアクションパラメータ[FromBody]を検証しないのはなぜですか?下の例では、SomeClassのパラメーターvalueは検証されません。 ModelState辞書には表示されません(idのみ)。 this.ModelState.IsValidは、Nameプロパティが2文字より長い文字列に設定されていても、常にtrueです。投稿されたアクションパラメータのModelValidationが発生しない

Even TryValidateModelでも、リクエストボディに含まれる内容(JSON)に関係なく、trueになります。

Sample Repo here

public class Startup 
{ 
    public IConfigurationRoot Configuration { get; } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     services 
      .AddMvcCore() 
      .AddJsonFormatters(); 
    } 

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(); 
     loggerFactory.AddDebug(); 

     app.UseMvc(); 
    } 
} 

using Microsoft.AspNetCore.Mvc; 
using System; 
using System.ComponentModel.DataAnnotations; 

namespace WebApplication3.Controllers 
{ 
    [Route("api/[controller]")] 
    public class ValuesController : Controller 
    { 
     [HttpPut("{id:int}")] 
     public IActionResult Put(
      int id, 
      [FromBody]SomeClass value) 
     { 
      if (this.ModelState.IsValid == false) 
       throw new Exception(); 

      if (this.TryValidateModel(value) == false) 
       throw new Exception(); 

      return this.BadRequest(this.ModelState); 
     } 
    } 

    public class SomeClass 
    { 
     [StringLength(2)] 
     [Required(AllowEmptyStrings = false)] 
     [DisplayFormat(ConvertEmptyStringToNull = false)] 
     public string Name { get; set; } 
    } 
} 

答えて

1

あなたは、MVCデータ注釈を登録する必要があります。 AddMvcではなく、AddMvcCoreのライトを使用すると、デフォルトでは追加されません。 ConfigureServices方法を変更してください:

services 
    .AddMvcCore() 
    .AddJsonFormatters() 
    .AddDataAnnotations(); // add this line 
+0

はい、ありがとうございます。 – MarcusK

関連する問題