2009-10-20 15 views
9

Para conectar a un servicio de terceros, necesito hacer una publicación de Https. Uno de los requisitos establecidos es enviar un tipo de contenido personalizado.Cómo establecer el encabezado de tipo de contenido de WebClient?

Estoy usando WebClient, pero no puedo encontrar cómo configurarlo. Intenté crear una nueva clase y anular el método CreateRequest, pero eso hace que se bloquee la solicitud.

¿Hay alguna manera de hacerlo sin tener que volver a escribir el método CopyHeadersTo?

Gracias de antemano

EDITAR CopyHeaderTo es un método que he visto usando .NET Reflector. Se invoca desde GetWebRequest y establece todos los encabezados de solicitud, incluido Content-Type, desde propiedades privadas.

Respuesta

1

Bueno, acabo de perder Request.ContentType propertie. Si se interrumpe el método GetWebRequest, configurar ContentType a cualquier valor deseado lo hace.

Aún así, la conexión a un tercero no funciona. Ir figuras.

Gracias!

31

Puede intentar agregar a la colección Headers.

myWebClient.Headers.Add("Content-Type","application/xxx"); 
+3

Eso arroja una WebException, diciendo que Content-Type no se puede cambiar para la petición actual. –

+0

¿Quién arroja esta excepción? ¿Es el script del servidor en el que está publicando? Probé el ejemplo proporcionado en MSDN y configuró exitosamente el encabezado Content-Type en un valor personalizado. –

+0

Tenía que hacer esto: _client.Headers ["Content-Type"] = "application/Json" Todavía no funcionaba correctamente, ¡pero al menos compila! Trabajando en Silverlight 5. – RaoulRubin

5

webclient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"

1

me encuentro con esto también. Y descubrió que debe usar Client Http, de lo contrario, el navegador Http bloqueará el cambio de Content-Type por razones de seguridad. This MSDN link explica eso.

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); 
client.Headers["Content-Type"] = "application/json"; 
Cuestiones relacionadas