이 ASP.NET MVC 경로를 어떻게 만들어야합니까?
-
22-08-2019 - |
문제
다음 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는 라우팅에 대한 훌륭한 게시물을 가지고 있습니다 여기
제휴하지 않습니다 StackOverflow