我需要在我的asp.net MVC网站上实现类似SO的功能.
例如,当用户去https://stackoverflow.com/questions/xxxxxxxx
加载后,主题行与url连接,url变成这样的https://stackoverflow.com/questions/xxxxxxxx/rails-sql-search-through-has-one-relationship
以上“/ rails-sql-search-through-has-one-relationship”部分被添加到url.
在webforms这很简单,我可以使用url重写.但不知道如何在MVC中完成这个
以下行来自Global.asax文件
routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Account",action = "logon",id = UrlParameter.Optional } // Parameter defaults );
解决方法
这叫做slug路线.实现这一点的一个方法是定义一个带有可选slug参数的路由,在控制器方法中检查是否提供了参数
routes.MapRoute( name: "Question",url: "Question/{id}/{slug}",defaults: new { controller = "Question",action = "Details",slug = UrlParameter.Optional } );
然后在QuestionController(假定一个id将始终被提供)
public ActionResult Details (int id,string slug) { if (string.IsNullOrEmpty(slug)) { // Look up the slug in the database based on the id,but for testing slug = "this-is-a-slug"; return RedirectToAction("Details",new { id = id,slug = slug }); } var model = db.Questions.Find(id); return View(model); }