2012-06-14 2 views
10

Я пытаюсь получить общедоступную информацию профиля из LinkedIn. Для этого я должен предоставить
http://api.linkedin.com/v1/people/url=public-profile-url, где public-profile-url ДОЛЖЕН быть закодирован в URL.Сохранять url при использовании класса URI

Проблема в том, что классы .NET, такие как HttpClient, WebRequest и т. Д. Используют класс Uri, который, как представляется, «канонизирует» предоставленный URL-адрес, так что я не могу получить отправленный надлежащим отформатированный запрос.

URI, должно быть:

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

но:

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

Таким образом, я получаю 'Bad Request' от LinkedIn.

Есть ли способ, которым я могу Uri/UriBuilder не расшифровывать этот URL?

+0

Вы делаете что-то вроде '' http://api.linkedin.com/v1/people/url= "+ uri.ToString()'? Тогда класс URI делает именно то, что он должен делать, и вы делаете это неправильно. – dtb

+0

На самом деле, я делаю «http://api.linkedin.com/v1/people/url=» + Url.Encode (profileUrl), а затем передаю его DotNetOpenAuth, который сам передает его UriBuilder. –

+2

В .NET нет класса Url. Пожалуйста, покажите фактический код, который вы используете. – dtb

ответ

8

Существует сообщение об этом на Microsoft connect. По умолчанию экранированные косые черты не допускаются из-за соображений безопасности.

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

Cites оттуда:

Я пытаюсь использовать API LinkedIn, для которого мне нужно по следующей ссылке: http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

Как вы можете видеть поле URL должен сбежать. Как это решить?

Ответ:

Мы в настоящее время не позволяют уцелевшие косые и точки появляются в пути, потому что это распространенный способ атакующего сервера, когда URI схема поддерживает сжатие пути.

Но есть вкладка с обходными решениями. Один из них для .NET 4 является добавление app.config:

Для .NET 4.0, вы можете контролировать это через конфигурационный файл:

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> 

Для .NET перед .NET был конструктором для класса Uri с параметром «dontEscape». Для .NET 4 это устарело.

+0

Спасибо, мужик! Это сделал трюк. Добавив этот раздел в Web.config, я решил проблему. –

0

Что произойдет, если вы удвоитесь?

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

Я пробовал это. К сожалению, не работает :( –

Смежные вопросы