2012-06-14 38 views
10

Estoy tratando de obtener información de perfil público de LinkedIn. Para lograr esto, tengo que proporcionar
http://api.linkedin.com/v1/people/url=public-profile-url, donde public-profile-url DEBE tener codificación URL.Mantener la URL codificada mientras usa la clase de URI

El problema es que las clases .NET como HttpClient, WebRequest, etc. usan la clase Uri que parece "canonizar" la URL proporcionada, por lo que no puedo enviar la solicitud con el formato correcto.

El URI debe ser:

http://api.linkedin.com/v1/people/url=http%3a%2f%2fwww.linkedin.com%2fin%2fiftachragoler

pero es:

http://api.linkedin.com/v1/people/url=http://www.linkedin.com/in/iftachragoler

De esta manera, recibo el mensaje 'Bad Request' de LinkedIn.

¿Hay alguna forma en que pueda hacer que Uri/UriBuilder no descodifique esa URL?

+0

¿Estás haciendo algo como '" http://api.linkedin.com/v1/people/url= "+ uri.ToString()'? Entonces la clase de URI está haciendo exactamente lo que debería hacer y lo estás haciendo mal. – dtb

+0

En realidad, estoy haciendo "http://api.linkedin.com/v1/people/url=" + Url.Encode (profileUrl), y luego paso eso a DotNetOpenAuth que a su vez lo pasa a UriBuilder. –

+2

No hay clase Url en .NET. Por favor, muestre el código real que está usando. – dtb

Respuesta

8

Hay un informe acerca de eso en Microsoft connect. Por defecto, no se permiten barras oblicuas por razones de seguridad.

http://connect.microsoft.com/VisualStudio/feedback/details/94109/

Cites desde allí:

trato de utilizar la API de LinkedIn, para el cual necesito el siguiente enlace: http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

Como se puede ver el campo de URL necesita escaparse ¿Cómo resolver esto?

Respuesta:

En este momento no permitimos barras y puntos escapado aparezcan en el camino porque esta es una forma común de un servidor atacante cuando el esquema URI soporta compresión de caminos.

Pero hay una pestaña con soluciones. Uno de ellos para .NET 4 es añadir app.config:

para .NET 4.0, se puede controlar esto a través del archivo de configuración:

http://msdn.microsoft.com/en-us/library/bb882619.aspx

http://msdn.microsoft.com/en-us/library/ee656539.aspx

<configuration> 
<uri> 
    <schemeSettings> 
    <clear/> 
    <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
    </schemeSettings> 
</uri> 
</configuration> 

Para .NET antes de .NET era constructor para la clase Uri con el parámetro "dontEscape". Para .NET 4 es obsoleto.

+0

Gracias, amigo! Esto funcionó. Después de haber agregado esa sección a Web.config, resolví el problema. –

0

¿Qué ocurre si se escapa por la mitad?

http://api.linkedin.com/v1/people/url=http%253a%252f%252fwww.linkedin.com%252fin%252fiftachragoler 
+1

Lo intenté. Lamentablemente no funciona :( –

Cuestiones relacionadas