مشكلة في استخدام HTTPhandler مخصص لمعالجة الطلبات لكل من صفحات .aspx وغير التردد في IIS7

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

سؤال

أحاول معالجة طلبات الصفحة ".aspx" وغير ملحق (أي كلا contact.aspx و /) باستخدام httphandler مخصص في IIS7. يعمل معالجتي بشكل جيد فقط في حالة واحدة أو أخرى، ولكن بمجرد محاولة معالجة كلتا الحالتين، فإنه يعمل فقط من أجل واحد. يرجى الاطلاع على مقتطف المعالجات من Web.config أدناه:

إذا احتفظت بالتعيين فقط إلى "* .aspx"، تتم معالجة جميع طلبات .aspx بشكل صحيح، ولكن من الواضح أن الطلبات غير المدوية لن تعمل:

<add name="AllPages.ASPX" path="*.aspx" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

إذا قمت بتغيير رسم الخرائط إلى "*"، تتم معالجة جميع الطلبات غير المرغوبة بشكل صحيح، ولكن طلبات ".aspx" التي يجب أن تتعامل معها بواسطة هذا المعالج توقف عن العمل. لاحظ أنني أضفت إدخال StaticFiles من أجل معالجة الملفات الموجودة على القرص مثل الصور، CSS، JS، إلخ.

<add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" />
<add name="StaticFiles" verb="GET,HEAD" path="*.*" type="System.Web.StaticFileHandler" resourceType="File" />
<add name="AllPages" path="*" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

الشيء المجنون هو أنه عند تحميل طلب ".aspx" (مع التكوين الثاني الموضح) IIS7 يعطي خطأ 404 غير موجود. يقول الخطأ أيضا أن الطلب يتم معالجته بواسطة معالج StaticFiles. لكنني تأكدت إضافة resourceEtype = "ملف" إلى staticfilehandler من أجل تجنب هذا. وفقا ل MS هذا يعني أن الطلب هو فقط ل "الملفات المادية على القرص". هل أنا أسيء قراءة / تفسير جزء "على القرص"؟

ملف .aspx الخاص بي ليس على القرص، ولهذا السبب أريد استخدام المعالج في المقام الأول.

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

المحلول

سوف يتسبب التكوين الثاني في التعامل مع .aspx StaticFileHandler لأن الملفات موجودة حتى تفي بمعايير المعالج. ومع ذلك، يتم تكوين المعالج عدم خدمة هذه الملفات وتنتج رسالة 404 بدلا من ذلك.

سيكون الحل الأفضل استخدام تطبيق HttpModule مثل URL إعادة كتابة الوحدة النمطية لإعادة كتابة المسارات الافتراضية إلى الصفحات أو المعالجات.

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