【问题标题】:routing and URL structure路由和 URL 结构
【发布时间】:2010-11-18 16:55:19
【问题描述】:

无论如何我可以从生成的 URL 中排除 ID 字段,但仍然可以使用 ID 值?如果您采用 StackOverflow URL:

http://stackoverflow.com/questions/3409196/asp-net-mvc-routing-question

可以在没有问题 ID 的情况下呈现该 URL 吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing


    【解决方案1】:

    您可以在没有 ID 的情况下显示问题,但每个问题的问题标题必须是唯一的。

    此外,您仍然可以使用 ID 查找问题,然后重定向到仅显示问题标题的另一个 URL。如果你想这样做,我可以发布一个例子。

    这是一个例子:

    // this method finds a file from database using the id
    //and passes the object with TempData
        public ActionResult InitialDetail(int id)
        {
            var question = questionRepository.GetFile(id);
            if (question==null)
                return View("NotFound");
            else
            {
                TempData["question"] = question;
                return Redirect("/questions/" + question.Name);
            }
        }
    
    
    //this method uses model passed from other method and displays it
        public ActionResult Details(string questionName)
        {
            if (TempData["question"] == null)
            {
                return View("NotFound");
            }
            else
                return View("Details", TempData["question"]);
        }
    

    您还必须为此工作定义一个路线

    routes.MapRoute("QuestionPage", //Files/id/fileName
                "questions/{questionName}",
                new { controller = "Questions", action = "Details" } );
    

    在默认路由之前添加此路由。如果您的 URL 路由以 http://domain.com/questions 开头,这可能会造成混乱。

    注意:这可能不是最佳解决方案。如果您的问题标题不是唯一的,则不能在页面中放置具有这种结构的链接。首先,它必须使用 ID 查找问题。

    【讨论】:

    • 重定向是一种不好的做法吗?那么基本上我可以将一个视图传递给另一个视图吗?
    • 除非我有误解,否则重定向将是不好的做法,因为您无法将 URL 复制并粘贴给某人,以便他们可以看到相同的页面(因为复制/粘贴不会临时数据)。我也不知道搜索引擎会如何处理。
    • 是的,这是真的,否则 URL 必须包含该问题的特殊 smt。您可以尝试使用独特的标题(如果可能的话),这会容易得多。
    • 如果我将标题重定向到重写的 slug,复制和粘贴仍然有效吗?所以如果标题是“路由和 URL 结构”,并且我重定向到“路由和 URL 结构”,复制和粘贴会起作用吗?
    • 没有。首先,您已从带有 id 的 URL 定向。您已经必须重写标题,因为 URL 不能包含空格。如果您查看从未检查过标题的代码,它只是使用 id 进行搜索。您必须发布像 domain.com/questions/15 这样的链接。我不知道搜索引擎如何处理这个问题。
    猜你喜欢
    • 2016-09-17
    • 2010-12-07
    • 2010-12-24
    • 2011-02-22
    • 2012-02-04
    • 2013-04-12
    • 1970-01-01
    • 2017-03-12
    • 2012-03-23
    相关资源
    最近更新 更多