손 으로 AspNetCore WebApi 데이터 검증 의 실현 을 가르쳐 드 리 겠 습 니 다.

머리말
샤 오 밍 은 최근 에 또 문 제 를 만 났 다.샤 오 홍 은 인터페이스 에서 전송 한 데 이 터 를 검증 하고 싶 어 한다.샤 오 홍 의 요구 라면 샤 오 밍 이 무슨 말 을 하 든 만족 해 야 한다.이것 은 간단 하지 않 잖 아.
전통 검증

[HttpPost]
public async Task<ActionResult<Todo>> PostTodo(Todo todo)
{
  if (string.IsNullOrEmpty(todo.Name))
  {
    return Ok("      ");
  }
  context.Todo.Add(todo);
  await context.SaveChangesAsync();

  return CreatedAtAction("GetTodo", new { id = todo.Id }, todo);
}

샤 오 밍 은 이렇게 쓰 여 있 는 것 을 발견 하고 많은 인터페이스 가 같은 곳 에 써 서 코드 를 비대 하 게 만 들 었 다 고 쓰 여 있다.
모델 검증 사용
매개 변수 모델 에 주 해 를 달다.

namespace App001.Models
{
  /// <summary>
  ///     
  /// </summary>
  public class Todo
  {
    /// <summary>
    /// ID
    /// </summary>
    public Guid Id { get; set; }
    /// <summary>
    ///   
    /// </summary>
    [Required(ErrorMessage = "      ")]
    public string Name { get; set; }
  }
}
Postman 테스트 Name 전송 값 이 비어 있 지 않 으 면 다음 을 되 돌려 줍 니 다.

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "|df184e36-4e11844dfd38a626.",
  "errors": {
    "Name": [
      "      "
    ]
  }
}
웹 API 컨트롤 러 가[Apicontroller]기능 을 가지 고 있 으 면 ModelState.IsValid 를 검사 할 필요 가 없습니다.이 경우 모델 상태 가 잘못 되면 오류 에 대한 자세 한 정 보 를 포함 한 자동 HTTP 400 응답 을 되 돌려 줍 니 다.
내장 특성
[CreditCard]:속성 이 신용카드 형식 이 있 는 지 검증 합 니 다
  • [Compare]:모델 의 두 속성 이 일치 하 는 지 검증 합 니 다
  • [EmailAddress]:속성 이 전자 우편 형식 이 있 는 지 검증 합 니 다
  • [Phone]:속성 이 전화번호 형식 이 있 는 지 검증 합 니 다
  • [Range]:속성 값 이 지정 한 범위 내 에 있 는 지 검증 합 니 다
  • [RegularExpression]:속성 값 이 지정 한 정규 표현 식 과 일치 하 는 지 검증 합 니 다
  • [Required]:필드 가 null 이 아 닌 지 검증 합 니 다
  • [StringLength]:문자열 속성 값 이 지정 한 길이 제한 을 초과 하지 않 는 지 검증 합 니 다
  • [Url]:속성 이 URL 형식 이 있 는 지 검증 합 니 다
  • [Remote]:서버 에서 조작 방법 을 호출 하여 클 라 이언 트 의 입력 을 검증 합 니 다
  • Error messages
    인증 기능 을 통 해 잘못된 입력 으로 표시 할 오류 메 시 지 를 지정 할 수 있 습 니 다.예 를 들 면:
    
    [Required(ErrorMessage = "      ")]
    사용자 정의 반환 메시지 형식 사용 하기
    두 가지 방법 이 있 습 니 다.
    사용자 정의 필 터 를 사용 합 니 다
  • 기본 모델 인증 을 사용 하려 면 컨트롤 러 에[Apicontroller]를 추가 해 야 합 니 다
  • 사용자 정의 필터 사용
    우선,ModelValidateAction FilterAttribute 필 터 를 만 듭 니 다.
    
    public class ModelValidateActionFilterAttribute : ActionFilterAttribute
    {
      public override void OnActionExecuting(ActionExecutingContext context)
      {
        if (!context.ModelState.IsValid)
        {
          //           
          var errors = context.ModelState
            .Where(e => e.Value.Errors.Count > 0)
            .Select(e => e.Value.Errors.First().ErrorMessage)
            .ToList();
    
          var str = string.Join("|", errors);
    
          //      
          var result = new
          {
            Code = 10000,
            Msg = "       。",
            FullMsg = str
          };
    
          context.Result = new BadRequestObjectResult(result);
        }
    
      }
    }
    
    
    그리고 Startup.Configure Services 는 컨트롤 러 에 필 터 를 추가 하고 기본 모델 인증 을 닫 습 니 다.또한 AddNewtonsoftJSon 도 추 가 했 습 니 다.
    
    //        
    services.Configure<ApiBehaviorOptions>(opt => opt.SuppressModelStateInvalidFilter = true);
    services.AddControllers(opt =>
    {
      //     
      opt.Filters.Add(typeof(ModelValidateActionFilterAttribute));
    }).AddNewtonsoftJson(opt =>
    {
      //json          
      opt.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });
    
    마지막 으로 반환 효 과 를 살 펴 보 자.
    
    {
      "Code": 10000,
      "Msg": "       。",
      "FullMsg": "      。"
    }
    
    기본 모델 검증 사용
    
    services.Configure<ApiBehaviorOptions>(opt =>
    {
      opt.InvalidModelStateResponseFactory = actionContext =>
      {
        //            
        var errors = actionContext.ModelState
          .Where(e => e.Value.Errors.Count > 0)
          .Select(e => e.Value.Errors.First().ErrorMessage)
          .ToList();
    
        var str = string.Join("|", errors);
    
        //      
        var result = new
        {
          Code = 10000,
          Msg = "       。",
          FullMsg = str
        };
    
        return new BadRequestObjectResult(result);
      };
    });
    
    
    작은 매듭
    지금까지 샤 오 밍 은 데이터 검증 도 끝 냈 습 니 다.so easy 아 닙 니까?
    여기 서 AspNetCore WebApi 데이터 검증 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 AspNetCore WebApi 데이터 검증 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기