【问题标题】:How should i make this ASP.NET MVC Route?我应该如何制作这个 ASP.NET MVC 路由?
【发布时间】:2009-02-07 22:51:10
【问题描述】:

我希望有以下 url(s).. 我不知道我应该如何做以下事情:

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"]);

更新 1

如果有帮助,我希望在默认 HomeController 上运行所有这些 Index 操作。 (实际上,我已将 HomeController 重命名为 PostController,但这并不重要/不应该影响问题)。

【问题讨论】:

  • 这看起来你正在针对 Home 控制器上的 Index 操作运行所有内容。对吗?
  • 这是正确的。这就是我想要的。

标签: asp.net-mvc routes


【解决方案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();
}

当然,这是控制器“主页”和操作“索引”的默认设置。但我希望这一点很清楚。

Scott Guthrie 有一篇关于路由Here 的出色帖子

【讨论】:

  • 那么你是否建议我使用以下路线: routes.MapRoute("Home", "", new {controller = "Post", action = "Index"}
  • 糟糕。错字。 controller = "Post" 应该是:new {controller = "Home"...}。苏兹。
  • routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" }) ;是的,默认的,我已经做了示例项目来尝试,它运行良好。
  • 克尔!你是对的!!!我认为,如果我有方法 signature=> public ActionResult Index(string page, string tags) 那么我需要在 MapRoute(..) 代码中有页面和标签,否则它将无法找到正确的索引方法。 kewl!!!!
猜你喜欢
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2011-05-06
相关资源
最近更新 更多