سؤال

هل هناك طريقة بسيطة في .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);

Request.Url سيعيد لك أوري من الطلب.بمجرد حصولك على ذلك، يمكنك استرداد أي شيء تريده تقريبًا.للحصول على البروتوكول، اتصل بالرقم مخطط ملكية.

عينة:

Uri url = Request.Url;
string protocol = url.Scheme;

أتمنى أن يساعدك هذا.

حتى الطريقة الأقصر قد تتطلب 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top