.NET MVC2如何更改传入的URL参数

时间:2010-12-03 20:30:16

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

我正在使用.NET MVC 2 如果传入请求包含URL:

http://something.com/1234

其中1234是{id}参数。我希望能够使用id从数据库中获取一些数据,然后更改URL以使其进入有效的控制器和操作。

新网址应如下所示:

http://something.com/area/username/controller/action/id

在数据库中查找原始ID(1234),数据将转换为特定的{username} / {controller} / {action} / {id}。

我在AreaRegistration类中设置了以下路由:

context.MapRoute(
    "route1",
    "area/{controller}/{action}/{id}",
    new { action = "Index", controller = "Home" },
    new string[] { "MyApp.Areas.Controllers" }
        );

context.MapRoute(
    "route2",
    "area/{controller}/{id}",
    new { action = "Index", controller = "Home" },
    new string[] { "MyApp.Areas.Controllers" }
);

我似乎无法弄清楚如何/在何处查找数据库数据并更改/重写URL。我尝试过实现自定义的RouteHandler和RouteBase,但似乎都没有做我需要的。

这是我的第一篇SO帖子,请原谅我,如果我的问题不清楚的话。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您需要返回RedirectToAction()才能执行网址重写...

return this.RedirectToAction(action, controller);

有一大堆重载用于指定ID,路由值等...

至于在数据库中查找,这将取决于您的数据访问模型。假设实体框架或Linq,它将类似于:

DataClasses1DataContext dc = new DataClasses1DataContext();

var record = from a in dc.GetTable<Order>() select id, username;

澄清MVC如何运作......

我使用了http://example.com/controller/action/idhttp://example.com/area/controller/action/id

这样的网址

并在指定的控制器上调用相应的操作方法。通常你会返回一个视图,但是你可以发回很多特殊数据类型以获得不同的结果,例如JSON数据,HTTP重定向等。

如果URL中省略了区域/控制器/操作,则使用路径的默认值。

因此...

如果您只想显示相应的页面,只要默认操作/控制器具有显示相应视图的代码,您就可以将URL保留为http://example.com/1234

如果您出于审美原因需要更改网址,您可以使用ID中的默认控制器/操作,并返回RedirectToAction,指向您想要的网址的Controller / Action。

值得注意的是,如果您在默认控制器上有2个操作,它将生成最小的URL:

HomeController -> Index(int id)
HomeController -> ShowDetails(int id)

索引的URL类似于

http://example.com/1234

重定向到ShowDetails将提供如下URL:

http://example.com/ShowDetails/1234

如果ShowDetails在另一个(非默认)控制器上,你会得到这样的结果:

http://example.com/OtherController/1234

假设路线遵循标准/Controller/Action/Id格式。不用说,通过注册不同的路由,它会在适当的时候交换参数。

希望有帮助吗?