أفضل طريقة لتحديد ما إذا كان اسم المجال سيكون صالحا في ملف "المضيفين"؟
-
12-09-2019 - |
سؤال
النوافذ المضيفين ملف يسمح لك بربط 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.
شكرا