servidor의 유효성 검사 오류 오류 - Asp Core Web API + Axios + React Hook Form
                                            
                                                
                                                
                                                
                                                
                                                
                                                 15728 단어  reactaxiosaspnetcoredotnet
                    
세나리오
ASP.NET CORE 2.1에 대한 부분, erros de validação no servidor, são enviados para o client no formato Validation Problem Details , que segue uma estrutura semelhante a seguir:
{
   "type":"https://tools.ietf.org/html/rfc7231#section-6.5.1",
   "title":"One or more validation errors occurred.",
   "status":400,
   "traceId":"|52643794-491d9e1d05c828e6.",
   "errors":{
      "Cnpj":[
         "'Cnpj' must not be empty."
      ],
      "CompanyPublicName":[
         "'Company Public Name' must not be empty."
      ],
      "CompanyInternalName":[
         "'Company Internal Name' must not be empty."
      ]
   }
}
Perceba que na response, há a propriedade errors, contendo as propriedades com falhas de validação.
Estou utilizando Axios 필요한 HTTP, e para checar, se o retorno da requisição é um feedback de validação, eu checo se há a presença do response header:
Content-Type: application/problem+json; charset=utf-8
Sendo assim, vejamos meu bloco try...catch responsável por invocar o Axios:
try {
    let response = await AxiosInstance.post(
        '/general/companies', {}, {}
    )
} catch (e) {
    const serverSideErrors = e.response.data.errors;
    // Faz iteração nas propriedades do objeto Errors, e usa o método 
    // *SetError* do ReactHookForm, para informar um erro.
    Object.entries(serverSideErrors).map(([key, value]) =>
        setError(key, {
            message: value,
            type: 'serverSide'
        })
    )
}
액시오스 인터셉터:
API를 반환하거나 반환하는 방법은 LowerCamelCase를 소유한 정확한 변환기입니다.
Eu faço isso isso usando um interceptor, ao criar uma instância do Axios.
// Add a response interceptor
instance.interceptors.response.use(function(response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
}, function(error) {
    let newError = Object.assign({}, error);
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    if (newError.response.status === 400) {
        if (newError.response.headers['content-type'].includes('application/problem+json')) {
            /*
            Rename Problem Json response field names, to lower camel case
             */
            let serverData = newError.response.data;
            let errorsLowerCamelCase = Object.fromEntries(
                Object.entries(serverData.errors).map(([key, value]) =>
                    // Modify key here
                    [`${stringUtils.toLowerCamelCase(key)}`, value]
                )
            )
            newError.response.data.hasValidationErrors = true;
            newError.response.data.errors = errorsLowerCamelCase;
        }
    }
    return Promise.reject(newError);
});
결론
Para renderizar os erros inline, estou usando bootstrap form-group, eo component ErrorMessage do próprio react-hook-form.
<ErrorMessage name="companyInternalName"
              errors={errors}
              render={({message}) =>
                <div className={'field-error text-danger'}>{message}</div>
              }
Configuro esse componente pra cada campo do formulário, e ao fazer submit do formulario, uma requisição HTTP é feita, o retorno é tratado, e o resultado é exibido abaixo:

보너스: 전 세계 유효 기간이 어떻게 됩니까? (que não estão associadas a nenhum campo específico)
 
A mensagem de resposta do servidor, para uma mensagem de validação global, deve ser conforme a seguir:
 {
   "type":"https://tools.ietf.org/html/rfc7231#section-6.5.1",
   "title":"One or more validation errors occurred.",
   "status":400,
   "traceId":"|526437a6-491d9e1d05c828e6.",
   "errors":{
      "$":[
         "essa mensagem de validação aqui, não está associada a nenhum campo específico. 📍"
      ]
   }
}
Perceba que o identificador do campo, no objeto errors, é um símbolo   $   .
Sendo assim, coloquei no topo da tela, um component  < ErrorMessage />  , onde o atributo  name="$"  .
Isso me permite exibir no topo do formulário, erros globalis de validação.
 <ErrorMessage name="$"
errors={errors}
render={({message}) =>
  <>
    <FormGroup row>
      <Col md="4">
        <span>⚠️ Atenção:</span>
</Col>
<Col md="8">
  <div className={'field-error text-danger'}>{message}</div>
</Col>
</FormGroup>
</>
}
/>
Me avisa nos commentários se precisar de alguma ajuda.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(servidor의 유효성 검사 오류 오류 - Asp Core Web API + Axios + React Hook Form), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://dev.to/gabrielbarcelos/exibindo-erros-de-validacao-no-servidor-asp-core-web-api-axios-react-hook-form-2nb0
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
{
   "type":"https://tools.ietf.org/html/rfc7231#section-6.5.1",
   "title":"One or more validation errors occurred.",
   "status":400,
   "traceId":"|526437a6-491d9e1d05c828e6.",
   "errors":{
      "$":[
         "essa mensagem de validação aqui, não está associada a nenhum campo específico. 📍"
      ]
   }
}
<ErrorMessage name="$"
errors={errors}
render={({message}) =>
  <>
    <FormGroup row>
      <Col md="4">
        <span>⚠️ Atenção:</span>
</Col>
<Col md="8">
  <div className={'field-error text-danger'}>{message}</div>
</Col>
</FormGroup>
</>
}
/>
Reference
이 문제에 관하여(servidor의 유효성 검사 오류 오류 - Asp Core Web API + Axios + React Hook Form), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gabrielbarcelos/exibindo-erros-de-validacao-no-servidor-asp-core-web-api-axios-react-hook-form-2nb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)