我在MVC 5网站上有一个新闻和一个CARS部分,到目前为止,我为新闻定义了以下路由;
//route to cheat routing engine to generate id-slug
routes.MapRoute("NewsForReal", "news/{idandslug}", new { controller = "News", action = "Show" });
routes.MapRoute("News", "news/{id}-{slug}", new { Controller = "News", action = "Show" });
这是因为我的NewsController.cs
文件中的以下代码分割/连接上面的路由参数;
public ActionResult Show(string idandslug)
{
var parts = SeperateIDandSlug(idandslug);
if (parts == null)
return HttpNotFound();
var news = Database.Session.Load<News>(parts.Item1);
if (news == null || news.IsDeleted)
return HttpNotFound();
//redirect urls using correct slug if incorrect - SEO broken URLs
if (!news.Slug.Equals(parts.Item2, StringComparison.CurrentCultureIgnoreCase))
return RedirectToRoutePermanent("Post", new { id = parts.Item1, slug = news.Slug });
return View(new NewsShow
{
News = news
});
}
private Tuple<int, string> SeperateIDandSlug(string idandslug)
{
var matches = Regex.Match(idandslug, @"^(\d+)\-(.*)?$");
if (!matches.Success)
return null;
var id = int.Parse(matches.Result("$1"));
var slug = matches.Result("$2");
return Tuple.Create(id, slug);
}
我还想为汽车部分使用类似的格式,其中第一个值始终是实体ID:
“/ carsforsale / 15489-ford-fiesta-2009-petrol-manual-black”
我可以通过复制和更新SeperateIDandSlug
函数来执行此操作,然后添加构建URL所需的更多参数吗?或者我可以通过使用约束来完成工作吗?
提前感谢您的帮助!
答案 0 :(得分:0)
routes.MapRoute("Cars", "cars/{id}-{make}-{model}-{year}-{fueltype}-{transmission}-{colour}", new { controller = "Cars", action = "Detail" }, new { id = @"(\d+)" });
routes.MapRoute("News", "news/{id}-{slug}", new { controller = "News", action = "Show" }, new { id = @"(\d+)" });
以上代码为我工作!