2010-06-17 71 views
2

如何使用反射更改HttpContext.Current.Request.UserAgent屬性?在.NET中的代碼中更改UserAgent

感謝

+0

你需要在這個單元測試的時間?在這種情況下,您可以存根沃勒HttpContext.Current – 2010-06-17 20:53:36

回答

1

我解決它通過使用ASHX(作爲代理),並使得從該服務頁面的請求與自定義UserAgent的標題,然後打印我從其他網站得到的答案。

-1

string userAgent = "stuff"; 
PropertyInfo pUserAgent = HttpContext.Current.Request.GetType().GetProperty("UserAgent"); 
pUserAgent.SetValue(HttpContext.Current.Request, userAgent, null); 

對不起,擡頭錯誤的類。除非修改其後的專用字段,否則無法設置該屬性。 HttpRequest.UserAgent不允許設置者訪問。

+0

-1這是一個獲得唯一的財產 – 2010-06-17 20:55:38

+0

固定它,擡起頭來錯誤的類 – Femaref 2010-06-17 20:57:18

+0

甚至有它背後沒有私人領域,你可以像使用反射的工具來獲得一些啓發該屬性背後的代碼... – 2010-06-17 21:00:52

0

不能修改傳入的請求的用戶代理。這是用戶瀏覽器發送的值,所以我不確定爲什麼你想改變它。如果您使用HttpWebRequest類自己創建出站請求,則可以設置它的.UserAgent屬性,或者如果您正在使用WebClient類,則可以添加到.Headers集合。

0

HttpContext.Current.Request爲只讀也是如此HttpContext.Current.Request.UserAgent。 Web的本質是如此,沒有理由爲什麼你可能想要改變HttpRequest對象中的任何東西,因爲這是由一些你可能永遠不能控制的HttpClient發送的。即使在你可以改變它的情況下,你的失去了原來的請求的完整性,這顯然是不建議。我不知道你想通過改變Request對象或它的屬性來達到什麼目的,但我肯定知道這不是要走的路。嘗試改變其他方式而不是改變Request對象,或者在這裏寫下你的實際問題陳述,我們會盡力幫助你。

+0

對於任何嘗試這樣做的人(是的,你可以有一個理由),你的選擇似乎非常有限。 'Request.UserAgent'是隻讀的。更改底層頭文件Request.Headers [「User-Agent」](它也失去了原始的完整性,但是*被允許)不改變最終的Request.UserAgent值。我很想聽到比創建允許設置UserAgent的HttpRequest的子類更好的方法。這樣做需要將所有數據鏡像到新的類實例或創建引用原始實例數據的重載。 – patridge 2015-07-20 19:32:57

0

我的問題是,頁面Nav_Side.aspx使用,除非瀏覽器使得在兼容模式下要求其拋出一個500錯誤一些古老的UI組件。

我想成爲能夠在一個頁面逐頁的基礎上控制兼容模式,因此使用利用一個ASHX以接收初始請求,修改它並轉移到ASPX的Andreas想法。

創建Visual Studio中的ashx後,用自己的代碼替換ProcessRequest方法,在我的情況:

public void ProcessRequest(HttpContext context){ 
    var headers = context.Request.Headers; 
    //set a User-Agent header that mimics compatibility mode for Nav_Side.aspx 
    headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 7.0)";  
    context.Server.TransferRequest("Nav_Side.aspx", true, context.Request.HttpMethod, headers); 
}