为什么ASP.NET Core不验证[FromBody]
归因的操作参数?在下面的示例中,类型为value
的参数SomeClass
未经过验证。它甚至不会出现在ModelState字典中(仅id
)。 this.ModelState.IsValid
始终为true
,即使Name属性设置为长度超过2个字母的字符串。
无论请求正文包含什么(JSON),偶数TryValidateModel
始终为true
。
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; }
}
}
答案 0 :(得分:2)
您需要注册MVC数据注释。使用简单AddMvcCore
方法而不是AddMvc
时,默认情况下不会添加。修改您的ConfigureServices
方法:
services
.AddMvcCore()
.AddJsonFormatters()
.AddDataAnnotations(); // add this line