我的理解是StackOverflow中的问题具有以下格式

http://stackoverflow.com/questions/{question-id}/{slug-made-from-question-title}

因此,基本上,问题是使用问题ID检索的。因此,无论我给the提供什么值(value)都是无关紧要的。

首先,我想知道这种理解是否错误:)

我有一个网址
http://stackoverflow.com/questions/6291678/convert-input-string-to-a-clean-readable-and-browser-acceptable-route-data

然后,我像这样手动更改了子弹。
http://stackoverflow.com/questions/6291678/naveen

但是它变成了原来的弹头。 Firebug向我显示了更改后的URL上的永久重定向301。如何实现此功能?

最佳答案

您可以使用从ASP.NET 4.0开始可用的Response.RedirectPermanent来执行此操作:

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectpermanent.aspx

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        string id = RouteData.Values["id"].ToString();
        string passedSlug = RouteData.Values["name"].ToString();
        //get the original slug from database / dymanic method
        string originalSlug = GetSlugFromID(id);

        if(!originalSlug.Equals(passedSlug))
        {
            var url = String.Format("~/test/{0}/{1}", id, originalSlug);
            Response.RedirectPermanent(url, true);
        }
    }
}

从一个不相关的方面讲,想想Stack Overflow不会在数据库中保存该段代码。它是根据标题using something like this动态创建的。我只是更改了我的问题的标题,所以子弹也变了。不需要将段存储在数据库中,因为它对标题是多余的。

10-05 23:45