簡體   English   中英

使用Global.asax進行URL重寫和回發的另一種方法?

[英]An alternative approach to URL Rewriting and Postbacks with Global.asax?

我一直遇到網址重寫和回發問題。

編輯:當前使用IIS 7和URL重寫模塊。

基本上在回發之后,我的URL重寫完全混亂,並在我的查詢字符串中添加了一些重復和不必要的字段值對。 考慮到我在我的代碼中解析了URL,在引發Postback后,這打破了已經工作的頁面。

從我看到我之前的許多人都有同樣的問題,幾乎所有人都通過修改PageLoad上的表單操作修復了它,如下所示:

protected void Page_Load(object sender, EventArgs e)
    {
        form1.Action = Request.RawUrl;

        //Some other interesting things.
    }

重要提示:這樣做很有效 ,但它確實有效。

然而,雖然我的開發經驗實際上還不到一個月,但到目前為止,我一直在努力為我的問題尋找更優雅的解決方案。 我一直暗示可能有一個更好的選擇,包括編輯Global.asax ,以便在更“全局”的水平上獲得相同的結果。

在我看來,這應該使整體效率更高,因為在調用任何其他頁面之前將完成該技巧。

所以我的實際問題是:

如何通過編輯Global.asax文件而不是修改我的MasterPage加載事件上的表單操作來實現相同的目的? 如果你有一個更優雅的解決方案,我將不勝感激你也包括它。

考慮到這是我的第一個問題,我希望我已經足夠建設性了。

如果你無法改變重寫方法,那么我可以想到兩種可能比你擁有的方法更好的方法。

1)創建一個基頁並重寫其中的操作 - 然后所有頁面都應該從新的基頁繼承。 這使代碼保持在一個位置,您不必在每個頁面中寫入。

2)從默認表單控件繼承並停止它完全呈現action屬性,然后它將回發到重寫的URL。 然后用新控件替換所有表單實例。 您可以在本文的中間部分看到我的意思http://msdn.microsoft.com/library/ms972974

編輯

3)Scott Gu發布了這個問題的解決方案(在這篇文章http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx )這更干凈,不涉及使用控制適配器更改任何代碼。

通過iis還有一種方法:

IIS URL重寫器並進行了解釋

我建議你計算root(在master頁面屬性中,如果存在master),如下所示:

Root = "http://" + Request.Url.Host + Request.ApplicationPath;
Root += (Root.EndsWith("/") ? "" : "/");

然后使用此指令將其粘貼到.aspx中:

<%=Root %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM