我正在使用.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帖子,请原谅我,如果我的问题不清楚的话。任何建议都表示赞赏。
答案 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/id
或http://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
格式。不用说,通过注册不同的路由,它会在适当的时候交换参数。
希望有帮助吗?