当前位置: 首页 > 编程语言 > C#

StackOverflow就像是URL路由分享

时间:2023-04-10 18:52:31 C#

StackOverflow就像是URL路由from-question-title}所以基本上问题是使用问题ID检索的。因此,无论我给slug赋予什么价值都是无关紧要的。首先我想知道这种理解是否错误:)我有一个URLhttp://stackoverflow.com/questions/6291678/convert-input-string-to-a-clean-readable-and-browser-acceptable-route-data然后我像这样手动替换了slug..http://stackoverflow.com/questions/6291678/naveen但它变成了原来的slug..Firebug向我显示了更改后的URL上的永久重定向301。如何实现这个功能?您可以使用自ASP.NET4.0起可用的Response.RedirectPermanent执行此操作:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectpermanent.aspxprotectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){stringid=RouteData.Values["id"].ToString();字符串passedSlug=RouteData.Values["name"].ToString();//从数据库/dymanic方法中获取原始slugstringoriginalSlug=GetSlugFromID(id);if(!originalSlug.Equals(passedSlug)){varurl=String.Format("~/test/{0}/{1}",id,originalSlug);回复。RedirectPermanent(url,true);}}}在不相关的旁注中,我认为StackOverflow不会将slug保留在数据库中。它是使用类似这样的东西从标题动态创建的。我只是更改了我的问题的标题并更改了slug..没有必要将slug存储在数据库中,因为它对标题来说是多余的。这是通过301重定向到首选规范URL来完成的。此脚本检查请求的URL以查看该URL是否与URL的“首选”版本相匹配。如果不是,它会向浏览器发送一个301重定向并告诉它该页面已永久移动到此位置。这样做的原因很明显:如果没有它,您可以构建数千个URL,例如http://stackoverflow.com/questions/6291678/foohttp://stackoverflow.com/questions/6291678/blah;都指向相同的内容。搜索引擎会因为重复的内容而惩罚你。编辑在ASP.Net应用程序中,您可以将浏览器提供的slug与存储在数据库中的slug进行比较。如果它们不匹配,则发送301重定向。由于涉及数据库,您可能无法通过web.config或其他方式执行此操作。这是我不久前在我的博客上发布的示例代码(不确定它是否有效):ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)DimmyIdAsInteger=1234DimmySlugAsString="preferred-slug"IfRequest.Url.AbsolutePath.Equals("/"&myId&"/"&mySlug)=FalseThenResponse.Clear()Response.Status="301MovedPermanently"Response.AddHeader("Location","http://"&Request.Url.Host&"/"&myId&"/"&mySlug&Request.Url.Query)Response.End()EndIfEndSub我假设你已经实现了某种形式的URL重写,它会将对/d+/.+的任何请求抛出到您的asp.net页面。您可以查看这篇文章以详细比较使用IISURL重写或ASP.NET路由:http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/以上是C#LearningTutorial:StackOverflow和URLRouting一样分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: