Validações no C#/ASP NET

Bom dia pessoas, tudo bem? Espero que sim. Estou trabalhando em APIs com C# mais especificamente asp net 4.7, e eu gostaria de saber se preciso ou como fazer algumas validações dentro da minha controller, por exemplo: A Model de usuario tem nome, email, e cpf.

Nesse caso pra mim existem alguns problemas como: Cpf pode estar null ou com uma string com espaço (" ") então o certo é fazer 2 validações para o CPF? ou o Asp net valida pra mim caso o valor não seja númerico.

Então pensando nisso, eu preciso fazer 3 ifs cada um verificando se os atributos estão preenchidos ou o asp net faz isso pra mim?

Isso tudo que perguntei depende de versão? Porque eu lembro de ter feito uma API em asp net core e ter esse tipo de validação, mas gostaria de uma certeza sobre esse assunto. Perdoem caso tenho feito a pergunta mal feita ou que ela tenha ficada confusa, não sou muito com Fóruns.

Obrigado pela atenção!

OBS: Não coloquei aqui que o CPF tem que ser válido porque isso seria uma validação que eu já sei que preciso fazer.

Segue um exemplo de código:

[HttpPost]
        [Route("gravar")]
        public async Task<IHttpActionResult> GravarTerceiroAutorizado(Usuario model)
        {
            
            
            if (model.CPF != null)
            {
                return BadRequest("O CPF fornecido é inválido.");
            }

            try
            {
                var retorno = await _usuarioService.GravarUsuario(model);

                if(retorno == "Gravou")
                    return Ok(new { message = "Usuario cadastrado com sucesso." });
                else
                    return Ok(new { message = "Autorização do terceiro editada com sucesso." });
            }
            catch (Exception ex)
            {
                return BadRequest($"Desculpe, ocorreu um erro ao processar sua solicitação: {ex.Message}");
            }
        }

Valida em uma só verificação, usando

if (string.IsNullOrEmpty(model.CPF.ToString().Trim())) { return BadRequest("O CPF fornecido é inválido."); }

Mas então eu preciso validar todos os atributos? Se a minha model tiver 11 atributos eu tenho que validar os 11?
Isso vai depender muito da estrutura que vc está usando... tenho projetos que crio uma classe de Validator para cada Entidade... dessa forma, a lógica de validação fica explícita nessa classe mas não polui minhas controllers. O .NET permite q vc use Data Annotations para fazer a validação das suas classes, como nesse exemplo aqui: https://learn.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api Vc pode tbm usar o FluentValidation para isso: https://docs.fluentvalidation.net/en/latest/ Enfim, tem muitas formas de se fazer a mesma coisa... mas a mais simples seria colocar os if's diretamente mesmo... coisa q eu não recomendo!
Entendi, é colocar 11 ifs dentro da controller é bem paia mesmo. Vou até repetir a perguntar sobre o asp net conseguir fazer isso automatico, você sabe se ele consegue? Eu preciso fazer alguma configuração ou algo do tipo?

Olá VitorPhantomhive

Existem algumas maneira, uma delas é utilizar os DataAnnotations ex:

        public class Usuario
        {
            public string Nome { get; set; }
            public string Email { get; set; }
            [Required(ErrorMessage = "CPF é obrigatorio")]
            [StringLength(11, MinimumLength = 11, ErrorMessage = "Cpf deve conter 11 caracteres")]
            public string Cpf { get; set; }
        }
        
        [HttpPost]
        public IActionResult Post(Usuario usuario)
        {
            // o aspnet estará validando automaticamente para você e entregando o resultado no ModelState
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            return Ok(usuario);
        }

Outra maneira bastante usada é com FluentValidation

Entendi, eu tinha visto por cima essas possibilidades, mas sobre a pergunta do asp net fazer isso automaticamente, é possível?
você diz não ser necessario o `if (!ModelState.IsValid)...` ? É possivel e bem simples, apenas adicionando o atributo [[ApiController]](https://learn.microsoft.com/pt-br/aspnet/core/web-api/?view=aspnetcore-8.0#apicontroller-attribute) ele irá fazer essa autovalidação ex: ```cs [ApiController] [Route("[controller]")] public class UsuarioController : ControllerBase { [HttpPost] public IActionResult Post(Usuario usuario) { return Ok(usuario); } ```
aaaaaaaaaaaa perfeito, entendi entendi. Muito obrigado de verdade! Ajudou bastante