ما هو الصندوق ما يعادل HttpContext.الحالي.طلب.RawUrl?
-
22-07-2019 - |
سؤال
لدي بعض راحة الخدمات التي تعمل في محض WCF السياق (أيASP.NET التوافق غير ممكن ، وبالتالي لا يوجد HttpContext.Current
كائن المتاحة).
عناوين url إلى خدمات إعادة كتابة في بداية الطلب باستخدام IHttpModule
(وهو في هذه المرحلة لا يكون لها HttpContext
و يعيد كتابة باستخدام HttpContext.Current.RewritePath
) للتخلص من الأشياء مثل .svc
تمديد من URL.
ومع ذلك ، لا تحتاج إلى الوصول إلى URL الأصلي التي طلبت من داخل WCF البنية التحتية.هل هناك ما يعادل HttpContext.Current.Request.RawUrl
على OperationContext
أو WebOperationContext
دروس في أي مكان ؟ باستخدام WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri
إرجاع إعادة كتابة URL ليست أصلية واحدة.
المحلول
ويمكنك الحصول على نقطة النهاية استهدف حاليا وأوري لذلك عن طريق القيام:
OperationContext.Current.RequestContext.RequestMessage.Headers.To
والتي أعتقد أن الشيء نفسه على النحو التالي:
OperationContext.Current.IncomingMessageHeaders.To
وهذا هو كائن System.Uri
، وأعتقد أنك يمكن أن مجرد الحصول على OriginalString
أو PathAndQuery
، أو أيا كان الأجزاء التي تريد من ذلك.
نصائح أخرى
ومحاولة شيء من هذا القبيل:
OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri
لقد وجدت أن استخدام
OperationContext.Current.RequestContext.RequestMessage.Headers.To
يعمل معظم من مرة, ولكن لم يكن طلبي.فمن وراء NLB (شبكة موازن التحميل) الذي يؤدي إلى فقدان الأصلي إدخال اسم المضيف. ولكن المدخلات المضيف لا يزال في رأس يدعى "المضيف" ، التي كان من المستغرب من الصعب الحصول على.ويقع في:
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]
(رأس الكائنات في النظام.ServiceModel.OperationContext.الحالي.IncomingMessageHeaders لا يكون حقا كل رؤوس من العميل)