আমি কীভাবে সাইটের বেসুরল পেতে পারি?


183

আমি একটি সামান্য সহায়ক পদ্ধতি লিখতে চাই যা সাইটের মূল URL টি প্রদান করে returns এটিই আমি নিয়ে এসেছি:

public static string GetSiteUrl()
{
    string url = string.Empty;
    HttpRequest request = HttpContext.Current.Request;

    if (request.IsSecureConnection)
        url = "https://";
    else
        url = "http://";

    url += request["HTTP_HOST"] + "/";

    return url;
}

এর মধ্যে কি কোনও ভুল আছে, যা আপনি ভাবতে পারেন? কেউ কি এর উপর উন্নতি করতে পারে?



উত্তর:


324

এটা চেষ্টা কর:

string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + 
    Request.ApplicationPath.TrimEnd('/') + "/";

13
এটিই কেবলমাত্র আমি খুঁজে পেয়েছি যে উত্তরটি এই ক্ষেত্রে দেখা যায় যেখানে কোনও অ্যাপ্লিকেশন যা আইআইএসের শীর্ষ স্তরের ওয়েবসাইটের শিশু।
জন

6
স্ট্রিং.ফর্ম্যাট ("{0} {1} /", অনুরোধ.উর্ল.গেটলফ্ট পার্ট (উরিপার্টিয়াল.অ্যাটরিটি), রিকোয়েস্ট.এপ্লিকেশনপথ.ট্রিমেন্ড ('/'))
ডাইগোহব

2
অনুরোধ.উরল.শেম সর্বদা কার্যকর হয় না যখন আপনি কোনও সার্ভারে অভ্যন্তরীণভাবে https এর জন্য অভ্যন্তরীণ HTTP কনফিগার করা এবং এসএসএল টার্মিনেশন সেটআপ করা থাকে তবে https * বাইরে চলছে running এটি সন্ধান করার জন্য, আমি কেবল ওয়েবসাইটটি কোথায় থাকে তার উপর ভিত্তি করে "HTTP" বা "https" এর মান সহ একটি পরিবেশ সম্পর্কিত অ্যাপসেটিং কী "urlScheme" তৈরি করেছি। ওয়েবকনফিগের এই সেটিংটি কনফিগারেশন ম্যানেজার.অ্যাপসেটগুলি ["কী"] দ্বারা অ্যাক্সেস করা যেতে পারে
বেন সেওয়ার্ডস

3
এটি অ্যাকাউন্ট লোড ভারসাম্য গ্রহণ করে না, যেখানে ডিক্রিপশন হয়, বা প্রক্সিগুলি ফরোয়ার্ড করে। আপনি এটি ব্যবহার করে একটি ভুল ঠিকানা দিয়ে শেষ করতে পারেন, তাই সাবধান হন এবং আপনার ওয়েবসাইটটি কোথায় স্থাপন করা হয়েছে তা জেনে রাখুন।
কনর গ্যালাগার

$ "{System.Web.HttpContext. Current.Request.Url.GetLeftPart (UriPartial.Authority)} {System.Web.HttpContext.Cur rent.Request.ApplicationPath .TrimEnd ( '/')?} /";
রায়ান পেনফোল্ড

166
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)

এটাই ;)


25
এটি ভার্চুয়াল বা অ্যাপ্লিকেশন পাথের জন্য কাজ করে না। আপনার বাম অংশ ছাড়াও অনুরোধ.অ্যাপ্লিকেশনপথটি ব্যবহার করা উচিত।
ওয়ার্লক

বেস ইউআরএলটি হ'ল httpx: //domain.com: [পোর্ট] / আপনাকে অবশ্যই এই সমাধানটিতে অ্যাপের পথ যোগ করতে হবে
পাভেল সিওচ

9

দুর্ভাগ্যক্রমে, GetLeftPartপিসিএল সংস্করণে জনপ্রিয় সমাধান সমর্থিত নয় UriGetComponentsতবে, তাই আপনার যদি পোর্টেবিলিটি দরকার হয় তবে এই কৌশলটি করা উচিত:

uri.GetComponents(
    UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);

6

আমি বিশ্বাস করি যে ওয়েবসাইটটি যখন ওয়েবসাইটের মূলের মধ্যে নেই তখন উপরের উত্তরগুলি বিবেচনা করে না।

এটি ওয়েবএপিআই নিয়ন্ত্রকের জন্য একটি:

