문제

창문 파일을 호스트합니다 IP를 a에 연결할 수 있습니다 호스트 이름 그것은 일반적인 인터넷 도메인 이름보다 훨씬 더 큰 자유를 가지고 있습니다. 주어진 이름이 유효한 "호스트"파일 도메인 이름인지 결정하는 함수를 만들고 싶습니다.

기반 이 답변 그리고 효과가 있고 그렇지 않은 것에 대한 실험, 나는이 기능을 생각해 냈습니다.

private static bool IsValidDomainName(string domain)
{
    if (String.IsNullOrEmpty(domain) || domain.Length > 255)
    {
        return false;
    }

    Uri uri;

    if (!Uri.TryCreate("http://" + domain, UriKind.Absolute, out uri))
    {
        return false;
    }

    if (!String.Equals(uri.Host, domain, StringComparison.OrdinalIgnoreCase) || !uri.IsWellFormedOriginalString())
    {
        return false;
    }

    foreach (string part in uri.Host.Split('.'))
    {
        if (part.Length > 63)
        {
            return false;
        }
    }

    return true;
}

또한 유니 코드 이름으로 작동해야한다는 이점이 있습니다 (기본 정규식이 실패하는 경우).

더 나은/더 우아한 방법이 있습니까?

업데이트: 제안한대로 계산서,, uri.checkhostname 메소드는 거의 내가 원하는 것을 수행하지만 Windows가 "호스트"파일에서 허용하는 "-test"와 같은 호스트 이름을 허용하지 않습니다. 특별한 경우 "-"부분이지만 더 많은 특별한 경우가 있다고 우려합니다.

도움이 되었습니까?

해결책

어때 system.uri.checkhostname () 방법?

private static bool IsValidDomainName(string name)
{
    return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}

왜 직접 일합니까?

다른 팁

도메인 이름이 "fasdfasdfasd.com"과 같은 가짜 인 경우에도 이러한 방법은 신뢰할 수 없습니다.

가장 좋은 방법은 Webresponse를 보내고 도메인의 응답을 기다리는 것입니다. 다음은이 프로세스의 완전한 코드와 설명입니다 (긴 코드 스 니펫은 여기에서 복사하지 않음).

http://www.dotnetfunda.com/articles/show/1072/validating-domain-name-in-aspnet

감사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top