2011-12-29 5 views
1

컨트롤러에 3 가지 동작이 있습니다. 내가 처음 두 /posts/new을 싶습니다, 그리고 마지막으로 내가 지금 정의 /posts/{filter}?page=N내 경로가 예상대로 작동하지 않는 이유는 무엇입니까?

//all are in the PostsController 
[HttpGet] 
public ActionResult New() 

[HttpPost] 
public ActionResult New(PostView post) 

[HttpGet] 
public ActionResult Browse(string filter, int page) 

라우트 할 것은 다음과 같습니다

routes.MapRoute("BrowsePosts", 
    "posts/{filter}", 
    new { controller = "posts", action = "browse", filter = "", page = 1 }, 
    new { controller = "posts", action = "browse", page = @"\d+" }); 

routes.MapRoute("NewPost", 
    "posts/new", 
    new { controller = "", action = "" }, 
    new { controller = "posts", action = "new" }); 

은 내가 트릭을 할 것입니다 그들에 넣어 제약을 생각 요청은 모두 첫 번째 경로를 통해 전송됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

주위의 두 경로를 전환하십시오 ... –

답변

5

경로가 "BrowsePosts"경로와 일치하므로 "NewPost"경로가 먼저 있어야합니다.

경로는 사용 된 경로 인 첫 번째 일치 순서대로 순서대로 분석됩니다.

먼저 "NewPost"경로를 매핑해야합니다.

+0

나는 그것을 시도했다고 생각합니다. 아프지 만, 다시해라. – Joe

+0

놀아 볼 시간이 없었다. (나는 오늘 밤 할 것이다. 제약이 그것을 막지 않아야합니까? – Joe

+0

@Joe 경로를 스택으로 생각할 수 있습니다. 즉, 순서대로 분석됩니다. ASP.NET은 "posts/new"경로를보고 "posts/{filter}"와 첫 번째 일치시킵니다. 경로의 모호함으로 인해 올바른 것으로 간주되며 route 매개 변수'filter'에서 'new'가 전달되어야한다고 생각합니다. 이 때문에 "NewPost"경로에 도달하지도 않습니다. 그러나 스위치를 켜면 "posts/new"경로가 "NewPost"경로와 일치합니다. 경로 스택에서 첫 번째 경로가 있기 때문입니다. –

관련 문제