我的理解是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动态创建的。我只是更改了我的问题的标题,所以子弹也变了。不需要将段存储在数据库中,因为它对标题是多余的。