Изменить UserAgent в коде в .NET - PullRequest
2 голосов
/ 18 июня 2010

Как я могу изменить свойство HttpContext.Current.Request.UserAgent, используя отражение?

Спасибо

Ответы [ 6 ]

1 голос
/ 28 июня 2010

Я решил это, используя ashx (в качестве прокси) и сделав запрос от этого сервиса на страницу с пользовательским заголовком useragent, а затем распечатал ответ, полученный с другой страницы.

0 голосов
/ 04 марта 2015

Моя проблема заключалась в том, что на странице Nav_Side.aspx используются некоторые древние компоненты пользовательского интерфейса, которые выдают ошибку 500, если браузер не делает запрос в режиме совместимости.

Я хотел иметь возможность управлять режимом совместимости постранично, поэтому использовал идею Андреаса об использовании ashx для получения первоначального запроса, его изменения и передачи в aspx.

После создания ashx в Visual Studio замените метод 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);
}
0 голосов
/ 21 июня 2010

HttpContext.Current.Request только для чтения и HttpContext.Current.Request.UserAgent. Это так по своей природе в сети, нет никаких причин, по которым вы можете захотеть что-то изменить в объекте HttpRequest, так как это было отправлено неким HttpClient, над которым у вас никогда не будет контроля. Даже в том случае, если вы можете изменить его, вы теряете целостность исходного запроса , что, очевидно, не рекомендуется . Я не знаю, чего вы пытаетесь достичь, изменяя объект Request или его свойства, но я точно знаю, что это не тот путь. Попробуйте вместо этого изменить объект запроса другим способом или напишите здесь свою реальную формулировку проблемы, и мы постараемся вам помочь.

0 голосов
/ 21 июня 2010

Вы не можете изменить пользовательский агент входящего запроса.Это значение, которое отправляется браузером пользователя, поэтому я не уверен, почему вы все равно захотите его изменить.Если вы сами создаете исходящий запрос с использованием класса HttpWebRequest, вы можете установить его свойство .UserAgent или добавить его в коллекцию .Headers, если вы используете класс WebClient.

0 голосов
/ 21 июня 2010

Вы должны использовать HttpWebRequest

Свойство HttpWebRequest.UserAgent

0 голосов
/ 18 июня 2010

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

Извините, вы искали не тот класс.Вы не можете установить свойство, если не измените приватное поле за ним.HttpRequest.UserAgent не разрешает доступ сеттера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...