2011-11-21 41 views

回答

8

下面的代碼應該爲你工作:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    if (Request.RawUrl.ToLower().EndsWith("subscribe")) 
    { 
     Response.Redirect("subscribe.aspx"); 
    } 
} 

或者內部Application_PreRequestHandlerExecute方法,如果你要還使用會話驗證

+0

我不認爲對每個請求進行自定義字符串評估是最佳解決方案。客戶路線,達拉斯建議是一個更好的解決方案。 – Maess

+0

同意,但它僅僅是一個不同的簡單解決方案 – Vitaliy

+0

我會用簡單的解決方案去討論。謝謝。 –

3

菲爾哈克有redirecting using routes

爲例然而,對於一個URL最簡單的解決方案可能是從動作重定向。

+0

我不想使用第三方庫。 –

2

如果要重定向虛擬URL到物理文件,它是在Global.asax中很容易做到這一點:

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
    RouteTable.Routes.MapPageRoute("Key", "Home", "~/Public/Pages/Default.aspx"); 
} 

在這種情況下,

http://www.example.com/Home

重定向到

http://www.example.com/Public/Pages/Default.aspx

只是一個供參考,這樣在客戶端上不重定向,重定向服務器上,這意味着服務器不會返回帶有新地址的302,它只是將您指向的內容發送回去。

這也是漂亮添加變量,像這樣:

routes.MapPageRoute("MainPublic3", "Public/Pages/{PAGE}/{CHILD}", "~/Public/Pages/Pages.aspx"); 

這些就在代碼中訪問的背後是這樣的:

string page = Page.RouteData.Values["PAGE"]; 
string child = Page.RouteData.Values["CHILD"]; 

我們用這個,我的工作一切,當然我們正在切換到MVC :)

+0

感謝您的幫助。它有點遲,但那會幫助我很多。 –