处理ASP MVC中的复杂URL

时间:2009-05-06 09:24:06

标签: asp.net-mvc asp.net-mvc-routing

我 - 我认为 - 在ASP MVC 1.0中处理的复杂URL: 我在大多数控制器中的所有操作始终需要两个参数:Account和Project。这是每项行动要求的基础。这意味着典型的URL如下所示:

http://abcd.com/myaccount/projects/project_id/sites/edit/12

在这个例子中: myaccount 是帐户名称。 项目可以是控制器,其他选项可以是位置员工 project_id myaccount 中项目的ID,网站可以是控制器,其他选项如员工或的付款即可。 修改是一项操作, 12 是已修改网站的ID。 (希望这很清楚)

现在,一个选项是通过向所有操作添加两个额外参数来创建路径并将project_id和account传递到控制器的所有操作。这不是真正需要的,而且我不确定这两个控制器(项目和站点)是否可以在这里工作。

我理想的情况是使用某种上下文来调用控制器操作并将project_id和myaccount存储在那里。其余的参数可以通过以下方式处理:

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

关于如何/在何处发生这种情况的任何想法?这又如何与ActionLink一起使用(即根据此上下文生成正确的链接)?

谢谢!

2 个答案:

答案 0 :(得分:1)

您首先需要将令牌添加到您的路线中,例如{company}/projects/{project}{controller}/{action}/{id}。然后,如果您编写了自己的IControllerFactory,那么通过构造函数将RouteData中的值推送到控制器中非常容易,或者您想要这样做。可能最简单的入门方法是继承DefaultControllerFactory并覆盖CreateController方法。

答案 1 :(得分:-1)

这对我来说没有多大意义。为什么你的路线类似于以下内容:

{controller}/{id}/{controller}/{id}