أضف معالج أخطاء مخصصًا في بداية قسم الوحدات النمطية في web.config (وليس يدويًا)

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/37736

سؤال

هل هناك طريقة لوضع معالج الأخطاء HTTPModule في بداية قسم الوحدات في web.config دون القيام بذلك يدويًا؟

لقد جربت أسلوب web.config الإضافي مثل هذا:

  <add path="configuration/system.webServer/modules" id="{125A654F-9220-42F0-A97A-1746252468DE}">
    <add name="CustomErrorHandler" type="com.handlers.CustomErrorHandler, Assemblyname, Version=4.5.6.7, Culture=neutral, PublicKeyToken=3450345789" />
  </add>

المشكلة هي أنه يجب وضع معالج الأخطاء المخصص قبل المعالج القياسي.إذا لم تقم بذلك، فسيقوم Sharepoint بمعالجة الاستثناء نفسه وتقديم صفحة الاستثناء القياسية.

مُتوقع:

 <modules runAllManagedModulesForAllRequests="true">
  <add name="CustomErrorHandler" type="com.handlers.CustomErrorHandler, Assemblyname, Version=4.5.6.7, Culture=neutral, PublicKeyToken=3450345789" />
  <remove name="FileAuthorization" />
  <remove name="Profile" />
  <remove name="WebDAVModule" />
  <remove name="Session" />
  <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="SharePoint14Module" preCondition="integratedMode" />
  <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="RSRedirectModule" type="Microsoft.ReportingServices.SharePoint.Soap.RSRedirectModule, RSSharePointSoapProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
</modules>

النتيجة بالنهج التكميلي:

<modules runAllManagedModulesForAllRequests="true">
  <remove name="FileAuthorization" />
  <remove name="Profile" />
  <remove name="WebDAVModule" />
  <remove name="Session" />
  <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="SharePoint14Module" preCondition="integratedMode" />
  <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="RSRedirectModule" type="Microsoft.ReportingServices.SharePoint.Soap.RSRedirectModule, RSSharePointSoapProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="CustomErrorHandler" type="com.handlers.CustomErrorHandler, Assemblyname, Version=4.5.6.7, Culture=neutral, PublicKeyToken=3450345789" />
</modules>

كما يقول هذا الموضوع (confiremd بواسطة MS Developer) لا توجد طريقة للتحكم في ترتيب العقد عند العمل مع SPWebConfigModification:

http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/154a09de-d9fc-4622-a397-589a3c1a87e5/

إن إضافة إدخال web.config يدويًا ليس خيارًا.

هل حقا لا توجد طريقة أخرى؟

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

المحلول 2

أخيرا انتهى بي الأمر بنهج مختلف لصفحات الخطأ المخصصة.

لأنه ليس من الممكن التحكم في ترتيب العناصر في Web.config برمجيا (والذي تمتص كثيرا!) والتحرير يدويا ليس خيارا، لقد تخليت من النهج باستخدام httpmodule وتلاعب web.config.

بدلا من ذلك، كتبت تطبيق ميزة تطبيق تطبيقات على الويب مثل الموصوف هنا: http://todd-carter.com /Postost/0/04/07/an-expected-error-has-occurred.aspx لتعيين صفحة خطأ مخصصة للتطبيق (الذي يتعامل مع الاستثناءات). تحتوي صفحة الخطأ المخصصة على عنصر تحكم يجعل رسالة مخصصة للمستخدم وتسجيل الاستثناء.

بالإضافة إلى ذلك أضف ملف مخصص 404.html إلى الحل في المجلد المخططات \ 1033 المعين وسجل في هذا الملف للتطبيق في نفس جهاز استقبال الميزة (انظر التعليمات البرمجية أدناه). يقوم 404.HTML بإعادة توجيه ملف .aspx. يحتوي ASPX على عنصر تحكم يجعل المحتوى الدولي. يمكنك أيضا تعيين HTML ثابتا ل 404 أخطاء. سبب إعادة التوجيه كان التدويل.

جزء إضافي واحد مع ملف .html ومتصفحات غير IE بالنسبة لي بالنسبة لي المشكلة الموضحة هنا (لأنني نسخت SP 404.html لنقطة انطلاق):

http://andreasglaser.net/post/2009/03/15/sharepoint-and-custom-404-page-not-found-and-utf-8-issue-with-firefox. ASPX

رمز يذهب هنا: giveacodicetagpre.

نصائح أخرى

إذا لم يعمل كما هو متوقع فإنني أنصحك باستخدامه Xpath مع SPWebModifications لتحديد النظام.

تحديث

لقد قمت للتو باختبار الحل الخاص بي مع حل XPath وهو لا يعمل كما هو متوقع.يبدو أن هناك مستحيل للتحكم في ترتيب الإدخالات.شكرا لكل لمدخلاته!

تحديث 2

هل يمكنك من فضلك محاولة استخدام HttpApplication بدلاً من HttpContext لأن HttpApplication يحدد الأساليب والخصائص والأحداث المشتركة بين كافة كائنات التطبيق داخل تطبيق ASP.NET. شاهد المزيد

الاستخدام

 HttpContext context = ((HttpApplication)sender).Context;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top