문제

다음 URL을 갖고 싶습니다. 그리고 다음을 어떻게 해야하는지 잘 모르겠습니다.

1) Global.asax에 등록 된 경로
2) 컨트롤러 방법

URL/경로

- http://www.mysite.com/
- http://www.mysite.com/?page=2
- http://www.mysite.com/?tags=fooBar
- http://www.mysite.com/?page=2&tags=fooBar

주목하십시오 - 나는 원하지 않습니다 http://www.mysite.com/{page}/{tags}/ 그 차이로 인해 그 차이가 발생한다면. 또한 기본 경로에 대해 이해하지만 필요한 작업을 수행하기 위해 조정하는 방법을 잘 모르겠습니다.

마지막으로 html.actionLink (..)를 사용하는 방법도 알고 있으므로 사용 방법에 대해 걱정하지 않습니다.

제안이 있습니까?

단위 테스트

나는 또한 다음과 같이 단위 테스트를 할 수 있다는 인상을 받고 있습니다 .- (mvcfakes 사용) ...

// Arrange.
var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);  

// Act.
context = new FakeHttpContext("~/?page=2&tags=fooBar");
routeData = routes.GetRouteData(context);

// Assert.
Assert.AreEqual("Home", routeData.Values["controller"]);
Assert.AreEqual("Index", routeData.Values["action"]);
Assert.AreEqual(2, routeData.Values["page"]);
Assert.AreEqual("fooBar", routeData.Values["tags"]);

업데이트 1

도움이된다면 기본 HomeController에서 이러한 모든 색인 작업을 실행하기를 바랍니다. (실제로, 나는 홈 컨트롤러로 이름을 postcontroller로 바꾸었지만 실제로는 중요하지 않습니다. 문제에 영향을 미치지 않아야합니다).

도움이 되었습니까?

해결책

실제로 당신이하려는 일을 위해 당신은 추가 경로가 필요하지 않습니다. 기본 MVC 경로는 요청을 잘 처리합니다. 컨트롤러 동작 매개 변수 이름은 URL 매개 변수 이름과 일치해야한다는 점을 명심해야합니다.

URL: http://www.mysite.com/?page=2&tags=fooBar

public ActionResult Index(string page, string tags)
{
   ViewData["Message"] = string.Format("Page={0}, Tags={1}", page, tags);
   return View();
}

물론 그것은 기본값으로 컨트롤러 "홈"및 액션 "색인"을위한 것입니다. 그러나 요점은 내가 희망하는 것이 분명하다.

Scott Guthrie는 라우팅에 대한 훌륭한 게시물을 가지고 있습니다 여기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top