string baseUrl = (Url.Request.RequestUri.GetComponents(
                    UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                 + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;

কোনও নিয়ামকের মধ্যে থেকেই কনফিগারেশন ব্যবহার করুন host ভার্চুয়ালপথরুটটি হোস্ট ইন্ডিপেন্ডেন্ট হিসাবে স্বতন্ত্র।
ড্যারেল মিলার

5

আমার কাছে, @ ওয়ার্লককে এখানে এখনও সেরা উত্তরের মতো মনে হচ্ছে তবে আমি সর্বদা এটি অতীতে ব্যবহার করেছি;

string baseUrl = Request.Url.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.UriEscaped)   

বা একটি ওয়েবএপিআই নিয়ন্ত্রণকারীতে;

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

যা সুবিধাজনক তাই আপনি কী পালানোর ফর্ম্যাটটি চান তা চয়ন করতে পারেন। এ জাতীয় দুটি ভিন্ন বাস্তবায়ন কেন আমি তা পরিষ্কার নয় এবং যতদূর আমি বলতে পারি যে এই পদ্ধতি এবং @ ওয়ারলক এই ক্ষেত্রে ঠিক একই ফলাফলটি ফিরে আসবে তবে মনে হচ্ছে উদাহরণস্বরূপ GetLeftPart()সার্ভার উরির মতো mailtoট্যাগগুলিতেও কাজ করবে ।


আপনি
এনগ্রোক

5

এটি অনেক বেশি বোকা প্রমাণ পদ্ধতি।

VirtualPathUtility.ToAbsolute("~/");

/আপনি কিছু অ্যাপ্লিকেশন ডোমেইনে যেমন হোস্টারভার / ইউরপ্লিকেশন নাম / থাইরোটপথ
ভাইবস ২০০6

@ vibs2006 হ্যাঁ এটির একটি দ্বিধাদায়ক প্রশ্ন
ড্যানিয়েল এ। হোয়াইট

4

আমিও সাথে যাব

HttpContext.Current.Request.ServerVariables["HTTP_HOST"]

1
এটি প্রোটোকল যুক্ত করবে: (HttpContext.Request.ServerVariables ["HTTPS"] == "বন্ধ"? "HTTP: //": "https: //") + HTTPContext.Request.ServerVariables ["HTTP_HOST"]
ওমোরকুপফকফি

4

ওয়ারলক যা লিখেছিল তার ভিত্তিতে, আমি দেখতে পেয়েছি যে ভার্চুয়াল পাথের রুটটি আপনার ওয়েবের মূলটিতে হোস্ট না করা হলে প্রয়োজনীয়। (এটি এমভিসি ওয়েব এপিআই নিয়ন্ত্রণকারীদের জন্য কাজ করে)

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) 
+ Configuration.VirtualPathRoot;


1

এটি আমার পক্ষে কাজ করে।

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
  • Request.Url.OriginalString : ব্রাউজার দেখানোর মতো সম্পূর্ণ পথটি ফেরত দিন।
  • Request.Url.PathAndQuery : (সম্পূর্ণ পাথ) - (ডোমেনের নাম + পোর্ট) ফিরিয়ে দিন।
  • অনুরোধ.এপ্লিকেশনপথ : হোস্ট করা সার্ভারে "/" এবং স্থানীয় আইআইএসে "অ্যাপ্লিকেশন নাম" ফিরিয়ে দিন।

সুতরাং আপনি যদি নিজের ডোমেন নাম অ্যাক্সেস করতে চান তবে অ্যাপ্লিকেশনটির নামটি অন্তর্ভুক্ত করার বিষয়টি বিবেচনা করবেন না:

  1. আইআইএস মোতায়েন
  2. যদি আপনার অ্যাপ্লিকেশন উপ-ডোমেনে স্থাপন করা হয়।

====================================

Dev.x.us/web এর জন্য

এটি এই শক্তিশালী পাঠ্য ফেরত দেয়


0

দয়া করে নীচের কোডটি ব্যবহার করুন                           

string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);

দয়া করে আপনার কোডটি ব্যাখ্যা করুন যাতে অন্যান্য ব্যবহারকারীরা এর কার্যকারিতা বুঝতে পারে। ধন্যবাদ!
ইগনাসিও আরা


-2

আপনি পোর্টটি নন পোর্ট 80 / এসএসএল এর জন্য যুক্ত করতে পারবেন?

কিছুটা এইরকম:

if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443")
            {
                port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString());
            }

এবং চূড়ান্ত ফলাফল এ ব্যবহার?


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