أفضل طريقة لتحديد ما إذا كان اسم المجال سيكون صالحا في ملف "المضيفين"؟

StackOverflow https://stackoverflow.com/questions/967516

سؤال

النوافذ المضيفين ملف يسمح لك بربط IP إلى اسم المضيف التي لديها حرية أكبر بكثير من اسم مجال الإنترنت العادي. أود إنشاء وظيفة تحدد ما إذا كان اسم معين سيكون اسم نطاق ملف "مضيف" صالح.

مرتكز على هذه الإجابة وتجريب ما يعمل ولا، لقد توصلت إلى هذه الوظيفة:

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;
}

كما أن لديها فائدة أنه يجب أن تعمل مع أسماء يونيكود (حيث ستفشل Regex الأساسي).

هل هناك طريقة أفضل / أكثر أناقة للقيام بذلك؟

تحديث: كما اقترح من قبل مشروع قانون, ، ال uri.checkhostname. الطريقة التي تعمل بها تقريبا ما أريد، لكنه لا يسمح بأسماء المضيفين مثل "-Test" أن Windows يسمح في ملف "المضيفين". وأود أن جزء خاص "-" الجزء، لكنني قلق من الحالات الخاصة.

هل كانت مفيدة؟

المحلول

ماذا عن 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