2012-06-14 17 views
10

Próbuję uzyskać publiczne informacje profilowe z LinkedIn. Aby to osiągnąć, muszę dostarczyć
http://api.linkedin.com/v1/people/url=public-profile-url, gdzie publiczny-profil-URL MUSI być zakodowany URL.Zachowaj zakodowany adres URL podczas korzystania z URI klasy

Problem polega na tym, że klasy .NET, takie jak HttpClient, WebRequest itp., Używają klasy Uri, która wydaje się "kanonizować" podany adres URL, więc nie mogę otrzymać poprawnie sformatowanego żądania wysłanego.

URI musi być:

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

ale jest:

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

W ten sposób mogę 'Bad Request' z LinkedIn.

Czy istnieje sposób, aby Uri/UriBuilder nie mógł dekodować tego adresu URL?

+0

Czy robisz coś w stylu "http://api.linkedin.com/v1/people/url=" + uri.ToString() '? Następnie klasa URI robi dokładnie to, co powinna, a robisz to źle. – dtb

+0

Właściwie robię "http://api.linkedin.com/v1/people/url=" + Url.Encode (profileUrl), a następnie przekazuję to do DotNetOpenAuth, który sam przekazuje go do UriBuilder. –

+2

Brak klasy Url w .NET. Pokaż rzeczywisty kod, którego używasz. – dtb

Odpowiedz

8

Jest raport o tym na Microsoft connect. Domyślnie uniknięte ukośniki są niedozwolone ze względów bezpieczeństwa.

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

Cites stamtąd:

Próbuję użyć API LinkedIn, dla których wymagany jest następujący link: http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

Jak widać pole URL musi być uciekł. Jak rozwiązać ten problem?

Odpowiedź:

Obecnie nie pozwalają uciekły ukośniki i kropki pojawiają się na ścieżce ponieważ jest to powszechny sposób atakujący serwer gdy URI Program obsługuje kompresję ścieżki.

Ale jest karta z obejściami. Jednym z nich NET 4 jest dodanie app.config:

dla .NET 4.0, można to kontrolować za pomocą pliku konfiguracyjnego:

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> 

Dla .NETs przed .NET był konstruktorem klasy Uri z parametrem "dontEscape". Dla .NET 4 jest przestarzały.

+0

Dzięki, człowieku! To zdziałało. Dodałem tę sekcję do Web.config, rozwiązałem problem. –

0

Co się stanie, jeśli podwójnie się z niego wydostaniesz?

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

Próbowałem tego. Niestety nie działa :( –

Powiązane problemy