2017-04-21 67 views
0

我希望能夠修改C#HttpWebRequest對象的RequestUri中包含的url。 我想追加一個附加參數與票證ID。 [like & ticket = xyz123]將參數添加到C#HttpWebRequest

聽起來像這樣做可能無法做到這一點,因爲RequestUri是隻讀的。有些人建議使用反射來解決它,但其他人則說,即使使用反射也不行。

有沒有其他方法可以解決這個問題?

我可以使用HttpWebRequest CookieContainer來包含票證信息 - 雖然票證不在cookie中,但需要一個特殊的服務調用來檢索票據字符串。

我想如下重寫的驗證方法:

protected override void HttpAuthenticate(HttpWebRequest request) 
    { 
     Uri uri = request.RequestUri; 
     Uri newUrl = new Uri(AuthData.appendTicket(uri.ToString())); 
     request.RequestUri = newUrl; // Cannot do this because it is readonly 

回答

1

有了足夠的反射黑客,你可以迫使它,但這違背了類的基本體系結構模型:網址WebRequest的創建時間應該是固定的。如果你想向一個不同但相關的URL發出請求,爲什麼不使用WebRequest.Create來創建一個新的HttpWebRequest到一個通過擺脫原始WebRequest的RequestUri而形成的新URL?

+0

我只是想重寫這一個方法來改變認證機制。標準基本身份驗證設置HttpWebRequest的憑證。相反,我希望能夠添加票據信息 - 通常作爲URL上的附加參數傳遞。 –

+0

我明白這個願望,但它不起作用。您可以更改參數以通過ref傳遞,然後在方法中更改輸入的HttpWebRequest以獲取新的HttpWebRequest。 HttpWebRequest這種構建方式的主要原因可能是阻止您在創建對象之後交換一個http URL,例如ftp或文件URL。 –