我無法使用路由,因爲服務器運行的是.NET 2.0,並且在3.5 SP1之前沒有將路由引入框架。所以我不得不求助於URL重寫。
在web.config中我加入:
<system.web>
<httpModules>
<add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/>
...
<system.webServer>
<modules>
<add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/>
我然後創建UrlRewriter它繼承IHttpModule的,並在Init方法添加HttpApplication.BeginRequest的處理程序。
在BeginRequest中,我檢查URL並將本地化的文件夾名稱和頁面名稱替換爲其英文等效項。對於例如/mysite.com/a-propos-de-nous/已轉換爲/mysite.com/about-us/,但用戶仍然可以在其瀏覽器中看到法文網址。
有點檢查做轉換的URL,但它工作得很好,檢查/替換並不可怕。
我有幾個怪癖想弄明白,如果URL作爲/mysite.com/a-propos-de-nous(注意最後丟失的'/')重寫工作,但是瀏覽器地址欄中的網址更改爲/mysite.com/about-us,這是不期望的。
如果任何人有任何額外的想法,意見或本地化URL的經驗請加入到線程。
[編輯 - 2013年2月28日] - RE:缺少尾隨在瀏覽器
添加此,使這個更完整,以防有人絆倒在它進入的網址斜線的。
這裏的問題是IIS添加了禮貌斜線,這會創建一個重定向。爲了處理這種情況,我在這裏完成的是檢查URL並確定它是否包含URL末尾的頁面/文件。我在我的Url改寫代碼中使用以下內容:
void UrlRewriter_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
... // other rewrite code here
string lastSegment = app.Request.Url.Segments[app.Request.Url.Segments.Length - 1];
string extension = System.IO.Path.GetExtension(lastSegment);
// no extension, must be a directory/folder
if (string.IsNullOrEmpty(extension))
{
if (!sendTo.EndsWith("/"))
sendTo = sendTo + "/";
}
app.Context.RewritePath(sendTo);
}
Hi Tallmaris。我剛開始閱讀它,看它是否會做我想做的事。如果任何人閱讀這個使用它的目的,它運作良好請讓我知道。謝謝。 – emgee 2013-02-09 01:29:26