programing

Uri.ToString ()과 Uri.AbsoluteUri의 차이점은 무엇입니까?

nasanasas 2020. 9. 25. 07:55
반응형

Uri.ToString ()과 Uri.AbsoluteUri의 차이점은 무엇입니까?


방금 Azure 질문에 대한 의견으로 @smarx가 언급했습니다.

일반적으로 blob.Uri.ToString ()보다 blob.Uri.AbsoluteUri를 수행하는 것이 더 낫다고 생각합니다.

이것에 대한 이유가 있습니까? Uri.AbsoluteUri"절대 URI를 가져옵니다", Uri.ToString()"지정된 인스턴스에 대한 표준 문자열 표현을 가져 옵니다"라는 메모에 대한 문서입니다 .


예를 들면 다음과 같습니다.

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


또한 : 당신이하면 Uri되는 상대는 Uri AbsoluteUri 실패합니다 ToString()없습니다.

Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string str1 = uri.ToString(); // "fuu/bar.xyz"
string str2 = uri.AbsoluteUri; // InvalidOperationException

올바른 것을 확인하고 사용하지 않으시겠습니까?

string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();

모두가 그것이 uri.AbsoluteUri더 낫다고 생각하는 것 같지만 상대 경로로 실패하기 때문에 아마도 보편적 인 방법은 다음과 같습니다.

Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string notCorruptUri = Uri.EscapeUriString(uri.ToString());

참고 URL : https://stackoverflow.com/questions/7624987/whats-the-difference-between-uri-tostring-and-uri-absoluteuri

반응형