خط أنابيب معالجة الطلبات المتكاملة لـ IIS - تعديل الطلب

StackOverflow https://stackoverflow.com/questions/60672

  •  09-06-2019
  •  | 
  •  

سؤال

أرغب في تطبيق عامل تصفية ISAPI مثل الميزة باستخدام HttpModule في IIS7 الذي يعمل ضمن وضع IIS Integrated Request Processing Pipeline.

الهدف هو إلقاء نظرة على الطلب الوارد على مستوى خادم الويب، وإدخال بعض رؤوس HttpHeaders المخصصة في الطلب. (for ex: HTTP\_EAUTH\_ID)

وفي وقت لاحق من دورة حياة صفحة ASPX، يجب أن أكون قادرًا على استخدام هذا المتغير كـ

string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();

لذا، عند تنفيذ هذه الوحدة على مستوى خادم الويب، هل من الممكن تغيير مجموعة ServerVariables ؟؟

هل كانت مفيدة؟

المحلول

HttpRequest.ServerVariables الخاصية عبارة عن مجموعة للقراءة فقط.لذلك، لا يمكنك تعديل ذلك مباشرة.أود أن أقترح تخزين بياناتك المخصصة في httpcontext (أو كائن التطبيق العام أو قاعدة البيانات الخاصة بك) من httpmodule الخاص بك ثم قراءة تلك القيمة المشتركة في صفحة aspx.

إذا كنت لا تزال ترغب في تعديل متغيرات الخادم، فهناك تقنية اختراق مذكورة في هذا خيط باستخدام الانعكاس.

نصائح أخرى

أعتقد أن قائمة متغيرات الخادم تحتوي فقط على الرؤوس المرسلة من المتصفح إلى الخادم.

لن تتمكن من تعديل أي من HttpRequest.Headers أو ال HttpRequest.ServerVariables مجموعة.ومع ذلك، ستتمكن من نقل معلوماتك إلى أي من:

HttpContext.Current.Items
HttpContext.Current.Response.Headers

للأسف، Request.Params, Request.QueryString, Request.Cookies, Request.Form (وتقريبًا أي مكان آخر قد تفكر في حشوه يكون للقراءة فقط.

أنصح بشدة بعدم استخدام الانعكاس إذا كان هذا هو HttpModule الذي تخطط لتثبيته في IIS 7.نظرًا لأنه سيتم استدعاء هذا الرمز (من المحتمل) لكل طلب يمر عبر خادم الويب، فيجب أن يكون سريعًا جدًا ولن يؤدي التفكير إلى قطعه (إلا إذا كان لديك عدد قليل جدًا من المستخدمين).

حظ سعيد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top