在.NET中的代码中更改UserAgent

时间:2010-06-17 20:47:35

标签: c# .net reflection

如何使用反射更改HttpContext.Current.Request.UserAgent属性?

由于

6 个答案:

答案 0 :(得分:1)

我通过使用ashx(作为代理)解决了这个问题,并使用自定义的useragent标头向该服务发出请求,然后打印了我从其他页面获得的答案。

答案 1 :(得分:0)

您必须使用HttpWebRequest

HttpWebRequest.UserAgent Property

答案 2 :(得分:0)

您无法修改传入请求的用户代理。这是用户浏览器发送的值,所以我不确定为什么你想要改变它。如果您使用HttpWebRequest类自己创建出站请求,则可以设置其.UserAgent属性,或者如果您使用的是WebClient类,则可以添加到.Headers集合。

答案 3 :(得分:0)

HttpContext.Current.Request是只读的,HttpContext.Current.Request.UserAgent也是如此。这本质上是网络的,没有理由你可能想要更改HttpRequest对象中的任何内容,因为这是由一些你可能永远无法控制的HttpClient发送的。即使在您可以更改它的情况下,您仍然失去原始请求的完整性,这显然是不推荐。我不知道你要通过更改Request对象或其属性来实现什么,但我确信这不是要走的路。尝试以其他方式解决而不是更改Request对象,或在此处编写实际的问题陈述,我们将尽力帮助您。

答案 4 :(得分:0)

我的问题是页面Nav_Side.aspx使用了一些古老的UI组件,除非浏览器以兼容模式发出请求,否则会抛出500错误。

我希望能够逐页控制兼容模式,因此使用了Andreas的想法,即使用ashx接收初始请求,修改它并转移到aspx。

在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);
}

答案 5 :(得分:-1)

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

<击>

抱歉,抬头看错了班级。除非修改其后面的私有字段,否则无法设置该属性。 HttpRequest.UserAgent不允许设置者访问。