2012-02-06 3 views
0

왜 ASP.NET MVC 라우팅과 같은 문제가 있는지 알 수 없습니다. 현재 설치 한 경로를 알려주는 도구가 있었으면 좋겠습니다.잘못된 라우팅은 ASP.NET MVC입니다.

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

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

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

가 나는 내가 액세스 할 수 있기를 기대하고 있었다 HomeController.cs

public ActionResult Register() 
{ 
    return View(); 
} 

에 정의 된 다음 한 :에 관계없이, 내 global.asax.cs에서

내가 다음이 파일 이 페이지를 /account/register 브라우저에서 방문하십시오. 그러나, 나는 404를 계속 얻는다. 내가 무엇을 잘못하고 있냐?

+0

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – SLaks

답변

1

에 대한 자세한 정보를 찾을 수있는이 덩어리를 패키지 http://nuget.org/packages/Glimpse.Mvc3 를 사용해보십시오 이것은에 /account/register 의지 경로를 의미합니다 홈 컨트롤러에 조치를 등록하십시오. 또한 @Html.ActionLink("Register", "Register", "Home")을 통해 생성 한 액션 링크 및 기타 링크는 URL을 생성합니다. /account/register

'일치하는 URL'을 URL과 대조되는 패턴으로 생각하십시오.

원래 경로 맵의 문제점은 /account/controllername/actionname과 같은 URL을 찾고 있다는 것입니다. 따라서 /account/register으로 가면 컨트롤러 이름으로 register을 취하고 기본 액션 이름 (이 경우 레지스터)을 취하고 'register'액션이 'register'컨트롤러에 없기 때문에 404.

업데이트 Robert의 의견에 따라 제안 된 경로를 업데이트했습니다.

로버트 (Robert)가 말했듯이이 모든 것이 '계정'컨트롤러를 만들고 거기에 '등록'작업을 이동하면 더 간단해질 수 있습니다. 그런 다음 'SignUp'경로를 삭제하고 기본 경로 만 사용할 수 있습니다. 생각해 본다면 '홈'컨트롤러보다 '등록'작업을하기에 더 좋은 곳이라는 데 동의 할 것입니다.

+0

실제로는 'account/register'를 사용하려면 기본 동작 값을 제거해야합니다. 그렇지 않으면'account '만. 생성 된 URL에는 * register *라는 단어가 절대 포함되지 않습니다. 수동으로 URL을 작성하면 물론 잘 작동합니다. –

+0

BTW :'HomeController'에서 계정 작업을하지 않기를 권하고 싶습니다. 그것을 다른 곳에서 갖는 것이 더 낫습니다. 'AccountController' 어쩌면? 컨트롤러 이름이 * account *이기 때문에 기본 라우팅이 계속 적용됩니다.즉, 영업 이익이 명백한 이익을 위해 라우팅을 지나치게 복잡하게 만들 가능성이 높습니다. 그들은 오히려 그냥 기본 라우팅 및 별도의 컨트롤러와 함께 있어야 ... –

3

/Account/Register은 첫 번째 경로와 일치합니다.

단어 Register{controller}과 일치하므로 RegisterController 컨트롤러가 검색됩니다.

0

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

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

을 대체 당신은 약 엿볼http://getglimpse.com/

관련 문제