আপনার কোডে এই এক্সটেনশন পদ্ধতিটি যুক্ত করুন:
public static Uri UrlOriginal(this HttpRequestBase request)
{
string hostHeader = request.Headers["host"];
return new Uri(string.Format("{0}://{1}{2}",
request.Url.Scheme,
hostHeader,
request.RawUrl));
}
এবং তারপরে আপনি এটিকে সম্পাদন করতে পারেন RequestContext.HttpContext.Request
সম্পত্তি থেকে ।
স্থানীয় ওয়েবসাইটের জন্য পোর্ট ৮০ ব্যতীত অন্য বন্দর ব্যবহার করে এমন মেশিনগুলির উপরে উত্থাপিত Asp.Net এ একটি বাগ রয়েছে (পাশের ধাপে থাকতে পারে, নীচে দেখুন) (ভার্চুয়াল আইপি-তে লোড-ব্যালান্সিংয়ের মাধ্যমে যদি অভ্যন্তরীণ ওয়েবসাইটগুলি প্রকাশিত হয় তবে একটি বড় সমস্যা) এবং পোর্টগুলি নিয়ম প্রকাশের জন্য অভ্যন্তরীণভাবে ব্যবহৃত হয়) যার মাধ্যমে Asp.Net সর্বদা পোর্টে পোর্ট যুক্ত করবেAbsoluteUri
সম্পত্তিটিতে - এমনকি যদি মূল অনুরোধটি এটি ব্যবহার না করে।
এই কোডটি নিশ্চিত করে যে প্রত্যাবর্তিত ইউআরএল মূলত ব্রাউজারের সাথে সর্বদা সমান কোনও লোড-ব্যালেন্সিং ইত্যাদির আগে সংঘটিত হওয়ার আগে অনুরোধ করা (পোর্ট সহ - যেমন এটি হোস্ট শিরোনামে অন্তর্ভুক্ত হবে) এর ।
কমপক্ষে, এটি আমাদের (বরং সংশ্লেষিত!) পরিবেশে ঘটে :)
হোস্ট শিরোনামটির পুনর্লিখনের মধ্যে যদি কোনও মজাদার প্রক্সি থাকে তবে এটি আর কাজ করবে না।
30 জুলাই 2013 আপডেট করুন
নীচের মন্তব্যে @ কেভিন জোনস দ্বারা উল্লিখিত হিসাবে - পরবর্তী অংশে আমি যে সেটিংটি উল্লেখ করেছি তা এখানে নথিভুক্ত করা হয়েছে: http ://msdn.mic Microsoft.com/en-us/library/hh975440.aspx
যদিও আমাকে বলতে হবে যে আমি চেষ্টা করার পরে এটি কাজ করতে পারি না - তবে এটি আমার জন্য টাইপো বা কিছু তৈরি করতে পারে।
আপডেট 9 জুলাই 2012
আমি কিছুক্ষণ আগে এটি পেরিয়ে এসেছি এবং এই উত্তরটি আপডেট করার অর্থ ছিল, কিন্তু কখনই হয়নি। যখন এই উত্তরে সবেমাত্র একটি উত্সাহ এসেছে তখন আমি ভেবেছিলাম আমার এখনই এটি করা উচিত।
Asp.Net- এ আমি যে 'বাগ' উল্লেখ করেছি তাতে একটি আপাতদৃষ্টিতে অননুমোদিত অ্যাপসেটিং মান - যা বলা হয় - দিয়ে নিয়ন্ত্রণ করা যায় 'aspnet:UseHostHeaderForRequest'
ie
<appSettings>
<add key="aspnet:UseHostHeaderForRequest" value="true" />
</appSettings>
HttpRequest.Url
আইএলএসপি- --->
তে দেখার সময় আমি এটি পেরিয়ে এসেছি - নীচের অনুলিপিটির / বরাবর সেই আইএলএসপি ভিউ থেকে আটকানো নির্দেশিত:
public Uri Url
{
get
{
if (this._url == null && this._wr != null)
{
string text = this.QueryStringText;
if (!string.IsNullOrEmpty(text))
{
text = "?" + HttpEncoder.CollapsePercentUFromStringInternal(text,
this.QueryStringEncoding);
}
---> if (AppSettings.UseHostHeaderForRequestUrl)
{
string knownRequestHeader = this._wr.GetKnownRequestHeader(28);
try
{
if (!string.IsNullOrEmpty(knownRequestHeader))
{
this._url = new Uri(string.Concat(new string[]
{
this._wr.GetProtocol(),
"://",
knownRequestHeader,
this.Path,
text
}));
}
}
catch (UriFormatException)
{ }
}
if (this._url == null) { /* build from server name and port */
...
আমি ব্যক্তিগতভাবে এটি ব্যবহার করি নি - এটি নিবন্ধনহীন এবং তাই চারপাশে আটকে থাকার গ্যারান্টিযুক্ত না - তবে এটি আমি উপরে উল্লিখিত একই জিনিসটি করতে পারে। অনুসন্ধান ফলাফলে প্রাসঙ্গিকতা বৃদ্ধি - এবং স্বীকার করতে অন্য কেউ যারা seeems এই আবিষ্কৃত হয়েছে করুন - সেটিং টুইটারে নিক Aceves দ্বারা উল্লিখিত হয়েছে'aspnet:UseHostHeaderForRequest'