[번역]ASP.NET Core 2.0 루트 엔진 상세 설명
문제.
ASP.NET Core 2.0 의 경로 엔진 은 어떻게 작 동 합 니까?
답안
Startup 클래스 에 MVC 서비스 와 요청 미들웨어 를 추가 하 는 빈 항목 을 만 듭 니 다.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "goto_one",
template: "one",
defaults: new { controller = "Home", action = "PageOne" });
routes.MapRoute(
name: "goto_two",
template: "two/{id?}",
defaults: new { controller = "Home", action = "PageTwo" });
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
일반적인 경 로 를 보 여 주 는 컨트롤 러 HomeController 를 만 듭 니 다.
public class HomeController : Controller
{
public IActionResult Index()
{
return Content("Home/Index");
}
public IActionResult PageOne()
{
return Content("Home/One");
}
[HttpGet]
public IActionResult PageTwo()
{
return Content("(GET) Home/Two");
}
[HttpPost]
public IActionResult PageTwo(int id)
{
return Content($"(POST) Home/Two: {id}");
}
}
기능 경 로 를 보 여 주 는 컨트롤 러 WorkController 를 만 듭 니 다:
[Route("work")]
public class WorkController : Controller
{
public IActionResult Index()
{
return Content("Work/Index");
}
[Route("one")]
public IActionResult PageOne()
{
return Content("Work/One");
}
[HttpGet("two")]
public IActionResult PageTwo()
{
return Content("(GET) Work/Two");
}
[HttpPost("two/{id?}")]
public IActionResult PageTwo(int id)
{
return Content($"(POST) Work/Two: {id}");
}
}
토론 하 다.ASP.NET Core 의 경로 엔진 은 들 어 오 는 요청 을 컨트롤 러 와 그들의 방법 에 반영 할 수 있 습 니 다.이것 은 요청 파이프 에 루트 중간 부품 을 추가 함으로써 이 루어 진 것 입 니 다.구체 적 으로 는 IRouteBuilder 를 사용 하여 URL 규칙(템 플 릿)을 컨트롤 러 에 비 추 는 방법 입 니 다.
루트 템 플 릿
경로 템 플 릿 은 글자 의 액면가 와 표 시 를 사용 할 수 있 습 니 다.경로 와 일치 할 때,글자 의 액면가 가 URL 의 텍스트 와 엄 격 히 일치 하고,표 시 는 교 체 됩 니 다.
템 플 릿 과 일치 하기 위해 서 템 플 릿 에는 컨트롤 러 방법 을 찾 을 수 있 도록 컨트롤 러 와 방법 표 시 를 포함 해 야 합 니 다(이것 은 MVC 의 핵심 정보 입 니 다).템 플 릿 에 있 는 다른 태그 가 매 핑 되 는 방법 에 대한 인자(모델 바 인 딩 을 통 해 이 루어 집 니 다).
경로 맵 을 추가 할 때 태그 에 부족 한 값 을 제공 할 수 있 습 니 다.템 플 릿 에 컨트롤 러 와 방법 표시 가 포함 되 어 있 지 않 을 때 유용 합 니 다.템 플 릿 도 방법 매개 변수 에 대응 하 는 선택 가능 한 표 시 를 포함 할 수 있 습 니 다.
예제 템 플 릿 을 보 여 줍 니 다.
contact/{controller=Home}/{action=Index}/{id?}
다음 과 같은 몇 가 지 를 주의 하 세 요.1.괄호 안에 포함 되 어 있 는 것 을 표시 합 니 다.여기 에는 controller,action,id 등 세 개의 태그 가 있 습 니 다.
2.템 플 릿 에는 URL 의 텍스트 와 일치 하 는 글자 액면가 contact 가 포함 되 어 있 습 니 다.
3.controller(Home)와 action(Index)에 기본 값 을 제공 합 니 다.
4.선택 표 시 는 물음표 로 설명 할 수 있 습 니 다.
아래 URL 은 이 템 플 릿 과 일치 합 니 다:
일반적인 경로 가 URL 경로 에 대한 약속 을 만 듭 니 다.예 를 들 어 템 플 릿 을 지정 합 니 다.
1.첫 번 째 태그 가 컨트롤 러 에 매 핑 됨
2.두 번 째 태그 매 핑 방법
3.세 번 째 태그 가 선택 할 수 있 는 방법 매개 변수 id 에 매 핑 됨
템 플 릿 에서 컨트롤 러 와 방법 을 생략 할 수도 있 습 니 다.부족 한 값 만 제공 하면 됩 니 다.예 를 들 어 아래 의 경로 가 주소/one 에 매 핑 됩 니 다.defaults 를 통 해 필요 한 컨트롤 러 와 방법 표 시 를 제공 하기 때 문 입 니 다.
routes.MapRoute(
name: "goto_one",
template: "one",
defaults: new { controller = "Home", action = "PageOne" });
주:이 특정한 경 로 를 유 니 버 설 경로 에 추가 하 십시오.경로 가 정 의 된 순서에 따라 실행 되 기 때문에 특정한 경로 가 일치 하면 전체 일치 프로 세 스 가 종 료 됩 니 다.루트 중간 부품 은 컨트롤 러 와 방법 표시 만 사용 하여 컨트롤 러 방법 을 비 추기 때문에 같은 컨트롤 러 에 여러 개의 같은 이름 을 두 는 방법 은 이상 을 던 집 니 다.이 문 제 를 해결 하기 위해 방법 상의 IAction Constraint 특성(예 를 들 어 HttpGet,HttpPost 등 특성)을 사용 할 수 있 습 니 다.
[HttpGet("two")]
public IActionResult PageTwo()
{
return Content("(GET) Work/Two");
}
[HttpPost("two/{id?}")]
public IActionResult PageTwo(int id)
{
return Content($"(POST) Work/Two: {id}");
}
====start by sanshi=========================컨트롤 러 의 동명 방법 에 나타 난 이상 을 관찰 하기 위해 서 는 먼저 Configure()방법 을 수정 하고 개발 시 이상 처리 미들웨어 를 추가 해 야 합 니 다.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes => ....);
}
HomeController 수정:
public IActionResult PageTwo()
{
return Content("(GET) Home/Two");
}
public IActionResult PageTwo(int id)
{
return Content($"(POST) Home/Two: {id}");
}
정상 적 인 과부하 함수 처럼 보이 지만 컨트롤 러 에 넣 으 면 이상 이 발생 합 니 다.브 라 우 저 주소 표시 줄 에 입력:http://localhost:65415/Home/PageTwo,이상 페이지 보기:
====end by sanshi=========================
특성 경로
특성 경 로 는 컨트롤 러 와 방법 에 직접 경로 템 플 릿 을 제공 하여 이 루어 집 니 다.
템 플 릿 을 지정 하려 면[Route]나[HttpGet](또는 다른 동사)기능 을 사용 할 수 있 습 니 다.이 템 플 릿 들 은 글꼴 값 과 표 시 를 포함 할 수 있 습 니 다.(컨트롤 러 와 방법 표 시 를 포함 할 수 없습니다.)
실행 할 때 컨트롤 러 의 특성 템 플 릿 과 방법의 특성 템 플 릿 이 합 쳐 집 니 다.예 를 들 어 WorkController 에서 PageOne 방법 은/work/one 을 통 해 접근 할 수 있 습 니 다.
[Route("work")]
public class WorkController : Controller
{
[Route("one")]
public IActionResult PageOne()
{
return Content("Work/One");
}
}
소스 코드 다운로드 원문
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
.Net Core Excel 템플릿 읽기 Excel 파일 내보내기텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.