0

내 작업 중에 URL 재 작성 문제 하나를 해결해야합니다. 이렇게 처리 된 URL이 같아야합니다MVC4/{controler}/{id} 대신/{controler} - {id}로 라우팅하십시오.

{controller}/{action}-{id} 

대신

{controller}/{action}/{id} 

: 나는 템플릿으로 URL을 사용할 필요가

myController/myAction-128 

(128)는 매개 변수

내 노선도 :

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

      routes.MapRoute(
       name: "NewRoute", // Route name 
       url: "{controller}/{action}-{id}/{extId}", // URL with parameters 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, extId = UrlParameter.Optional } // Parameter defaults 
      ); 
     } 

컨트롤러 코드 :

[HttpGet] 
     public ActionResult DocumentDetails(int? id) 
     { 
      if (doc.HasValue) 
      { 
       ... 
      } 
     } 

이 경로가 성공적인 결과를 제공하지 않습니다. 404 오류가 여전히 있습니다. "/"대신 /를 사용하면 모든 것이 정상이지만 JS보기 환경은 작동하지 않습니다.

해결할 수있는 방법이 있습니까? 덕분에 모든 도움을 주실 수 있습니다.

답변

4

경로는 정의 된 순서와 동일한 순서로 평가되므로 동일한 순서를 따르십시오. 또한 id (예 : 숫자)에 대한 제약 조건을 추가하면 라우팅 엔진이 경로를 명확히하는 데 도움이됩니다. 예제에서 id 토큰을 선택적으로 만들 수는 없지만 경로의 마지막 부분 만 선택적으로 사용할 수 있습니다. 그래서

은 :

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "NewRoute", 
     url: "{controller}/{action}-{id}/{extId}", 
     defaults: new { controller = "Home", action = "Index", extId = UrlParameter.Optional }, 
     new { id = @"\d+" } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
+0

감사합니다.이 코드는 작동합니다. Btw : @ "\ d +"경로의 숫자에 대한 정규 표현식입니까? –

+1

예,'\ d +'는 하나 이상의 숫자와 일치하는 정규 표현식입니다. –

0

내가 요청을 생각하고는 첫 번째 라우팅 규칙 다음 액션 ID가 전체 작업으로 간주되지 않는다 의한되는 프로세스가 발견되고있다.

기본 경로 앞에 NewRoute을 설정하십시오. 코드를 위로 이동하십시오.

+0

모두, 주문의 변경이 많은 도움이되었습니다;) –

관련 문제