C# 使用数据批注验证时未进入控制器
我正在使用ASP.NET核心restful web API。我的问题是,我的控制器中有一个服务器验证来检查视图模型(C# 使用数据批注验证时未进入控制器,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,我正在使用ASP.NET核心restful web API。我的问题是,我的控制器中有一个服务器验证来检查视图模型(Contact.cs)验证 但是,当我在控制器中测试我的POST操作CreateContact时,该操作从未被输入,但根据我的Contact.cs类中的数据注释,它被正确验证 我不明白为什么在进入控制器之前要进行验证。我认为,在WebAPI中,服务器验证将根据ModelState在Controller中进行检查。然后我的ModelState.IsValid检查似乎没有用 我的视图模
Contact.cs
)验证
但是,当我在控制器中测试我的POST
操作CreateContact
时,该操作从未被输入,但根据我的Contact.cs
类中的数据注释,它被正确验证
我不明白为什么在进入控制器之前要进行验证。我认为,在WebAPI中,服务器验证将根据ModelState
在Controller
中进行检查。然后我的ModelState.IsValid
检查似乎没有用
我的视图模型:
public class Contact
{
[Required]
public int? Id { get; set; }
[MaxLength(20)]
public string FirstName { get; set; }
// ...
}
我的控制器动作的一部分,从未输入
[Route("api/[controller]")]
[ApiController]
public class ContactsController : ControllerBase
{
[HttpPost]
public IActionResult CreateContact(ViewModels.Contacts.Contact contact)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// ...
}
}
应用于控制器的规则具有某些约定。其中之一是在进入控制器操作之前自动验证传递的模型
因此,这有效地消除了在每个方法中检查ModelState.IsValid
的需要
您可以阅读有关ApiController
属性以及这两个属性的更多信息,这两个属性还包括该属性包含的其他约定
如果您不希望出现这种行为,并且仍然希望能够在控制器操作中手动执行此操作,请签出