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中的wordpress自定义帖子类型类别slug

我的自定义帖子类型 URL Slug 中缺少连字符/破折号(-)

如何在 MVC3 中向页面 url 添加“文本 slug”?

在 WordPress 管理列帖子/产品自定义帖子类型中显示 Slug

自定义帖子类型和分类法使用相同的 slug 和重写

Django 2.0 slug urls.py 意外关键字参数“slug”