2011-02-16 84 views
4

我有一個HttpWebRequest的實例,我在事件中攔截。 我想在發送請求之前編輯url,但我找不到這樣做的方法。 屬性RequestUri是隻讀的。更改HttpWebRequest實例的Uri?

我想到了一些方法,但似乎無法找到一個工作解決方案: - 使用反射設置值? - 創建新請求,然後克隆所有屬性。不知道該怎麼做。

+0

我想你會以錯誤的方式去解決問題。如果你不得不求助於各種技巧和思考,那麼你應該清楚你需要重新思考你的設計/方法。爲什麼HttpWebRequest首先得到錯誤的URL?也許你需要有一箇中間步驟,在得到HttpWebRequest之前就已經知道了。 –

+0

同意但不幸的是我不控制HttpWebRequest的創建。我使用的DataServiceContext從linq查詢生成一個HttpWebRequest。 – Clement

回答

-1

您可以使用RewritePath來執行此操作。

F.e.

HttpContext.Current.RewritePath("newurl.aspx"); 
+0

這是一個HttpRequest對象。我正在談論HttpWebRequest。 – Clement

1

如果您認爲在HTTP協議方面,每個請求是無狀態/唯一的。將一個請求鏈接到另一個請求的唯一方法是通過Cookie之類的方式編程,但對於HTTP協議本身,請求是唯一的。

我認爲HttpWebRequest對象的設計是考慮到了這一點。每個HttpWebRequest表示對URL的唯一調用,併爲該調用構建參數。如果你想對另一個URL做另一個請求,你可以創建一個新的HttpWebRequest並將它傳遞給你正在使用的狀態信息,即:Cookie容器,標題信息等。

對此的長時間的回答是對象是設計成具有隻讀url和處理它的唯一辦法是:

  1. 用一個小反射黑客,如你已經做了,如果你絕對需要使用給定的HttpWebRequest對象你。

  2. 創建一個新的HttpWebRequest(WebRequest.Create())並將您的狀態信息複製到新的請求中。