2012-06-14 14 views
10

Tôi đang cố gắng lấy thông tin hồ sơ công khai từ LinkedIn. Để đạt được điều này, tôi phải cung cấp
http://api.linkedin.com/v1/people/url=public-profile-url, trong đó url hồ sơ công khai PHẢI được mã hóa URL.Giữ url được mã hóa trong khi sử dụng lớp URI

Vấn đề là các lớp .NET chẳng hạn như HttpClient, WebRequest, v.v. sử dụng lớp Uri có vẻ như "canonize" URL được cung cấp, để tôi không thể gửi yêu cầu được định dạng đúng.

URI phải:

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

nhưng là:

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

Bằng cách này, tôi nhận được 'Yêu cầu Bad' từ LinkedIn.

Có cách nào tôi có thể yêu cầu Uri/UriBuilder không giải mã URL đó không?

+0

Bạn có đang làm một cái gì đó như '" http://api.linkedin.com/v1/people/url= "+ uri.ToString()'? Sau đó, lớp URI đang làm chính xác những gì nó nên làm và bạn đang làm sai. – dtb

+0

Thực ra, tôi đang thực hiện "http://api.linkedin.com/v1/people/url=" + Url.Encode (profileUrl), và sau đó chuyển nó tới DotNetOpenAuth mà chính nó chuyển nó tới UriBuilder. –

+2

Không có lớp Url nào trong .NET. Vui lòng hiển thị mã thực tế bạn đang sử dụng. – dtb

Trả lời

8

Có báo cáo về điều đó trên Microsoft kết nối. Theo mặc định, dấu gạch chéo đã thoát không được phép vì lý do bảo mật.

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

Cites từ đó:

tôi cố gắng sử dụng api LinkedIn, mà tôi cần liên kết sau: http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

Như bạn có thể thấy lĩnh vực url cần được thoát. Làm thế nào để giải quyết điều này?

Trả lời:

Hiện tại chúng tôi không cho phép slashes trốn thoát và chấm xuất hiện trong đường dẫn bởi vì đây là một cách phổ biến để kẻ tấn công một máy chủ khi URI chương trình hỗ trợ nén con đường.

Nhưng có tab có giải pháp thay thế. Một trong số đó cho .NET 4 là thêm app.config:

Đối với .NET 4.0, bạn có thể kiểm soát này thông qua các tập tin cấu hình:

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> 

Đối .NETs trước .NET là hàm tạo cho lớp Uri với tham số "dontEscape". Đối với .NET 4 nó đã lỗi thời.

+0

Cảm ơn, người đàn ông! Điều này đã làm các trick.Thêm vào phần đó để Web.config, tôi giải quyết vấn đề. –

0

Điều gì sẽ xảy ra nếu bạn thoát kép?

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

Tôi đã thử điều đó. Đáng buồn là không làm việc: ( –

Các vấn đề liên quan