Establecer el encabezado User-Agent para una solicitud de WebClient

¿Cuál es la forma correcta de configurar el encabezado User-Agent para una solicitud de WebClient para Windows Phone 7? Encontré 2 opciones, pero no estoy seguro de cuál es la correcta. Considerando un objeto WebClient:

WebClient client = new WebClient(); 

Vi 2 opciones:

  1. configura el User-Agent usando:

     client.Headers["User-Agent"] = "myUserAgentString"; 
  2. configure el User-Agent usando WebHeaderCollection:

     WebHeaderCollection headers = new WebHeaderCollection(); headers[HttpRequestHeader.UserAgent] = "userAgentString"; client.Headers = headers; 

¿Puede avisar cuál de los 2 métodos anteriores es el correcto?

puede ir aquí (msdn) para mostrar una muestra “adecuada” para agregar un user-agent en su WebClient para C # y Here (msdn) para mostrar la muestra para Windows phone.

esta es esta muestra para c #:

 WebClient client = new WebClient (); // Add a user agent header in case the // requested URI contains a query. client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

esta es una muestra para Windows Phone (silverlight):

 request.Headers["UserAgent"]= "appname"; 

o

 request.UserAgent = "appname"; 

Descubrí que el WebClient seguía eliminando el encabezado de User-Agent después de una solicitud y estaba cansado de configurarlo cada vez. Utilicé un truco para configurar el User-Agent permanentemente creando mi propio WebClient personalizado y reemplazando el método GetWebRequest . Espero que esto ayude.

 public class CustomWebClient : WebClient { public CustomWebClient(){} protected override WebRequest GetWebRequest(Uri address) { var request = base.GetWebRequest(address) as HttpWebRequest; request.UserAgent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0;)"; //... your other custom code... return request; } } 

Como complemento a las otras respuestas, aquí está la guía de Microsoft para cadenas de agente de usuario para sus navegadores. Las cadenas de agente de usuario difieren según el navegador (Internet Explorer y Edge) y el sistema operativo (Windows 7, 8, 10 y Windows Phone).

Por ejemplo, aquí está la cadena del agente de usuario para Internet Explorer 11 en Windows 10 :

 Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko 

y para la actualización de Internet Explorer para Windows Phone 8.1 :

 Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 

Se proporcionan plantillas para las cadenas de agente de usuario para el navegador Edge para escritorio, dispositivo móvil y WebView. Vea esta respuesta para algunos ejemplos de cadenas de agente de usuario perimetral.

Finalmente, otra página de MSDN proporciona una guía para IE11 en sistemas operativos de escritorio más antiguos.

IE11 en Windows 8.1 :

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

e IE11 en Windows 7 :

 Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko 

También puedes usar eso:

 client.Headers.Add(HttpRequestHeader.UserAgent, "My app."); 
 const string ua = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; Request.Headers["User-Agent"] = ua; var httpWorkerRequestField = Request.GetType().GetField("_wr", BindingFlags.Instance | BindingFlags.NonPublic); if (httpWorkerRequestField != null) { var httpWorkerRequest = httpWorkerRequestField.GetValue(Request); var knownRequestHeadersField = httpWorkerRequest.GetType().GetField("_knownRequestHeaders", BindingFlags.Instance | BindingFlags.NonPublic); if (knownRequestHeadersField != null) { string[] knownRequestHeaders = (string[])knownRequestHeadersField.GetValue(httpWorkerRequest); knownRequestHeaders[39] = ua; } }