我正在使用ASP.NET Core宁静的Web API。我的问题是我在控制器内部进行了服务器验证,以检查视图模型(Contact.cs
)验证。
但是,当我在控制器中测试POST
动作CreateContact
时,永远不会输入该动作,但是会根据我在Contact.cs
类中包含的数据注释正确地对其进行验证。
我不明白为什么进入控制器之前会进行验证。我认为,在Web API中,将根据Controller
在ModelState
中检查服务器验证。然后我的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);
}
// ...
}
}
答案 0 :(得分:3)
您应用于控制器的ApiController
attribute具有某些约定。其中之一是,传递的模型在进入控制器操作之前会被自动验证。
因此,这有效地消除了检查每种方法中的ModelState.IsValid
的需要。
您可以了解有关ApiController
属性in the official documentation和in this blog post的更多信息,它们还涵盖了该属性包括的其他约定。
如果您不希望这种行为,并且仍然希望能够在控制器操作中手动执行此操作,请查看this question on disabling the functionality。