12

LinkedIn から公開プロフィール情報を取得しようとしています。これを実現するには、
http://api.linkedin.com/v1/people/url=public-profile-urlを提供する必要があります。public-profile-url は URL エンコードする必要があります。

問題は、HttpClient、WebRequest などの .NET クラスが、提供された URL を「正規化」しているように見える Uri クラスを使用しているため、適切な形式の要求を送信できないことです。

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

このように、LinkedInから「Bad Request」を受け取ります。

Uri/UriBuilder がその URL をデコードしないようにする方法はありますか?

4

2 に答える 2

8

Microsoft connect でそれに関するレポートがあります。デフォルトでは、セキュリティ上の理由により、エスケープされたスラッシュは許可されていません。

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

そこから引用:

次のリンクが必要な LinkedIn API を使用しようとしています: http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

ご覧のとおり、url フィールドはエスケープする必要があります。これを解決する方法は?

答え:

現在、エスケープされたスラッシュとドットをパスに表示することは許可されていません。これは、URI スキームがパス圧縮をサポートしている場合にサーバーを攻撃する一般的な方法であるためです。

しかし、回避策のタブがあります。.NET 4 用のそれらの 1 つは、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 がパラメーター「dontEscape」を持つ Uri クラスのコンストラクターになる前の .NET の場合。.NET 4 では廃止されました。

于 2012-06-14T15:24:19.790 に答える
0

ダブルエスケープしたらどうなる?

http://api.linkedin.com/v1/people/url=http%253a%252f%252fwww.linkedin.com%252fin%252fiftachragoler
于 2012-06-14T13:55:13.340 に答える