2012-06-14 6 views
10

Sto cercando di ottenere informazioni sul profilo pubblico da LinkedIn. Per raggiungere questo obiettivo, devo fornire
http://api.linkedin.com/v1/people/url=public-profile-url, dove URL di profilo pubblico DEVE essere codificato URL.Mantieni l'url codificato durante l'utilizzo della classe URI

Il problema è che le classi .NET come HttpClient, WebRequest ecc utilizzano la classe Uri che sembra "canonizzare" l'URL fornito, in modo che non riesca a ottenere la richiesta formattata corretta inviata.

L'URI deve essere:

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

ma è:

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

In questo modo, ottengo 'Bad Request' da LinkedIn.

C'è un modo in cui Uri/UriBuilder può non decodificare quell'URL?

+0

Stai facendo qualcosa come '" http://api.linkedin.com/v1/people/url= "+ uri.ToString()'? Quindi la classe URI sta facendo esattamente quello che dovrebbe fare e tu stai sbagliando. – dtb

+0

In realtà, sto facendo "http://api.linkedin.com/v1/people/url=" + Url.Encode (profileUrl), quindi passando a DotNetOpenAuth che lo passa a UriBuilder. –

+2

Non esiste una classe Url in .NET. Si prega di mostrare il codice effettivo che si sta utilizzando. – dtb

risposta

8

C'è un rapporto a riguardo su Microsoft connect. Di default le barre con caratteri di escape non sono consentite per motivi di sicurezza.

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

Cites da lì:

cerco di utilizzare l'API LinkedIn, per il quale ho bisogno il seguente link: http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

Come si può vedere nel campo URL deve essere sfuggito Come risolvere questo?

Risposta:

Al momento non consentiamo barre e punti sfuggiti a comparire nel percorso perché questo è un modo comune per un attaccante server quando il schema URI supporta la compressione percorso.

Ma c'è una scheda con soluzioni alternative. Uno di loro per NET 4 è di aggiungere app.config:

Per .NET 4.0, è possibile controllare questo attraverso il file di configurazione:

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> 

Per .NET prima di .NET era costruttore per la classe Uri con parametro "dontEscape". Per .NET 4 è obsoleto.

+0

Grazie, amico! Questo ha fatto il trucco. Avendo aggiunto quella sezione a Web.config, ho risolto il problema. –

0

Cosa succede se riesci a evitarlo?

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

L'ho provato. Purtroppo non funziona :( –

Problemi correlati