2012-10-07 60 views
1

重寫我需要實現asp.net URL中使用Global.asax中的正則表達式改寫一行此解決方案ASP.NET動態URL在Global.asax中

www.dummydomain.com/a/1/b/2/c/3/d/4/...      
www.dummydomain.com/b/2/c/3 
www.dummydomain.com/b/2/a/1/c/3/ 

它意味着改變參數順序不應該影響+不同參數的數量將是動態的+我可以通過名稱訪問這些參數值,例如a,b,c

+0

這是一個非常糟糕的主意,因爲這意味着,可能有兩個或更多的網址可能指向一個頁面。史詩SEO自殺,不提你在實施這種情況下面臨的技術問題。我建議使用不同的方式傳遞變量 - 會話,cookie,隱藏字段,視圖狀態......特別是當你需要與這樣的變量玩弄時。 – walther

+0

我知道你在說什麼。我只是想知道是否有可能使用url-rewriting + regular-expression而不是通過解析url來作爲下面的人。我沒有時間自己做,但我相信這將是可能的 – auser

回答

0

您可以對字符串使用拆分選項,然後將您的值放入字典中。這假定你的模式永遠不會中斷。

Dim MyContext = HttpContext.Current 
Dim url = Request.Path.ToLower() 
url = url.Trim("/") 
Dim Vals = url.Split("/") 
Dim Dict As New Dictionary(Of String, String) 
for i = 0 to (vals.count/2)-1 
    Dict.Add(vals(i),vals(i+1)) 
next 

然後,您可以使用字典對象來查找變量。

在Application_BeginRequest方法的global.asax文件中運行此方法,並調用MyContext.RewritePath將用戶發送到正確的路徑。

if dict("a") = 1 then MyContext.RewritePath("new URL") 
+0

你真的鼓勵他這樣做嗎? :)無論哪種方式,你展示了一些完全不同於他實際要求的東西。他希望在global.asax中爲url路由指定一個路由,使用一行代碼,而不是如何解析url字符串......此外,當我們使用url路由時,我們會引用像這樣的url變量:RouteData。值[「nameOfVarSpecifiedInTheRoute」],而不是通過解析url本身。當我們已經有檢索url變量值的方法時,沒有看到像這樣解析它的原因... – walther

+0

他可以使用這些參數來找出他的路線。即使它很奇怪,我也會回答這些人的問題。爲了您的參考,您可以在Application_BeginRequest方法的global.asax文件中運行此命令,並調用MyContext.RewritePath將用戶發送到正確的路徑。 – Middletone

1

您可以通過web.config配置URL重寫規則,也可以編程方式。

請看下面的MSDN文章,它解釋它在深度

http://msdn.microsoft.com/en-us/library/ms972974.aspx

此外,在簡短的詞彙來重寫URL programarically調用HttpContext.RewritePath中的global.asax.cs從的Application_BeginRequest((字符串路徑))