URI 문자열이 유효한지 확인하는 방법
URI 문자열이 유효한지 (Uri 생성자에 공급할 수 있는지) 어떻게 확인합니까?
지금까지 나는 다음과 같은 내용 만 가지고 있지만 명백한 이유로 덜 무자비한 방법을 선호합니다.
    Boolean IsValidUri(String uri)
    {
        try
        {
            new Uri(uri);
            return true;
        }
        catch
        {
            return false;
        }
    }
Uri.IsWellFormedUriString을 시도했지만 생성자에서 던질 수있는 모든 것을 좋아하지 않는 것 같습니다. 예를 들면 :
String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));
출력은 다음과 같습니다.
Uri.IsWellFormedUriString says: False
IsValidUri says: True
업데이트 / 답변
Uri 생성자는 기본적으로 Absolute 종류를 사용합니다. 이로 인해 Uri.TryCreate 및 생성자를 사용하려고 할 때 불일치가 발생했습니다. 생성자와 TryCreate 모두에 대해 UriKind를 일치 시키면 예상되는 결과를 얻을 수 있습니다.
올바른 형식의 URI는 특정 RFC 준수를 의미합니다. 예제의 로컬 경로가 이것과 일치하지 않습니다. IsWellFormedUriString문서 에서 더 많은 것을 읽으십시오 .
해당 메서드의 잘못된 결과는 Uri클래스가 입력을 구문 분석 할 수 없음을 의미하지 않습니다 . URI 입력이 RFC를 준수하지 않을 수 있지만 여전히 유효한 URI 일 수 있습니다.
업데이트 : 그리고 귀하의 질문에 대답하기 위해-Uri 문서에서 알 수 있듯이 TryCreate정확히 원하는 것을 시도하고 true 또는 false를 반환 하는 정적 메서드 가 있습니다 ( Uritrue 인 경우 실제 인스턴스).
허용되는 답변은 명시적인 예를 제공하지 않으므로 다음은 C #에서 URI의 유효성을 검사하는 코드입니다.
Uri outUri;
if (Uri.TryCreate("ThisIsAnInvalidAbsoluteURI", UriKind.Absolute, out outUri)
   && (outUri.Scheme == Uri.UriSchemeHttp || outUri.Scheme == Uri.UriSchemeHttps))
{
    //Do something with your validated Absolute URI...
}
절대 URI 및 HTTP 요청 만 지원한다고 가정하면 원하는 작업을 수행하는 함수가 있습니다.
public static bool IsValidURI(string uri)
{
    if (!Uri.IsWellFormedUriString(uri, UriKind.Absolute))
        return false;
    Uri tmp;
    if (!Uri.TryCreate(uri, UriKind.Absolute, out tmp))
        return false;
    return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps;
}
귀하의 경우 uri 인수는 파일 위치를 참조하는 절대 경로이므로 메서드의 문서에 따라 false를 반환합니다. 이것을 참조하십시오
참고URL : https://stackoverflow.com/questions/4835269/how-to-check-that-a-uri-string-is-valid
'Program Tip' 카테고리의 다른 글
| VBA 사전을 반복 하시겠습니까? (0) | 2020.12.04 | 
|---|---|
| Bash에서 연산자 "="와 "=="의 차이점은 무엇입니까? (0) | 2020.12.04 | 
| 한 클래스가 두 클래스를 확장 할 수 있습니까? (0) | 2020.12.04 | 
| Twitter 부트 스트랩 탭 및 자바 스크립트 이벤트 (0) | 2020.12.04 | 
| JavaScript에서 입력 텍스트 값을 얻는 방법 (0) | 2020.12.04 |