Axs Document
  • AXS Framework
  • 1. Common structures
    • 의존성 관계 설정 - Dependency Injection
    • 캐싱 - Caching
    • 로깅 - Logging
    • 세션 - Session
    • 다중 테넌트 - Multi Tenancy
    • 모듈 시스템 - Module System
    • 객체 매핑 - Object To Object Mapping
    • 메일 연동 - Mail System
  • 2. Domain Layer
    • 엔티티 - Entities
    • 저장소 - Repositories
    • 도메인 서비스 - Domain Services
    • 작업 단위 - Unit Of Work
  • 3. Application Layer
    • 애플리케이션 컨트롤러 - Application Controller
    • DTO - Data Transfer Objects
    • DTO 객체의 유효성 체크 - Validating Data Transfer Objects
    • 인증 - Authorization
    • 감사 로그 - Audit Logging
    • 엔티티 기록 - Entity History
  • 4. Object Relational Mapping
    • EntityFramework 통합
    • Dapper 통합
  • 5. Background Services
    • 백그라운드 작업과 워커
  • 6. Presentation Layer
    • 에러 핸들링
Powered by GitBook
On this page
  1. 3. Application Layer

DTO 객체의 유효성 체크 - Validating Data Transfer Objects

PreviousDTO - Data Transfer ObjectsNext인증 - Authorization

Last updated 1 year ago

DTO 객체의 유효성 체크

설명

애플리케이션에서 입력은 먼저 검증되어야 합니다. 입력은 사용자 또는 다른 응용 프로그램에서 보낼 수 있습니다. 웹 애플리케이션에서 유효성 검사는 일반적으로 클라이언트 측과 서버 측에서 두 번 구현됩니다. 클라이언트 측 유효성 검사는 주로 사용자 경험을 위해 구현됩니다. 클라이언트에서 먼저 양식을 확인하고 유효하지 않은 필드를 사용자에게 표시하는 것이 좋습니다. 그러나 서버 측 유효성 검사는 반드시 진행해야 필요합니다.

데이터 어노테이션 사용

public class CreateTaskDto
{
    public int? UserId { get; set; }

    [Required]
    public string Description { get; set; }
}

여기서 Description 속성은 Required 로 표시됩니다. AssignedPersonId는 선택 사항입니다. 또한 System.ComponentModel.DataAnnotations 네임스페이스에는 많은 특성(예: MaxLength, MinLength, RegularExpression...)이 있습니다. 아래 코드를 참조 하세요

public class TaskAppController : ITaskAppController
{
    private readonly ITaskRepository _taskRepository;
    private readonly IUserRepository _userRepository;

    public TaskAppController(ITaskRepository taskRepository, IUserRepository userRepository)
    {
        _taskRepository = taskRepository;
        _userRepository = userRepository;
    }

    public void CreateTask(CreateTaskDto input)
    {
        var task = new Task { Description = input.Description };

        if (input.UserId.HasValue)
        {
            task.User = _userRepository.Load(input.UserId.Value);
        }

        _taskRepository.Insert(task);
    }
}

자동으로 유효성 검사 코드를 작성하므로 유효성 검사 코드가 작성되지 않습니다. ASP.NET 상용구는 또한 입력이 null 인지 확인 하고 null인 경우 AxsValidationException 을 발생시키므로 null 검사 코드를 작성할 필요가 없습니다. 또한 입력 속성 중 하나라도 유효하지 않은 경우 AxsValidationException이 발생합니다.

이 메커니즘은 ASP.NET MVC의 유효성 검사와 유사하지만 응용 프로그램 서비스 클래스는 Controller에서 파생되지 않고 일반 클래스이며 웹 응용 프로그램 외부에서도 작동할 수 있습니다.

유효성 검사 비활성화

자동으로 검증된 클래스(소개 섹션 참조)의 경우 다음 속성을 사용하여 검증을 제어할 수 있습니다.

DisableValidation 특성은 유효성 검사를 비활성화하기 위해 DTO의 클래스, 메서드 또는 속성에 사용할 수 있습니다. EnableValidation 특성은 포함하는 클래스에 대해 비활성화된 경우에만 메서드에 대한 유효성 검사를 활성화하는 데 사용할 수 있습니다.

확인

스웨거에서 확인

스웨거 자체에서 유효성 검사를 하고 있기 때문에 확인은 할 수 없습니다.

코드 적용

 [DisableValidation]
public PagedResultDto<SampleDto> GetSampleDisableValidationAsync(GetSampleAll2Dto search2Dto)
{
    var searchDto = ObjectMapper.Map<GetSampleAllDto>(search2Dto);
    return this.GetAll(searchDto);
}

AppController에서 DisableValidation 속성을 적용하여 유효성 검사를 안하도록 할 수 있습니다. 하지만 대부분의 시나리오에서는 사용하지 않는 속성입니다.

Alt text
picture 1