ASP.NET Core 에 서 는 액 션 에 다양한 방식 을 어떻게 활용 할 것 인가?

머리말
ASP.NET Core 는 크로스 플랫폼 으로 오픈 소스,경량급,고성능,고도 모듈 화 된 웹 프레임 워 크 입 니 다.ASP.NET Core MVC 에 서 는 Action 방법 에 인 자 를 전달 할 수 있 는 여러 가지 방식 이 있다.예 를 들 어 url 방식,query string 방식,request header,request body,form 등 이다.이 편 은 여러분 과 함께 이러한 방식 을 어떻게 사용 하 는 지 토론 하고 코드 로 일일이 검증 합 니 다.
AuthorRepository 클래스 만 들 기
이 예 에서 저 는 Repository 류 를 사용 한 다음 에 Controller 에서 Action 방법 으로 이 Repository 를 호출 하여 기본 적 인 CURD 작업 을 실현 할 것 입 니 다.먼저 Author 류 를 설명 하 겠 습 니 다.코드 는 다음 과 같 습 니 다.

 public class Author
 {
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
 }
Author Repository 류 는 다음 과 같은 세 가지 방법 을 제공 합 니 다.
GetAuthor 는 일반적인 집합 에서 Author 실 체 를 가 져 오 는 데 사 용 됩 니 다
  • Save 는 Author 를 끝까지 저장 하 는 범 형 집합 에 사 용 됩 니 다
  • GetAuthors 는 페이지 별로 일반적인 집합 중의 데 이 터 를 가 져 오 는 데 사 용 됩 니 다
  • 구체 적 인 코드 는 다음 과 같다.
    
     public class AuthorRepository
     {
      List<Author> authors = new List<Author>()
      {
       new Author
       {
        Id = 1,
        FirstName = "Joydip",
        LastName = "Kanjilal"
       },
       new Author
       {
        Id = 2,
        FirstName = "Steve",
        LastName = "Smith"
       }
      };
      public Author GetAuthor(int id)
      {
       return authors.FirstOrDefault(a => a.Id == id);
      }
      public List<Author> GetAuthors(int pageNumber = 1)
      {
       int pageSize = 10;
       int skip = pageSize * (pageNumber - 1);
       if (authors.Count < pageSize)
        pageSize = authors.Count;
       return authors
        .Skip(skip)
        .Take(pageSize).ToList();
      }
      public bool Save(Author author)
      {
       var result = authors.Where(a => a.Id == author.Id);
       if (result != null)
       {
        if (result.Count() == 0)
        {
         authors.Add(author);
         return true;
        }
       }
       return false;
      }
     }
    
    url 방식 으로
    가장 간단 하고 거 친 액 션 전 삼 은 url 방식 을 통 해 다음 코드 세 션 은 url 을 통 해 전 삼 하 는 방법 을 보 여 줍 니 다.
    
    [HttpGet]
    [Route("Default/GetAuthor/{authorId:int}")]
    public IActionResult GetAuthor(int authorId)
    {
      var data = authorRepository.GetAuthor(authorId);
      return View(data);
    }
    
    입력 한 url 형식 은 다음 과 같 습 니 다:
    GET: http://localhost:8061/Default/GetAuthor/1
    query string 방식 으로
    이런 방식 의 방법 은 바로 채택 하 는 것 입 니까?의 모델 은 url 의 구조 정 보 를 수정 하지 않 아 도 되 기 때문에 뒤로 호환성 을 가지 고 아래 코드 세 션 을 고려 합 니 다.query string 방식 으로 action 에 어떻게 전 달 했 습 니까?
    
    [HttpGet]
    [Route("Default/GetAuthors/{pageNumber:int}")]
    public IActionResult GetAuthors([FromQuery
    (Name = "pageNumber")] int pageNumber = 1)
    {
      var data = authorRepository.GetAuthors(pageNumber);
      return Ok(data);
    }
    
    입력 한 url 형식 은 다음 과 같 습 니 다:
    GET: http://localhost:8061/Default/GetAuthors?pageNumber=1
    주의해 야 할 것 은 Action 방법의 pageNumber 인 자 는 선택 할 수 있 습 니 다.들 어 오지 않 으 면 기본 값 은 1 로 계산 합 니 다.예 를 들 어 밑 에 있 는 AuthorList 에 100 개의 기록 이 있 고 현재 전 달 된 page=3 이 있 으 면 이 방법 은 31-40 이라는 10 개의 기록 을 되 돌려 줍 니 다.여기 있 는 페이지 당 몇 개 를 되 돌려 주 는 지 하 드 인 코딩 을 사용 합 니 다.예 를 들 어 제 가 정의 한 것 은 10 입 니 다.여러분 은 자신의 상황 에 따라 합 리 적 인 값 을 설정 할 수 있 습 니 다.
    request header 방식 으로
    대부분 상황 에서 신분 정보,프라이버시 데이터 등 을 전달 하 는 장면 에서 이런 방식 을 사용한다.예 를 들 어 Basic 검증 은 다음 과 같다.

    또는 신용 카드 를 header 에 넣 거나 아래 코드 는 Action 에서 header 의 신용카드 번 호 를 받 는 방법 을 보 여 줍 니 다.
    
    [HttpGet]
    [Route("Default/IsCreditCardValid/{creditCardNumber}")]
    public IActionResult IsCreditCardValid([FromHeader] string creditCardNumber)
    {
      string regexExpression =
      "^(?:(?<visa>4[0-9]{12}(?:[0-9]{3})?)|" +
      "(?<mastercard>5[1-5][0-9]{14})|" +
      "(?<amex>3[47][0-9]{13})|)$";
      Regex regex = new Regex(regexExpression);
      var match = regex.Match(creditCardNumber);
      return Ok(match.Success);
    }
    
    목적 을 간소화 하기 위해 IsCreditCardValid 방법 은 Visa,MasterCard,Amex 등 세 가지 유형의 신용카드 만 검증 할 수 있 습 니 다.다른 신용카드 로 확장 하려 면 스스로 수정 하 셔 도 됩 니 다.신용카드 번 호 는 일반적으로 안전하게 전달 되 어야 하기 때문에 이런 방식 을 사용 하 는 것 이 좋 습 니 다.포스트 맨 을 통 해 신용카드 번 호 를 헤더 에 넣 는 방법 을 보 여 준다.
    request body 방식 사용 하기
    request body 는 insert 나 update 작업 을 수행 하 는 데 자주 사용 되 며,우리 가 평소에 웹 개발 에서 가장 많이 사용 하 는 매개 변수 전달 방식 이기 도 합 니 다.아래 코드 세 션 은 Action 에서 request body 를 받 는 방법 을 보 여 줍 니 다.
    
    [HttpPost]
    [Route("Default/Insert")]
    public IActionResult Insert([FromBody] Author author)
    {
      return Ok(authorRepository.Save(author));
    }
    
    다음은 전단 이 어떻게 post 데 이 터 를 백 엔 드 로 가 는 지 살 펴 보 겠 습 니 다.여 기 는 계속 Postman 을 사용 하여 테스트 를 진행 합 니 다.

    Default Controller 의 전체 코드
    전 모 를 볼 수 있 도록 모든 전송 방식 을 Default Controller 로 나열 했다.
    
     public class DefaultController : Controller
      {
        private readonly AuthorRepository authorRepository =
        new AuthorRepository();
        [HttpGet]
        [Route("Default/GetAuthor/{authorId:int}")]
        public IActionResult GetAuthor(int authorId)
        {
          var data = authorRepository.GetAuthor(authorId);
          return Ok(data);
        }
        [HttpGet]
        [Route("Default/GetAuthors/{pageNumber:int}")]
        public IActionResult GetAuthors([FromQuery
        (Name = "pageNumber")] int pageNumber = 1)
        {
          var data = authorRepository.GetAuthors(pageNumber);
          return Ok(data);
        }
        [HttpGet]
        [Route("Default/IsCreditCardValid/{creditCardNumber}")]
        public IActionResult IsCreditCardValid
        ([FromHeader] string creditCardNumber)
        {
          string regexExpression =
          "^(?:(?<visa>4[0-9]{12}(?:[0-9]{3})?)|" +
          "(?<mastercard>5[1-5][0-9]{14})|" +
          "(?<amex>3[47][0-9]{13})|)$";
          Regex regex = new Regex(regexExpression);
          var match = regex.Match(creditCardNumber);
          return Ok(match.Success);
        }
        [HttpPost]
        [Route("Default/Insert")]
        public IActionResult Insert([FromBody] Author author)
        {
          return Ok(authorRepository.Save(author));
        }
      }
    
    마지막 으로 form 형식 으로 Action 에 인 자 를 전달 할 수 있 지만 form 의 장면 은 파일 업로드 에 더 많이 사 용 됩 니 다.이렇게 하려 면 IFormFile 을 이용 하여 해결 할 수 있 습 니 다.
    여기 서 ASP.NET Core 에서 Action 에 다양한 방식 으로 인삼 을 전달 하 는 방법 에 관 한 글 을 소개 합 니 다.더 많은 관련 ASP.NET Core 가 Action 에 다양한 방식 으로 인삼 을 전달 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 관심 을 가 져 주시 기 바 랍 니 다!
    링크

    좋은 웹페이지 즐겨찾기