تحديد الموقع مطلقة ، مؤهل بشكل كامل رابط في asp.net
سؤال
كيف يمكنني باستمرار الحصول على المطلق ، مؤهل بشكل كامل الجذر أو قاعدة url للموقع بغض النظر عن ما إذا كان الموقع هو في دليل ظاهري و بغض النظر من أين المدونة في الدليل هيكل ؟ لقد حاولت كل متغير وظيفة أستطيع أن أفكر و لم أجد وسيلة جيدة.
كنت تريد أن تكون قادرة على الحصول على رابط من الموقع الحالي ، أي http://www.example.com أو إذا كان الدليل الظاهري ، http://www.example.com/DNN/
وهنا بعض من الأشياء التي كنت قد حاولت والنتيجة.الوحيد الذي يشمل كل قطعة التي أريد (http://localhost:4471/DNN441) هو الطلب.URI.AbsoluteURI:
- طلب.PhysicalPath:C:\WebSites\DNN441\Default.aspx
- طلب.ApplicationPath:/DNN441
- طلب.PhysicalApplicationPath:C:\WebSites\DNN441\
- MapPath:C:\WebSites\DNN441\DesktopModules\Articles emplates\Default.aspx
- RawURL:/DNN441/ModuleTesting/مقالات/tabid/56/ctl/تفاصيل/منتصف/374/ItemID/1/Default.aspx
- طلب.Url.AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
- طلب.Url.AbsolutePath:/DNN441/Default.aspx
- طلب.Url.LocalPath:/DNN441/Default.aspx الطلب.Url.المضيف:localhost
- طلب.Url.PathAndQuery:/DNN441/Default.aspx?TabId=56&ctl=Details&mid=374&ItemID=1
المحلول
في القراءة من خلال الإجابة الواردة في ريك Strahl بلوق وجدت ما كنت بحاجة إليه هو بسيط جدا.تحتاج أولا إلى تحديد المسار النسبي (وهو بالنسبة لي كان الجزء السهل) ، وتمرير ذلك إلى وظيفة محددة أدناه:
VB.NET
Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
Return Result.ToString
End Function
C#
public static string GetFullyQualifiedURL(string s) {
Uri Result = new Uri(HttpContext.Current.Request.Url, s);
return Result.ToString();
}
نصائح أخرى
الجواب المقبول يفترض أن الطلب الحالي هو بالفعل في الملقم الظاهري/الجذر.جرب هذا:
Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
هناك بعض ممتازة مناقشة الأفكار على ريك Strahl بلوق
تحرير:وأود أن أضيف أن أفكار في العمل مع أو من دون صالح HttpContext.
EDIT2:هنا تعليق محدد / رمز على أنه بعد أن يجيب على السؤال
وجدت هذا الرمز هنا:
string appPath = null;
appPath = string.Format("{0}://{1}{2}{3}",
Request.Url.Scheme,
Request.Url.Host,
Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
Request.ApplicationPath);
هل حاولت AppSettings.RootUrl التي عادة ما تكون تكوينها في شبكة الإنترنت.config الملف ؟
تتحدث عن استخدام الروابط ؟
أنا أفعل هذا <a href='/'>goes to root</a>
سوف يأخذك إلى الملف الافتراضي ويب الجذر.
الآن من جانب العميل ، والقيام ، ويمر "~/" التحكم::ResolveUrl الطريقة سوف توفر لك ما تبحث عنه.(http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)
ليس لدي أي وسيلة للتحقق من هذا في هذه اللحظة لكن هل حاولت "طلب.Url.AbsoluteUri" من جهاز آخر ؟
يحدث لي ذلك بقدر جهازك تشعر انها المتصفح يطلب من المضيف المحلي.
أنا يمكن أن تكون خاطئة ولكن على الرغم اعتقد طلب نسبة إلى المتصفح وليس على خادم الويب.