2010-07-28 2 views
1

특히, 기본 디렉토리 이름 지정 구조는 [컨트롤러]/[ActionMethod]로 렌더링되므로 www.mysite.com/home/actionMethodName과 같은 렌더링 된 URL이됩니다.MVC2에서 actionMethod의 루트 경로를 허용하도록 global.config를 구성하는 방법은 무엇입니까?

컨트롤러 (이 예에서는 '집')를 암시하여 www.mysite.com/actionMethodName과 같은 URL을 얻을 수 있다면 어떨까요?

이런 종류의 구성에 대한 요청이 많지 않습니다. 나는 그것이 대회를 어기는 방법을 볼 수 있지만, 루트 경로가 필요한 많은 사람들이 있다고 상상할 것입니다.

답변

2

, 당신은 다른 URL을 좀 더 구체적 얻을 필요가 있습니다 예 :

routes.MapRoute("MyOtherControllerRoute", "Account/{action}", new { controller = "Account", action = "Index" }); 
routes.MapRoute("MyDefaultRoute", "{action}", new { controller = "Home", action = "Index" }); 

경로 테이블을 심문 할 때, 경우 www.mysite.com/Account과 같은 URL이 사용되면 첫 번째 경로와 일치하게됩니다. 왜냐하면 우리는 URL과 일치시키는 데 사용 된 패턴에 대해 특정 적이기 때문입니다. 그런 다음 www.mysite.com/DoSomething과 같은 작업을 수행하면 마지막으로 선택한 기본 경로가 사용되어 HomeController 유형에 DoSomething 액션을 호출합니다.

많은 MVC 개발자가 URL이 엄격하게 {something}/{something}/{something}이라고 생각하는 반면, 본질적으로 원하는대로 지정할 수 있습니다. 예를 들어 다음과 같은 경로를 사용할 수 있습니다. www.mysite.com/my-weird-and-wonderful-url 구체적으로지도 :

routes.MapRoute("Somewhere", "my-weird-and-wonderful-url", new { controller = "Whatever", action = "Whenever" }); 

희망이 있습니다.

+0

Matthew에게 감사드립니다. 그들의 통찰력을 제공했습니다. 솔루션을 신속하게 사용할 수있게 된 것을 기쁘게 생각합니다. – Neurothustra

2

사과 파이처럼 쉽게 - 당신은 단지 자신의 경로를 지정하십시오! =)

예 :

routes.MapRoute(
    "RootPathing", 
    "{action}", 
    new { controller = "Default", action = "Index" }); 

이 모든 경로를 잡는다 경로를 등록하고 경로에 대응하는 액션 이름으로 DefaultController에 매핑을 시도합니다. 그러나 포함 된 기본 경로 위에이 경로를 배치하면 DefaultController 이외의 다른 컨트롤러에 연결할 수 없으므로이 경로 아래에을 체인의 기본 경로로 지정하십시오. 그런 다음 컨트롤러 이름과 일치하지 않는 모든 경로와 일치합니다. 경로를 디버깅 할 때 Phil Haack's Routing Debugger을 살펴볼 가치가 있습니다. 당신이 URL의 {컨트롤러} 요소를 제거하기 위해 계획되어 있기 때문에

+0

지금은 이것을 확인할 시간이 없지만,이 경로보다 위에있는 URL이 있으면 기본 경로 (기본 경로와 거의 일치 함)와 일치하므로이 작업이 실패 할 것이라고 확신합니다. 이것은 컨트롤러를 찾을 수 없다는 예외를 던집니다. 대신이 경로 앞에 일치하는 특정 경로를 추가하여이 경로가 일치해야하는 URL과 일치하지 않도록 할 수 있습니다. –

+0

@Mattias : 그건 사실 일 겁니다. 지금 당장은 테스트 할 수 없지만,이 경우의 해결책은''HomeController' '에 대해''~/Home/{action} "'패턴을 사용하여 각 컨트롤러마다 특정 경로를 추가하는 것입니다. 쉽게 고정. 그리고 당신이 정말로 피할 수없는 문제입니다 - 당신이 경로 경로에서 어떤 행동을 선택할 수 있기를 원한다면 어떤 경로에서도 너무 일반적 일 수는 없습니다. 이는 라우팅이라는 개념의 한계이며 MVC 프레임 워크의 한계가 아닙니다. –

+0

@Tomas Lycken 물론 네. 또한 자신의 라우팅 클래스를 구현하고 URL이 유효한 동작인지 아닌지 확인한 다음 라우팅 목록에 URL을 추가 할 수 있습니다. 그러나이 경우 이전에 더 구체적인 경로를 작성하는 것이 좋습니다. –

관련 문제