2012-08-14 5 views
7

다음 테스트에서 왜 마지막 테스트가 실패하나요? Uri 만약상대 Hashbang URL 호환성을위한 Uri.IsWellFormedUriString

[Fact] 
    public void IsWellFormedUriString_AbsolutNonHashTagUri_ReturnsTrue() 
    { 
     Assert.True(Uri.IsWellFormedUriString("http://www.RegularSite.org/Home", UriKind.Absolute)); 
    } 

    [Fact] 
    public void IsWellFormedUriString_RelativeNonHashTagUri_ReturnsTrue() 
    { 
     Assert.True(Uri.IsWellFormedUriString("Home", UriKind.Relative)); 
    } 

    [Fact] 
    public void IsWellFormedUriString_AbsolutHashTagUri_ReturnsTrue() 
    { 
     Assert.True(Uri.IsWellFormedUriString("http://www.w3.org/#!Home", UriKind.Absolute)); 
    } 

    [Fact] 
    public void IsWellFormedUriString_RelativeHashTagUri_ReturnsTrue() 
    { 
     // Fails! 
     Assert.True(Uri.IsWellFormedUriString("#!Home", UriKind.Relative)); 
    } 

는 왜 안 상대 버전에서, IsWellFormedUriString의 절대 버전 Hashbangs을 인식? 내가 뭘 놓치고 있니?

참고 : This는 도움이되지 않습니다.

답변

3

hashbang이 URI Scheme의 일부가 아니기 때문에 이것이 예상대로 작동하지 않는 이유가 있습니다. 이 메서드는 URI 형식의 계층 적 부분을 예상하며 해시 표시 (및 이후 해시 뱅)는 상대 경로와 절대 경로가 결정되는 계층 적 부분의 구성원이 아닙니다.

<>는 필수 부분
[]는 절대 URI의 일례로서 임의의 부분

<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]

이고; 나는 조각과 해시 마크

http://domain.com/path/to/something/?query=1#fragment

을 포함하는 무시 틀리지 않는 경우 쿼리는 여기뿐만 아니라 당신을 위해 좀 더 정보입니다. 이것은 MSDN에서 모든

문자열이 캐릭터와 URI를 구성하는 시도가 잘 형성 문자열 이스케이프 더 필요로하지 않는 것을 보장되어 있는지 여부를 나타냅니다 Uri.IsWellFormedUriString() 방법을 설명한다.

비고 : 기본적으로

는 문자열 RFC 2396RFC 2732에 따라 잘 구성된 것으로 간주됩니다. 국제 자원 식별자 (IRI) 또는 국제화 도메인 이름 (IDN) 구문 분석이 활성화 된 경우 문자열은 RFC 3986RFC 3987에 따라 올바른 형식으로 간주됩니다.

http://www.contoso.com/path???/file 이름 문자열이 제대로 탈출되지
:

이 문자열은 다음 조건 중 하나가

다음은 몇 가지 오류 예입니다 발생하는 경우, 메소드가 false를 반환하는 원인이 제대로 형성 간주됩니다 .

c : \ directory \ filename
문자열은 암시 적 파일 Uri를 나타내는 절대 Uri입니다.

file : // c :/directory/filename
문자열은 경로 앞에 슬래시가없는 절대 URI입니다.

HTTP : 앞으로이
www.contoso.com/path/file

을 슬래시로 호스트/경로/파일
이 문자열들이이 처리됩니다 경우에도 이스케이프 백 슬래시를 포함 \ 문자열은 계층 절대 URI를 나타냅니다 ": //"가 포함되어 있지 않습니다.

+0

상세한 답변을 주셔서 감사합니다. 그러나 그에 따르면 세 번째 테스트는 실패한 것이며 그렇지 않습니다. 이것은 내 질문에 대답하지 않습니다. – seldary

+0

@seldary 아니요, 세 번째 테스트는 절대 우 리가'http : // www.w3.org /'를 가지고 있기 때문에 통과 할 수 있습니다. 왜냐하면'# '을 조각의 시작으로 탐지하고'! 그러므로 조각의 본문으로 '집'을 찾는다. – vane