发布的操作参数上的 ModelValidation 没有发生
ModelValidation on posted action parameter not happening
为什么 ASP.NET Core 不验证 [FromBody]
属性操作参数?在下面的示例中,SomeClass
类型的参数 value
未得到验证。它甚至没有出现在 ModelState 字典中(仅 id
)。 this.ModelState.IsValid
始终是 true
,即使名称 属性 设置为长度超过 2 个字母的字符串。
即使 TryValidateModel
也总是 true
无论请求正文包含什么 (JSON)。
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; }
}
}
您需要注册 MVC 数据注释。当您使用 light AddMvcCore
方法而不是 AddMvc
时,默认情况下不会添加它。修改您的 ConfigureServices
方法:
services
.AddMvcCore()
.AddJsonFormatters()
.AddDataAnnotations(); // add this line
为什么 ASP.NET Core 不验证 [FromBody]
属性操作参数?在下面的示例中,SomeClass
类型的参数 value
未得到验证。它甚至没有出现在 ModelState 字典中(仅 id
)。 this.ModelState.IsValid
始终是 true
,即使名称 属性 设置为长度超过 2 个字母的字符串。
即使 TryValidateModel
也总是 true
无论请求正文包含什么 (JSON)。
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; }
}
}
您需要注册 MVC 数据注释。当您使用 light AddMvcCore
方法而不是 AddMvc
时,默认情况下不会添加它。修改您的 ConfigureServices
方法:
services
.AddMvcCore()
.AddJsonFormatters()
.AddDataAnnotations(); // add this line