2011-09-28 2 views
0

내 MVC2 응용 프로그램에서 에서 상속 된 AccountController 클래스가 있습니다. 나는 다음을 이루고 싶다 : 사용자가 Account/Payments/NewPaymentAccountController.ExecuteNewPayment() 메서드를 열려고 할 때 호출되어야한다. 요청을 MVC2의 특정 컨트롤러에있는 특정 작업으로 어떻게 라우팅합니까?

나는 다음과 같은 경로에 추가 :

routes.MapRoute(
    @"CreateNewRuntime", 
    @"{langId}/Account/Payments/NewPayment/{whatever}", 
    new { langId = @"default", controller = @"Account", action = @"ExecuteNewPayment"}); 

을하지만 난 /Account/Payments/NewPayment "요청 된 URL"와 HTTP 404 오류 메시지가 내가 디버거에서 그렇게 할 때 예외

거기에 위의 경로를 요청하려고 할 때

System.Web.Mvc.dll에서 'System.Web.HttpException'형식의 첫 번째 예외가 발생했습니다. 추가 정보 : '/ Account/Payments/NewPayment'경로의 컨트롤러를 찾을 수 없거나 IController를 구현하지 않습니다. .

내가 뭘 잘못하고 있니? 매핑은 어떻게 수행합니까?

답변

1

경로의 일부로 langid을 포함해야합니다. 기본값이 지정되어 있어도 MVC가 URI를 매핑하지 않습니다. 내가 경로 중 하나는 선택해야 /Account/Payments/NewPayment의 URI를 지정하는 경우

routes.MapRoute(
    @"CreateNewRuntime", 
    @"{langId}/Account/Payments/NewPayment/{whatever}", 
    new { langId = @"default", controller = @"Account", action = @"ExecuteNewPayment"}); 


routes.MapRoute(
    @"CreateNewRuntime1", 
    @"{langId}/{subLangId}/Account/Payments/NewPayment/{whatever}", 
    new { langId = @"default", subLangId= @"test", controller = @"Account", action = @"ExecuteNewPayment1"}); 

:

이 두 경로를 가지고? MVC가 langId에 대한 기본값을 사용한 경우 첫 번째 경로는 다른 경로보다 먼저 선언 된 이후 항상 사용됩니다. 두 개를 바꾼 경우 두 번째 것이 항상 호출됩니다.

URI의 시작 부분에 다양한 데이터가있는 경우이를 지정해야하며 경로를 지정할 때 기본값을 사용할 수 없습니다. 당신은 내가 당신이이 노선을 이용해야 믿고 /eng/Account/Payments/NewPayment의 URI와 /eng/e/Account/Payments/NewPayment

+0

슬픈 일입니다. 따라서'/ language/Account/Payments/NewPayment' /'Account/Payments/NewPayment'가 동일한 컨트롤러 - 액션 쌍에 매핑되거나 더 좋은 방법이되도록 여분의 경로를 지정해야합니까? – sharptooth

+0

@sharptooth - 유감스럽게도 그 두 가지 시나리오에 대한 경로가 필요합니다. – amurra

0

{language}에는 langidlanguage = @"default"으로 설정되어 있습니까? 당신이 필요로하는 무엇

+0

나는 그것을 바꿨으나 전혀 도움이되지 못했다. 나는 또한 그러한 불일치가있는 많은 경로를 가지고 있습니다. 그들은 일을합니다. – sharptooth

0

는 가 this

안부에서보세요 사용자 지정 경로 처리기입니다.

2

을해야이 두 경로가 타격을하기 위해서는, 여기 첫번째 경로에, 나는 LANGID과를 사용하고 있지 않다

routes.MapRoute(
       @"CreateNewRuntime1", 
       @"Account/Payments/NewPayment/{whatever}", 
       new { langId="en-US",controller = @"Account", action = @"ExecuteNewPayment" }); 

     routes.MapRoute(
       @"CreateNewRuntime2", 
       @"{langId}/Account/Payments/NewPayment/{whatever}", 
      new { controller = @"Account", action = @"ExecuteNewPayment" }, 
      new { langId = "[a-z]{2}-[a-z]{2}" }); 

주에서 langId 기본값을 "en-US"로 설정합니다. 두 번째 경로에서는 langId가 필요하지만 정규 표현식이 있으므로 페이지의 다른 경로가 방해받지 않습니다. 이 정규식이 없으면 langid가 다른 것일 수 있습니다.

관련 문제