ASP.NET Core Razor 페이지 경로 상세 설명

6509 단어 ASP.NETCoreRazor
서버 쪽 웹 응용 프로그램 프레임 워 크 에서 매우 중요 한 디자인 은 개발 자가 요청 을 정확하게 처리 할 수 있 도록 URL 을 서버 의 자원 과 어떻게 일치 시 키 는 지 하 는 것 입 니 다.가장 쉬 운 방법 은 URL 을 디스크 에 비 추 는 물리 적 파일 입 니 다.Razor 페이지 프레임 워 크 에서 ASP.NET 팀 은 이렇게 이 루어 집 니 다.
Razor 페이지 프레임 워 크 가 파일 과 URL 을 어떻게 일치 시 키 는 지 에 대해 서 는 사용자 정의 규칙 에 따라 출력 결 과 를 어떻게 바 꾸 는 지 알 아야 할 규칙 이 있 습 니 다.Razor 페이지 와 Web Form 프레임 워 크 를 비교 하려 면 대체 Ur l 인자 와 URL 에서 데 이 터 를 전달 하 는 메커니즘 도 알 아야 합 니 다.
규칙 1.Razor 페이지 에 루트 디 렉 터 리 가 필요 합 니 다.기본적으로 이 루트 디 렉 터 리 는 웹 프로그램 프로젝트 의 루트 디 렉 터 리 에 있 는 페이지 입 니 다.루트 디 렉 터 리 로 다른 폴 더 를 설정 할 수 있 습 니 다.다음은 루트 디 렉 터 리 를 프로그램'Content'폴 더 로 변경 합 니 다.

 public void ConfigureServices(IServiceCollection services)
 { 
  services 
   .AddMvc(). 
   AddRazorPagesOptions(options => { 
    options.RootDirectory = "/Content";
   }); 
 }
규칙 2.URL 은 Razor 페이지 에 매 핑 되 며 URL 에는 파일 확장자 가 포함 되 어 있 지 않 습 니 다.
규칙 3,"Index.cshtml"은 기본 문서 입 니 다.이것 은 만약 에
URL
매 핑 파일
www.domain.com
/Pages/Index.cshtml
www.domain.com/index
/Pages/Index.cshtml
www.domain.com/index
/Pages/Index.cshtml
www.domain.com/account
/pages/account.cshtml 또는/pages/account/index.cshtml
마지막 예 에서 URL 은 두 개의 서로 다른 파일-루트 디 렉 터 리 의'account.cshtml','account'폴 더 의'index.cshtml'에 매 핑 됩 니 다.Razor 페이지 프레임 워 크 는 어떤 파일 을 선택 할 지 인식 할 수 없 기 때문에 프로그램 에서 이 두 파일 을 동시에 가지 고 있다 면 www.domain.com/acount 를 탐색 하려 면 다음 과 같은 이상 을 던 집 니 다.
AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:
Page: /account/Index
Page: /account
URL 전달 매개 변수
대부분의 다른 프레임 워 크 처럼 매개 변 수 는 검색 문자열 로 URL 에 전달 할 수 있 습 니 다.예 를 들 어Startup;또는 이 를 경로 매개 변수 로 전달 할 수 있 기 때문에 상기 예제 가ConfigureServices로 변 합 니 다.URL 의 일부분 은 매개 변수 이름 에 투사 해 야 합 니 다.페이지 의 경로 템 플 릿 에서 이 루어 진www.domain.com/product?id=1명령 의 일부분 입 니 다.

@page "{id}"
이 템 플 릿 은 프레임 워 크 에 페이지 이름 다음 URL 의 첫 번 째 부분 을'id'의 경로 매개 변수 로 알려 줍 니 다.루트 매개 변수의 값 에 다양한 방식 으로 접근 할 수 있 습 니 다.첫 번 째 는 사전 사용www.domain.com/product/1:

@page "{id}"
{
 var productId = RouteData.Values["id"];
}
또는 이 페이지 의,@page방법 에 루트 매개 변수 와 같은 이름 의 매개 변 수 를 추가 하고 그 값 을 공공 속성 에 분배 할 수 있 습 니 다.

@page "{id}"
@{
 @functions{

  public int Id { get; set; }

  public void OnGet(int id)
  {
   Id = id;
  }
 }
}
<p>The Id is @Id</p>

만약 에RouteData을 사용한다 면 이렇게 실 현 됩 니 다.

using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorPages.Pages
{
 public class ProductModel : PageModel
 {
  public int Id { get; set; }
  public void OnGet(int id)
  {
   Id = id;
  }
 }
}

