我希望有以下网址..而且我不确定我应该如何执行以下操作:
1)在global.asax中注册的路由
2)控制器方法
- 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"]);
我希望在默认的HomeController上运行所有这些Index操作,如果这有帮助的话。 (实际上,我已将我的HomeController重命名为PostController,但这并不重要/不应该影响问题。)
答案 0 :(得分:1)
实际上,对于您要做的事情,您不需要额外的路线。默认的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();
}
当然,对于Controller“Home”和Action“Index”来说,这是默认值。但我希望这一点很清楚。
Scott Guthrie关于路由Here
的帖子非常好