। নেট - প্রোটোকল, হোস্ট এবং পোর্ট পান


228

বর্তমান প্রোটোকল, হোস্ট এবং পোর্টটি দ্রুত পাওয়ার জন্য নেট নেট-এ কোনও সহজ উপায় আছে? উদাহরণস্বরূপ, আমি যদি নিম্নলিখিত URL- তে আছি:

http://www.mywebsite.com:80/pages/page1.aspx

আমাকে ফিরতে হবে:

http://www.mywebsite.com:80

আমি জানি যে আমি Request.Url.AbsoluteUriসম্পূর্ণ ইউআরএল পেতে ব্যবহার করতে পারি, এবং আমি জানি যে আমি Request.Url.Authorityহোস্ট এবং পোর্ট পেতে ব্যবহার করতে পারি তবে আমি ইউআরএল স্ট্রিংটিকে বিশ্লেষণ না করে প্রোটোকল পাওয়ার সর্বোত্তম উপায় সম্পর্কে নিশ্চিত নই।

কোনও পরামর্শ?


1
- এখানে একটি simlar প্রশ্নের আমার উত্তর দেখুন stackoverflow.com/a/1534478/98740
WDuffy

উত্তর:


172

নিম্নলিখিত (সি #) কোডটি কৌশলটি করা উচিত

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;

26
বা স্ট্রিং অনুরোধিত = uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
tranmq

17
এটি যুক্তিযুক্তভাবে ভুল উত্তর কারণ এটি কোনও ":" সন্নিবেশ করবে এমনকি কোনও বন্দর না থাকলেও। Uri.GetLeftPart@ Dthrasher পয়েন্ট হিসাবে হিসাবে ব্যবহার করুন
gman

মনে রাখবেন যে কিছু ক্ষেত্রে, আপনি এখনও uri- র সাথে সম্মতি জানাতে চান Get গেটলফ্ট পার্ট () এর পরিবর্তে হাইডার্স ["হোস্ট"], উদাহরণস্বরূপ একটি প্রক্সিটির পিছনে আপনার পরিষেবাটি কোনও ভিন্ন / অ-মানক বন্দরে শুনছে এবং যদি আপনি সেই url ব্যবহার করেন একটি কলব্যাক (প্রাইভেট পোর্ট সহ) হোস্টটি অ্যাক্সেসযোগ্য হবে।
দোভেরাই

408

যদিও @ রিকের এই প্রশ্নের স্বীকৃত উত্তর রয়েছে, তবুও এই নামকরণের নামটি অল্প ব্যবহার করে এটি করার একটি ছোট উপায় আছে 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 এর বাইরে অন্য কিছু হয় তবে এটি ফলাফলের মধ্যে অন্তর্ভুক্ত করা হত।


12
এটি আমার মতে সেরা উদাহরণ। এটি লোকালহোস্ট: বন্দর এবং লাইভ দৃষ্টান্তের জন্য কাজ করে।
মাফিন ম্যান

13
গেটলিফ্ট পার্ট - সত্যই, ওএমজি সুন্দর নামকরণ।
ভ্যালেন্টিন কুজুব

ইউআরএলের এই অংশটির একটি ব্যবহৃত ব্যবহৃত নাম আছে কি কেউ জানেন? জাভাস্ক্রিপ্টে একে অরিজিন বলা হয় তবে আমি নিশ্চিত নই যে এটি সর্বজনীনভাবে একমত হয়েছে কিনা
ডার্ক বোয়ার

1
মাইক্রোসফ্ট এ জন্য "কর্তৃপক্ষ" শব্দটি ব্যবহার করে, তবে আমি জানি না যে এটি কোনও স্ট্যান্ডার্ড শব্দ। দেখুন stackoverflow.com/questions/2142910/...
dthrasher

1
আমি ব্যক্তিগতভাবে Uriক্লাসটি এভাবে ব্যবহার করা পছন্দ করি না । এমন অনেকগুলি কেস রয়েছে যেখানে এই নির্মাতা একটি ব্যতিক্রম ছুঁড়ে মারবে। বেশিরভাগ ক্ষেত্রে, আমি হাতের কাজটি বাতিল করে দেওয়ার আগে আমার কোডটি আরও বেশি ক্ষমাশীল হওয়া পছন্দ করি।
জোনাথন উড

60

আচ্ছা আপনি যদি এএসপি নেট এ করছেন বা এইচটিটিপি কনটেক্সট অ্যাক্সেস পেয়েছেন তবে বর্তমান।আর জিজ্ঞাসা করলাম আমি বলি এগুলি পাওয়ার সহজ এবং আরও সাধারণ উপায়:

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

আশা করি এটা কাজে লাগবে. :)


1
আমি এই পদ্ধতিটি পছন্দ করি, আমি চাই আমি কেবল পাইস পেতে পারি এবং পোর্টটি পাওয়ার জন্য স্ট্রিংটি যথেষ্ট পরিমাণে গঠিত কিনা তা নিয়ে চিন্তা করার দরকার নেই। +1
Jrud

এই বৈশিষ্ট্যগুলি সম্পর্কে আরও কিছু বিবরণ: blog.jonschneider.com/2014/10/…
জন স্নাইডার

33

এটির জন্য আরও কাঠামোগত উপায় হ'ল ইউরিবিল্ডার ব্যবহার করা। এটি সরাসরি স্ট্রিং ম্যানিপুলেশন এড়ায়।

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);

23

অনুরোধ.আরল আপনাকে অনুরোধের উরি ফিরিয়ে দেবে । আপনার কাছে একবার এটি হয়ে গেলে, আপনি চান বেশ কিছু কিছু পেতে পারেন। প্রোটোকল পেতে, স্কিমে সম্পত্তি কল করুন ।

নমুনা:

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

আশাকরি এটা সাহায্য করবে.


20

এমনকি আরও ছোট উপায়েও নতুন এএসপি প্রয়োজন হতে পারে: নেট:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)

ইউরিকম্পোন্টস এনাম আপনাকে ইউআরআইয়ের কোন উপাদান (গুলি) অন্তর্ভুক্ত করতে চান তা নির্দিষ্ট করতে দেয়।


1
দুর্দান্ত, কারণ এটি পিসিএল (.GetLeftPart () পাওয়া যায় না)
Sascha

10

হোলারের উত্তরের সাথে খুব মিল similar আপনার যদি ইউআরএল দখল করতে হয় তবে এমন কিছু করতে পারেন:

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.