2

저희 웹 사이트를 엉뚱한 CMS에서 멋진 사용자 정의 된 MVC 웹 사이트로 이동하는 중입니다. 지금까지 모든 작업이 순조롭게 진행되었지만 라우팅 관련 문제가 있습니다.ASP.NET MVC 2.0 간단한 라우팅 질문

저희 회사는 많은 마케팅 이메일과 편지를 발송합니다. 여기에서는 사용자가 방문 페이지로 이동하도록하여 캠페인의 진행 상황을 추적하고 더 많은 정보를 제공합니다. 따라서 편지에서 "www.OurSite.com/LandingPage 방문"이라고 말합니다. 그러나 MVC에서는 모든 페이지가 기본적으로 해당 컨트롤러의 폴더에 배치됩니다.

그래서 나는 나의 홈 컨트롤러에 LP라는 페이지를 가지고 있다고, 그래서 URL이 내가 같은 www.OurSite.com/LP되기위한 필요한 것은 www.OurSite.com/Home/LP

입니다 이전에는 새로운 웹 사이트를 시작하면 현재 실행중인 마케팅 캠페인에서 404를 제공하지 않습니다. 게다가 입력하기가 훨씬 좋기 때문에 앞으로도 계속 사용하지 않을 것입니다.

이 기본 경로에 기반 :

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

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

나는 이런 식으로 뭔가 만드는 시도했다 :

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

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

    routes.MapRoute(
     "LandingPage", 
     "{action}/{id}", 
     new { controller = "Home", action = "LandingPage", id = UrlParameter.Optional } 
    ); 
} 

을하지만 내 문제가 해결되지 않습니다.

나는 인터넷 검색을 수행했으며, 실제로 적용되지 않는 복잡한 라우팅을위한 모든 것입니다. 나는 이것을 매우 역동적으로 만드는 것에 관심이 없다. 캠페인을 실행할 때마다 새로운 경로를 만드는 데 문제가 없습니다.

이 페이지의 모든 사람들이 홈 컨트롤러에있는 것은 아닙니다. 따라서 경로 제거만으로는 효과가 없습니다. 방문 페이지에는 많은 컨트롤러가 있습니다.

답변

4

코드를 편집했습니다 (http://pastie.org/1054360). 새 경로를 기본 경로 앞에 두어야했습니다. 경로를 지정할 때 어떤 경로가 가장 일치하는지는 중요하지 않으며 URL과 일치하는 첫 번째 경로가 호출됩니다. 귀하의 예에서 http://domain.com/CPA2010은 제한이 없기 때문에 먼저 기본 경로와 일치합니다. 그것은 CPA2010 컨트롤러의 색인 작업을 찾습니다. 여기에서 코드를 시도하면 제대로 작동합니다.

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "CPA2010Route", // Route name 
      "CPA2010", // URL with parameters 
      new { controller = "Home", action = "CPA2010" } // Parameter defaults 
     ); 

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

    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 
    } 
} 
+0

이 worke 디. 고맙습니다. 그러나 컨트롤러를 반환 View ("CPA2010");을 말하도록 변경해야했습니다. 내가 돌아 왔을 때 View ("~/Views/Home/CPA2010.aspx"); 허용되지 않는다는 오류가 나타납니다. 감사! –

0

경로가 올바른 동작으로 전달되면 올바른보기가 반환됩니다. 즉 당신은보기의 실제 경로가 될/홈/LandingPage가. "경로가

routes.MapRoute(
     "CPA2010Route", // Route name 
     "CPA2010", // URL with parameters 
     new { controller = "Home", action = "CPA2010" } // Parameter defaults 
    ); 

는 그 다음 LandingPage의 행동에 당신이 경로를 반환 될 것"www.OurSite.com/LandingPage "을 가지고있을 수 있습니다 보기 :

public ActionResult CPA2010() 
{ 
    return View("~/Views/Home/CPA2010.aspx"); 
} 

귀하의 기본 경로는 루트는 정의 된 순서에서 마지막 갈 필요하거나 그렇지 않으면이 경로와 다른 모든 일치하는 것입니다 그런 다음 시도하고 라우트 홈 컨트롤러 색인 행동 것이다. 이 경로를 맨 위로 이동하면 올바르게 일치하고 404가 사라집니다.

+0

나는이 시도하는 듯했으나 여전히 나를 위해 404을 생산하고있다. ( 내 경로는 다음과 같습니다 routes.MapRoute ( "CPA2010Route", // 경로 이름 "CPA2010", // 매개 변수를 URL 새로운 {= "홈"컨트롤러, 액션 = "CPA2010"} // 매개 변수의 기본값 ) 내 홈 컨트롤러 코드는 다음과 같습니다 공공 ActionResult CPA2010() { 반환보기 ("~ 조회수/홈/CPA2010.aspx"); } 지저분한 코드를 만들어 –

+0

오 신, 당신 또한 여기에서 볼 수 있습니다 : http://pastie.org/1054360 –

+0

Duk : 코드를 물결표로 둘러싸 야합니다 – abatishchev

3

두 가지 문제가있는 것으로 보입니다.

첫 번째는 경로를 추가 할 때 순서가 중요합니다.

기본 경로는 문자 그대로 사이트에 대한 모든 요청과 일치합니다. 마지막으로 추가 된 것이 아니기 때문에 다른 경로는 검사되지 않습니다.

당신이 그 경로의 순서를 교체 한 후에는 아마를 사용하려면 : http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

당신이 참조하고 Global.asax에에 코드 한 줄을 추가하기 만하면됩니다 당신은 많은거야 떨어져 일하는 더 좋은 정보.

그러나 앞서 언급 한 것처럼 기본 경로가 추가 될 때까지 올바른 경로가 추가로 실행되지 않습니다.

3

View()으로 전화하는 중에 오타가있는 것 같습니다.

시도 : View("~/Views/Home/CPA2010.aspx") 또는 View("CPA2010")하거나 View()