2010-03-27 3 views
9

레거시 URL 라우팅에 대해 ASP.Net MVC routing legacy URLs passing querystring Ids to controller actions 및 다른 여러 유사한 게시물을 보았습니다. "RouteData에"컨트롤러라는 항목이 있어야합니다. 빈 문자열 값. " 이 문제를 해결하기 위해 내게 어떤 힌트도주지 않았다.쿼리 문자열 매개 변수를 사용하여 레거시 URL 다시 쓰기

 routes.Add(
      "Legacy", 
      new LegacyRoute("fooref.aspx", 
      "FooRef", 
      new LegacyRouteHandler()) 
     ); 

     routes.MapRoute(
      "FooRef", 
      "{controller}/{action}", 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       foo_id = UrlParameter.Optional, 
       bar_id = UrlParameter.Optional 
      } 
     ); 

나는 필 Haack의 경로 디버거를 사용하는 경우, 그것은 fooref 나타냅니다

나는 위의 링크에 설명 된 기존 라우팅 클래스를 구현했습니다, 이것은 내가 라우팅 테이블에 정의한 것입니다 .aspx가 일치하지만 경로 디버거를 사용 중지하면 위의 오류가 발생합니다. 명령문 순서를 바꾸면 /ctprefer.aspx에 "자원을 찾을 수 없습니다"라는 메시지가 표시됩니다. 따라서 다른 순서로 배치 할 때 유효한 경로로 표시됩니다.

누락 된 컨트롤러 참조는 어디에서 신고해야합니까?

ASP.NET MVC 2 RTM에 대한 라우팅 요구 사항이 변경 되었습니까?

+0

이 여전히 유효한 질문이다하거나 시간이었다 내 블로그에 MVC 3와 함께 작동 코드를 게시? 혹시 해결책을 찾았습니까? – jcolebrand

+0

아니요, 아직 해결책을 찾지 못했습니다. 아마도 MVC 3을 사용하면이 문제를 해결할 수 있습니다. 이것을 잠시 보살펴주지 않았습니다. –

답변

2

이 솔루션은 MVCHandler가 아닌 IHttpHandler를 직접 사용하는 것입니다. http://www.olsonsoft.com/blogs/stefanolson/post/Handling-Legacy-Urls-in-AspNet-MVC-3.aspx

... 스테판

+0

고마워, 스테판. 이것은 흥미로운 것 같습니다. URL 방향에 대한 데이터 중심 접근 방식으로 작동하는지 확신 할 수 없지만 미리 선언 된 목록에서 작동하는 것처럼 보입니다. 이 작업을 다시 할 수 있을지 모르겠지만 코드를 읽는 것만으로도 작업해야하는 것처럼 보입니다. 이 코드를 수락 된 응답으로 표시하고이 코드로 작업하게되면 전체 테스트를 해 보겠습니다. –

0

IIS의 경우 URL Rewrite module을 살펴볼 수 있습니다. 레거시 경로로 앱을 '오염시키지 않고도 기존 URL을 새 MVC URL로 변환하는 데 사용할 수 있습니다.

귀하의 솔루션에 맞는지는 모르지만 다른 대안이 필요합니다.

+0

Jakub, 제안에 감사드립니다. 이 기능을 알고 있습니다. 이 웹 응용 프로그램은 내 팀에서 관리하지 않는 다른 IIS 서버에서 호스팅 될 수 있기 때문에 서버 수준이 아닌 웹 응용 프로그램 수준에서 제어되는 것을 찾고있었습니다. –