[번역]ASP.NET Core 2.0 루트 엔진 상세 설명

본 고 는 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 은 이 템 플 릿 과 일치 합 니 다:
  • /contact/Home/Index/1:모든 표 시 는 값 이 있 습 니 다
  • /contact/Home/Index:선택 할 수 있 는 표 시 를 무시 합 니 다
  • /contact/Home:action 표 시 를 무시 하고 기본 값 Index 를 사용 합 니 다
  • /contact:controller 와 action 표 시 를 무시 하고 기본 값 인 Home 과 Index 를 각각 사용 합 니 다
  • 일반적인 경로
    일반적인 경로 가 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");
    
      }
    
    } 
    
    소스 코드 다운로드
    원문
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기