最初のMonoTouchiOSアプリケーションを開発するとき、System.Uriインスタンスを使用してプライベートWebサービスから保護されたリソースをダウンロードしようとしましたが、すべてのインスタンスが常にエスケープされていないURLを返すため、署名をチェックするとリクエストが失敗します。
良いリクエストの例:
http://example.com/folder%2Ftest?signature=000%3D
悪いリクエストの例:
http://example.com/folder/test?signature=000=
リソースを適切にダウンロードするには、適切なURLを単純な文字列から適切なUriインスタンスに変換する必要があります。プロセスを開始したばかりですが、結論を出すことができません。
string urlStringVersion = "http://example.com/folder%2Ftest?signature=000%3D";
//
// urlStringVersion == http://example.com/folder%2Ftest?signature=000%3D
Uri urlUriVersion = new Uri (urlStringVersion);
//
// urlUriVersion == http://example.com/folder/test?signature=000=
var fi = typeof (Uri).GetField ("host", BindingFlags.NonPublic | BindingFlags.Instance);
fi.SetValue (urlUriVersion, "example.com");
//
// urlUriVersion.AbsoluteUri is now == http://example.com/folder/test?signature=000%3D
<Another C# command here>
//
// urlUriVersion.AbsoluteUri is now == http://example.com/folder%2Ftest?signature=000%3D
最後に、最後のurlUriVersion.AbsoluteUriが同じ最初のurlStringVersionで記述されたURLを指すようにするために、ここで別のC#コマンドを置き換えるためにどのコマンドを使用できますか?
この変換を機能させる必要があります。そうしないと、プライベートWebサービスでリソースを公開する必要があります。
また、いくつかの代替案をテストしました。
次のような他の質問から:URLエンコードされたスラッシュを使用してURLを取得しますが、いくつかの例外が発生しています:
System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません
構成ファイルを使用しますが、この場合、モバイルデバイスには技術的にアプリケーションドメインがないため、使用できません。
パーセント記号をエンコードされたパーセント記号に置き換えてURLを二重エンコードします(したがって、「%」は「%25」になります)。
私の試みのどれも私の問題を解決しませんでした。
前もって感謝します、
ピバ