@page "{id}"
@model ProductModel
<p>The Id is @Model.Id</p>
마지막 으로 공유 속성OnGet()특성 을 사용 하고 이PageModel방법의 인 자 를 생략 할 수 있 습 니 다.Razor 파일 의 내용 은 변 하지 않 지만BindProperty코드 가 약간 변경 되 었 습 니 다.

using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorPages.Pages
{
 public class ProductModel : PageModel
 {
  [BindProperty(SupportsGet = true)]
  public int Id { get; set; }
  public void OnGet()
  {
  }
 }
}

구속 하 다
또한,이 예제 에서 매개 변수의 제약 은 값 이 있어 야 한 다 는 것 입 니 다.OnGetPageModel와 마찬가지 로 효과 가 있 고 모두 경로 와 일치 할 수 있다.URL www.domain.com/product/apple값 을 정수 로 하려 면 데이터 형식 을 템 플 릿 에 추가 하여 제약 조건 을 지정 할 수 있 습 니 다.

@page "{id:int}"

현재"apple"을 매개 변수 값 으로 시도 하면 프로그램 은 404 Not Found 상태 코드 를 되 돌려 줍 니 다.
값 을 필요 하지 않 게 지정 할 수 있 습 니 다.빈 형식 으로 매개 변 수 를 설정 할 수 있 습 니 다.

@page "{id:int?}"
프로그램 에서"apple"을 매개 변수 값 으로 사용 할 수 있다 면 A-Z 와 a-z 만 사용 할 수 있 는 문 자 를 지정 할 수 있 습 니 다.

@page "{id:alpha}"
최소 길이 요구 와 결합 할 수 있 습 니 다:

@page "{id:alpha:minlength(4)}"
더 많은 구속 정 보 를 볼 수 있 습 니 다마이크로소프트 문서.
우호 URL
우호 적 인 URL 은 디스크 에 있 는 임의의 파일 에 URL 을 매 핑 하여 파일 이름 에 따라 일대일 매 핑 관 계 를 깨 뜨 릴 수 있 습 니 다.이 기능 을 사용 하면 파일 이름 을 바 꿀 수 없 는 SEO 최 적 화 를 위해 URL 을 바 꾸 지 않 을 수 있 습 니 다.예 를 들 어 모든 요청 을 한 파일 로 처리 하 기 를 원한 다 면.우호 URL 은www.domain.com/product/21유형의id방법 에 설정 되 어 있 으 며,Startup클래스 의ConfigureServices방법 을 호출 합 니 다.다음 예제 에 서 는 URLRazorPagesOption을 Razor 페이지"extras"폴 더"products.cshtml"파일 에 표시 합 니 다.

 public void ConfigureServices(IServiceCollection services)
 {
  services
   .AddMvc()
   .AddRazorPagesOptions(options =>
   {
    options.Conventions.AddPageRoute("/extras/products", "product");
   });
 }
웹 Forms 에서 우호 적 인 URL 을 사용 한 적 이 있다 면AddPageRoute방법의 매개 변수 순 서 는 웹 Formswww.domain.com/product 방법 과 반대로 파일 경 로 를 첫 번 째 매개 변수 로 해 야 합 니 다.그 밖 에AddPageRoute루트 템 플 릿 을 두 번 째 매개 변수 로 하고 루트 정의 가 아니 라 그 어떠한 구속 도 단독으로 정의 된다.
마지막 예 는 모든 요청 을 하나의 파일 에 비 추 는 것 을 설명 합 니 다.사이트 내용 이 특정 위치(데이터베이스,Markdown 파일)에 저장 되 어 있 고 단일 파일(예 를 들 어 index.cshtml)이 URL 에 따라 내용 을 찾 은 다음 HTML 로 처리 하면 이 동작 을 수행 할 수 있 습 니 다.

 public void ConfigureServices(IServiceCollection services)
 {
  services
   .AddMvc()
   .AddRazorPagesOptions(options => {
     options.Conventions.AddPageRoute("/index", "{*url}");
  });
 }
루트 템 플 릿(*)어댑터 는"전부"를 표시 합 니 다.이 설정 을 사용 하 더 라 도 디스크 에 있 는 기 존 파일 과 URL 간 의 일치 규칙 은 정상적으로 실 행 됩 니 다.
총결산
Razor 페이지 의 경로 시스템 은 매우 직관 적 이 고 파일 위 치 를 기반 으로 하지만 기본 약속 을 덮어 쓰 려 면 매우 강력 하여 설정 할 수 있 습 니 다.
원문:https://www.mikesdotnetting.com/article/310/routing-in-razor-pages
달콤 한 탕
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기