ASP.NET Core Razor 페이지 경로 상세 설명
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()
{
}
}
}
구속 하 다또한,이 예제 에서 매개 변수의 제약 은 값 이 있어 야 한 다 는 것 입 니 다.
OnGet
는PageModel
와 마찬가지 로 효과 가 있 고 모두 경로 와 일치 할 수 있다.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
달콤 한 탕
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
부트스트랩 ASP.NET에서 설정하는 법1) _Layout.cshtml 內 link로 bootstrap 참조 2) Nuget 패키지에서 BootStrap 다운로드 3) 하단 부트스트랩 예제 사이트 참고해서 프로젝트 개발 참고 :...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.