2013-03-25 44 views
0

重寫URL我們正在使用IIS 7 「URL重寫」 功能,我們的一些網址得到代碼隱藏

例如,用於重寫

/viewSompage.aspx?id=123&title=some-title 

重寫到

/View/SomePage/some-title/123/ 

規則的出於多種目的(其中一個可以在電子郵件模板中設置重寫的URL等),我們需要在給定字符串的情況下在代碼隱藏中獲取重寫的URL。

我知道重寫器使用出站規則自動應用這些頁面,但我仍然需要重寫其他用途的URL。

我希望能夠通過一個URL字符串,使urlrewiter應用任何適用的規則給定的URL例如

String rewrittenURL = ApplyRewritingRules("/viewSompage.aspx?id=123&title=some-title"); 

在此先感謝

回答

3

好吧,我發現一個體面的解決方案,不需要我做冗餘的東西。

Page.ResolveUrl(Request.RawUrl) 

哪裏頁是System.Web.UI.Page的實例...這是你的標準的aspx頁面

請求...如果你想訪問請求,請使用HttpContect.Current .Request ...

RawUrl = /viewSompage.aspx?id=123&title=some-title 

重寫爲(根據在web.config中指定我的規則)

/View/SomePage/some-title/123/ 

從那裏我可以建立這樣整個鏈路只用一行代碼:

String url = String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Page.ResolveUrl(request.RawUrl)); 
-1

這沒有太大的一個答案,但我認爲你不應該爲此目的使用Url Rewrite。它讓你的代碼很難閱讀,因爲事情發生在服務器端,而你的代碼卻看不見,我不能完全確定你甚至可以動態地改變它。如果我沒有記錯,那些東西在web.config中,並且在其中更改值需要IIS重新編譯。

0

,你可以創建一個自定義URL重寫類,並存儲在SQL表中它的配置
表Url_Rules:

  • INT ID
  • 爲nvarchar(250)原
  • 爲nvarchar(250)改寫

您可以使用此表來存儲多個規則,然後使用Global.asax的執行由看重寫規則荷蘭國際集團的分貝爲適當的路徑例如:從Url_Rules
SELECT原來這裏改寫= 'http://someurl/article/id'

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
    urlEngine.Rewrite(System.Web.HttpContext.Current.Request.RawUrl.ToString) 
End Sub 

urlEngine.Rewrite做工作得到從數據庫然後將其應用到當前上下文中的數據:

System.Web.HttpContext.Current.RewritePath(url_from_db) 

這種方式,您可以卸載IIS 7 URL重寫,比你可以僅僅返回編碼字符串的URL第二種方法,並通過電子郵件發送:

public Function GetUrl(ByVal url As String) 
     return url_from_db 
End Function 
+0

a)我不想做一個額外的數據庫商店或爲此創建一個單獨的類。我們已經根據正則表達式在web.config中定義了規則。它只是使整個事情變得多餘,額外的數據庫調用也會影響性能。 – robert 2013-03-25 23:13:50

+0

好比更簡單,只需使用web.config中的數據,獲取規則並使用Regex.Replace()http://msdn.microsoft.com/en-us/library/xwewhkd1針對您的URL運行它。 aspx – Sherlock 2013-03-25 23:18:05

+0

必須有更優雅的解決方案。希望能夠告訴承銷商解析給定的url並返回它的實際輸出結果。 – robert 2013-03-26 00:03:23