ちょうど今Azureの質問へのコメントとして、@ smarxは指摘しました
私は通常、blob.Uri.ToString()よりもblob.Uri.AbsoluteUriを実行する方が良いと思います。
これには理由がありますか?のドキュメントにUri.AbsoluteUriは、Uri.ToString()「絶対URIを取得する」、「指定されたインスタンスの正規の文字列表現を取得する」と記載されています。
ちょうど今Azureの質問へのコメントとして、@ smarxは指摘しました
私は通常、blob.Uri.ToString()よりもblob.Uri.AbsoluteUriを実行する方が良いと思います。
これには理由がありますか?のドキュメントにUri.AbsoluteUriは、Uri.ToString()「絶対URIを取得する」、「指定されたインスタンスの正規の文字列表現を取得する」と記載されています。
回答:
例えば:
UriBuilder builder = new UriBuilder("http://somehost/somepath");
builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value");
Uri someUri = builder.Uri;
この場合、
Uri.ToString()人間が読めるURLを返します:http:// somehost / somepath?somekey = some + value
Uri.AbsoluteUri 一方、HttpUtility.UrlEncodeが返したエンコード済みフォームを返します。 http://somehost/somepath?somekey=some%2bvalue
正しいものを確認して使用してみませんか?
string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();
次の例では、Uriインスタンスの完全な内容をコンソールに書き込みます。示されている例では、
http://www.cartechnewz.com/catalog/shownew.htm?date=today
コンソールに書き込まれます。
Uri baseUri = new Uri("http://www.cartechnewz.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");
Console.WriteLine(myUri.AbsoluteUri);
AbsoluteUriプロパティには、すべてのフラグメントとクエリ文字列を含む、Uriインスタンスに格納されているURI全体が含まれます。