.NET - احصل على البروتوكول والمضيف والمنفذ
سؤال
هل هناك طريقة بسيطة في .NET للحصول بسرعة على البروتوكول والمضيف والمنفذ الحالي؟على سبيل المثال، إذا كنت على عنوان URL التالي:
http://www.mywebsite.com:80/pages/page1.aspx
أحتاج إلى العودة:
http://www.mywebsite.com:80
أعلم أنه يمكنني استخدامها Request.Url.AbsoluteUri
للحصول على عنوان URL الكامل، وأعلم أنه يمكنني استخدامه Request.Url.Authority
للحصول على المضيف والمنفذ، لكنني لست متأكدًا من أفضل طريقة للحصول على البروتوكول دون تحليل سلسلة عنوان URL.
أي اقتراحات؟
المحلول
يجب أن يقوم الكود (C#) التالي بالمهمة
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
نصائح أخرى
على الرغم من أن @Rick لديه الإجابة المقبولة لهذا السؤال، إلا أن هناك في الواقع طريقة أقصر للقيام بذلك، باستخدام الاسم السيئ Uri.GetLeftPart()
طريقة.
Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);
هناك صيد واحد ل GetLeftPart()
, ، لكن.إذا كان المنفذ هو المنفذ الافتراضي للنظام، فسيتم إزالته.نظرًا لأن المنفذ 80 هو المنفذ الافتراضي لـ http، فإن إخراج GetLeftPart()
في المثال الخاص بي أعلاه سيكون http://www.mywebsite.com
.
إذا كان رقم المنفذ غير 80، فسيتم تضمينه في النتيجة.
حسنًا ، إذا كنت تفعل ذلك في ASP.NET أو يمكنك الوصول إلى httpcontext.current.request سأقول إن هذه طرق أسهل وأكثر عمومية للحصول عليها:
var scheme = Request.Url.Scheme; // will get http, https, etc.
var host = Request.Url.Host; // will get www.mywebsite.com
var port = Request.Url.Port; // will get the port
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx
آمل أن يساعد هذا.:)
هناك طريقة أكثر تنظيماً للحصول على ذلك وهي استخدام UriBuilder.وهذا يتجنب التلاعب المباشر بالسلسلة.
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
حتى الطريقة الأقصر قد تتطلب ASP.Net أحدث:
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
يتيح لك تعداد UriComponents تحديد مكون (مكونات) URI الذي تريد تضمينه.
مشابه جدا لإجابة هولجر.إذا كنت بحاجة إلى الحصول على عنوان URL، فيمكنك القيام بشيء مثل:
Uri uri = Context.Request.Url;
var scheme = uri.Scheme // returns http, https
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https://
var host = uri.Host; // return www.mywebsite.com
var port = uri.Port; // returns port number
ال فئة أوري يوفر مجموعة كاملة من الأساليب، العديد منها لم أدرجها.
في حالتي، كنت بحاجة للاستيلاء LocalHost
جنبا إلى جنب مع Port Number
, ، وهذا ما فعلته:
var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
الذي أمسك بنجاح: http://localhost:12345