2

そこで、ASP.NET で WebAPI を使用して REST アプリを作成しています。問題が発生しました。

PHP では、urlencode 関数を使用しています。

元のbase64でエンコードされた文字列は

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=

PHPでurlencodeを実行した後、次のようになります:- kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

このデバッグに続いて、私はフィドラーをチェックし、実際に正しいURLエンコードされた文字列を送信しています...

ASP.NET MVC WebAPI に到達すると、次のようになります:-

kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc%3

したがって、WebAPI または MVC は、それ自体でいくつかの先行 URL デコードを実行しようとしているように見えますが、それには 2 つの問題があります:-

  • 文字列を部分的にデコードしているだけなので、+ と / 記号は正しく変換されますが、= は変換されません。
  • %3D から D を切り捨てているようです。その結果、有効な URL 文字ではない %3 が生成されます。

以前にこの問題を経験した人はいますか? それを複製するには、単純に Web アプリを作成します。

public TokenAPI Get(Guid caller, Guid id, string ip, string signature, Guid eventID)
{
}

そして、値を渡します

/api/GenerateToken?id=d9a2057c-c228-40d4-a9a9-5d7a4da4984b&caller=e1af32bb-ac84-4f45-b4d6-67f7543ffab2&ip=127.0.0.1&eventID=f6d71c3d-ef00-41e1-8dec-a3a77bdf7484&signature=kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

次に、署名パラメーターを調べると、部分的にしか URLDecoded されていないことがわかります...

任意のポインタをいただければ幸いです

4

1 に答える 1

0

ASP.NET MVC4RCでこれを再現することはできません。

手順:

  1. 新しい空のASP.NETMVC4アプリケーションを作成します
  2. APIコントローラーを追加します。

    public class ValuesController : ApiController
    {
        public string Get(Guid caller, Guid id, string ip, string signature, Guid eventID)
        {
            return signature;
        }
    }
    
  3. 案内する/api/values?id=d9a2057c-c228-40d4-a9a9-5d7a4da4984b&caller=e1af32bb-ac84-4f45-b4d6-67f7543ffab2&ip=127.0.0.1&eventID=f6d71c3d-ef00-41e1-8dec-a3a77bdf7484&signature=kA%2B1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3%2FWubyGTc%3D

  4. 結果:

    <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">kA+1n8i00qcJPNgPUXq8YqerScbQOw5Hvb3/WubyGTc=</string>
    

signatureパラメータは正しくURLデコードされます。

于 2012-08-14T05:57:36.947 に答える