2013-04-19 3 views
3

에서 경로 가득 얻을이 MVC4의 asp.net

http://localhost:5119/ 

http://localhost:5119/Home 

(에 그에서 보여줍니다 무엇을 리디렉션 내 브라우저 URL 바, 표시하고 싶지 않음/집)

내 기본 경로가 어디로 이동하는지 알지만 브라우저에서 URL 줄을 다시 작성하는 원인을 파악할 수 없습니다. Visual Studio 2012의 기본 예제에는 기본 URL로 이동할 때이 문제가 없습니다. 내 루트 디버그 사진을 첨부하고 있습니다 (도움이되지 않지만 약간의 가치가있을 수 있음).

감사합니다. -Peter

추후에 추가. 그것은 당신이 때문에 {year} 매개 변수에 대한 기본값이 기본 경로를 위의 경로 Home/{year}의이를보고있다

 // HOME 
     int currentYearInt; 
     Int32.TryParse(currentYear, out currentYearInt); 
     routes.MapRoute("HomeRouteAll", "Home/{yearInt}", 
        new 
        { 
         /* Your default route */ 
         controller = "Home", 
         action = "Index" 
        }); 



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

enter image description here

+0

이것은 이상한 행동입니다. 그것은'/'로 가야합니다. 도움이되지만 경로 게시를 확신하지 못합니다. –

답변

1

경로 코드의 관련 부분이다.

는 라우팅 엔진은 다음과 같은 결정을 내린다 : 일치하는 경로 목록의 맨 위에 뭔가

  • 봐에서

    1. 시작 어떤 경로 값 (컨트롤러 = "홈", 액션 = "인덱스").
    2. 첫 번째 경기에서 return이 귀하의 URL입니다. 당신이 올해 매개 변수에 대한 일치하는 컨트롤러 (홈)과 행동 (지수)뿐만 아니라 로 기본값을 가지고 있기 때문에

    , 경로 엔진은 따라서 URL http://domain.com/Home을주는 경로 Home/{year}에 일치한다.

    빠른 수정 것 중 하나)하게 해 디폴트 값 (Home/2013), B)가 다른 컨트롤러 (NewName/{year})까지 무엇이든 이동, C)) 다른 행동 (NewIndex/{year} 해당 이동을하지 않거나 d)에 대신 ID의 올해 매개 변수를 사용하여 기본 경로를 업데이트

    routes.MapRoute(
           "Default", 
           "{controller}/{year}/{action}", 
           new {controller = "Home", action = "Index", year = 2013}); 
    

    편집

    난 당신이 지금까지 경로 정의의 tryParse 물건으로 무엇을 정말 확실하지 않다

    ,하지만 내 테스트, 이것은 w를 달성하는 것 같았다. 모자는 당신이하고 싶은됩니다

    routes.MapRoute(
           name: "Test", 
           url: "Home/{year}", 
           defaults: new { controller = "Home", action = "Index"}, 
    //this line causes the year to be an integer 
    constraints: new { year = @"\d+" } 
           ); 
    
          routes.MapRoute(
           name: "Default", 
           url: "{controller}/{action}/{id}", 
           defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
          ); 
    

    행동 :

    http://domain.com/ -> 호출 홈 컨트롤러, 올해 매개 변수에 null 값 (홈/2,013없이 리디렉션)과 색인 작업을

    http://domain.com/Home/2010 -> Home Controller를 호출하여 연도 매개 변수로 2010 년 인덱스 작업

    http://domain.com/Home/ -> 콜 홈 컨트롤러, 인덱스 작업에 null 값이 포함됨.

    두 경로 중 첫 번째 경로에서 기본 연도를 정의한 경우 http://domain.com/Home으로 이동하면 2013 년에 홈 컨트롤러, 색인 작업을 호출하여 리디렉션이 계속 발생하지 않습니다. 당신이 홈/색인 작업을 명중 할 때, 당신은 자동으로 다음, 2013 년 인구를 가지고 당신의 지능을 변경하려면

    public ActionResult Index(int year){...} 
    

    :

    마지막으로, 나는 홈/색인 작업을 이런 식으로 뭔가를 보이는 의심 nullable 매개 변수를 사용하고 경로가 아닌 해당 경로를 지정하십시오. 더 {year} 매개 변수와 일치하는대로

    public ActionResult Index(int? year){ 
        if(!year.hasValue){ 
         year = 2013; 
        } 
    

    대신 경로의 여기 로직을 ​​수행함으로써, 당신은/홈으로 리디렉션을 방지 없습니다.

  • +0

    안녕하세요 토미, 모든 문을 열어 보았습니다. 선택의 폭이 가장 컸습니다. 내 홈 경로를 // HOME으로 변경했습니다. int currentYearInt; Int32.TryParse (currentYear, out currentYearInt); routes.MapRoute ("HomeRouteAll", "홈/{yearInt}", 새로운 { /* 귀하의 기본 경로 */ 컨트롤러 = "홈", 행동 = "인덱스" }); 그러나 나는 여전히 기본적으로 나를 떠나게하는 행동을 취합니다 .../가정 –

    +0

    BTW, 내가 명시 적으로 언급하지 않은 다른 경로에 대해 생각하기 때문에 기본 노선을 변경하고 싶지 않습니다. –

    +0

    @ PeterKellner 형식 지정 이유로 질문에 해당 내용을 게시 할 수 있습니까? – Tommy