MVC 4 创建 slug 类型 url
Posted
技术标签:
【中文标题】MVC 4 创建 slug 类型 url【英文标题】:MVC 4 creating slug type url 【发布时间】:2013-04-21 08:29:01 【问题描述】:我正在尝试创建一个类似 url 的 ***。
我下面的例子工作正常。但是如果我移除控制器,它就会出错。
http://localhost:12719/Thread/Thread/500/slug-url-text
注意第一个线程是控制器,第二个是动作。
我怎样才能使上面的 URL 看起来像下面的,不包括 url 中的控制器名称?
http://localhost:12719/Thread/500/slug-url-text
我的路线
public class RouteConfig
public static void RegisterRoutes(RouteCollection routes)
routes.IgnoreRoute("resource.axd/*pathInfo");
routes.MapRoute("Default", // Route name
"controller/action/id/ignoreThisBit",
new
controller = "Home",
action = "Index",
id = "",
ignoreThisBit = ""
); // Parameter defaults )
线程控制器
public class ThreadController : Controller
//
// GET: /Thread/
public ActionResult Index()
string s = URLFriendly("slug-url-text");
string url = "Thread/" + 500 + "/" + s;
return RedirectPermanent(url);
public ActionResult Thread(int id, string slug)
return View("Index");
【问题讨论】:
【参考方案1】:将以下路由放在默认路由定义之前将直接调用'线程'控制器中的'线程'操作,带有'id'和'slug'参数。
routes.MapRoute(
name: "Thread",
url: "Thread/id/slug",
defaults: new controller = "Thread", action = "Thread", slug = UrlParameter.Optional ,
constraints: new id = @"\d+"
);
那么如果你真的希望它像 *** 一样,并假设有人输入了 id 部分而不是 slug 部分,
public ActionResult Thread(int id, string slug)
if(string.IsNullOrEmpty(slug))
slug = //Get the slug value from db with the given id
return RedirectToRoute("Thread", new id = id, slug = slug);
return View();
希望这会有所帮助。
【讨论】:
将 string.IsNullOrEmpty 更改为 string.IsNullOrWhiteSpace 以便更好地检查字符串。以上是关于MVC 4 创建 slug 类型 url的主要内容,如果未能解决你的问题,请参考以下文章
我的自定义帖子类型 URL Slug 中缺少连字符/破折号(-)
如何在 MVC3 中向页面 url 添加“文本 slug”?