سؤال

ما هو الفرق بين customErrors و httpErrors أقسام من ملف web.config في تطبيقات ASP.NET MVC؟

ما هي الإرشادات لاستخدام كل قسم؟

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

المحلول

إخلاء المسئولية: هذا من تجربتي وليس حقيقة مثبتة.

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

customErrors هي عنصر قديم (متوافق مع الوراء) ، يستخدمه خادم تطوير Visual Studio (ويعرف أيضًا باسم VSDS أو Cassini).

httpErrors هي العنصر الجديد الذي يستخدمه IIS7 فقط.

هذا يسلط الضوء على ممكن مشكلة عند تطوير مواقع الويب ASP.NET أثناء استخدام VSDs بدلاً من IIS المحلي.

ايضا، الرجوع إلى هذا المنشور بنفسي حول كيفية التعامل مع رسائل الخطأ مع IIS7 ، إذا كنت ترغب في التحكم الكامل في إخراج الخطأ.

ملخص:

  • النمو في VSDS - استعمال customErrors
  • نشر الموقع إلى IIS6 - استعمال customErrors
  • نشر الموقع إلى IIS7 - استعمال httpErrors.

وإذا تطورت مع VSDS ولكن نشر ل IIS7, ، ثم أعتقد أنك ستحتاج إلى كليهما.

نصائح أخرى

*تم تحديثه أبريل 2016

يتم استخدام سمة CustomErrors عند إلقاء رمز .NET على استثناء (404 ، 403 ، 500 إلخ) ويتم استخدام سمة httperrors عندما يرمي IIS نفسه استثناء.

  • /myfakeextensionsurl -> httperrors 404
  • /myfakeaspsx.aspx -> customerrors 404
  • /myfakeimage.jpg -> httperrors 404
  • /throw500.apx -> Customerrors 500
  • /throw500 -> Customerrors 500

هناك الكثير من المزالق التي تحاول تكوين هذا بشكل صحيح. لذلك إذا كنت تبحث عن مثال سريع ، فإن أفضل خيارين لديك هو:

مثال 1: استخدام صفحات HTML

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.html" />
    <error statusCode="404" redirect="/Error404.html" />
    <error statusCode="500" redirect="/Error500.html" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="File" path="Error403.html" />
    <error statusCode="404" responseMode="File" path="Error404.html" />
    <error statusCode="500" responseMode="File" path="Error500.html" />
  </httpErrors>
</system.webServer>

مثال 2: استخدام صفحات ASPX

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.aspx" />
    <error statusCode="404" redirect="/Error404.aspx" />
    <error statusCode="500" redirect="/Error500.aspx" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
    <error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
    <error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
  </httpErrors>
</system.webServer>

وفي صفحات خطأ ASPX ، تحتاج إلى القيام بشيء كهذا (مثال 404 صفحة):

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

ملاحظة: استخدام UNATER LESS في قسم Customerrors هو غير ممكن!. (بدون اختراقات)

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

خلفية

سوف صفحة خطأ مخصصة جيدة:

  1. أظهر الاستثناء الحقيقي عند زيارة صفحة المشكلة محليًا
  2. اعرض صفحة مخصصة عند زيارة صفحة المشكلة عن بُعد
  3. لن يتم إعادة التوجيه ، ولكن ببساطة إظهار محتوى صفحة الخطأ (لأسباب كبار المسئولين الاقتصاديين)
  4. سيعرض رمز الحالة الصحيح

لتوضيح بعض الخيارات في تكويننا:

  1. <customErrors mode="RemoteOnly". يمكنك تحديد هنا: On, Off, RemoteOnly.

    • On = دائما إظهار صفحات خطأ مخصصة
    • Off = دائما إظهار الخطأ الحقيقي
    • RemoteOnly = إظهار الخطأ محليًا ، ولكن أظهر صفحة الخطأ المخصصة عن بُعد. لذلك نريد RemoteOnly للبيان 1
  2. <customErrors redirectMode="ResponseRewrite". يمكنك تحديد هنا: ResponseRedirect أو ResponseRewrite. ال ResponseRedirect سيقوم الوضع بإعادة توجيه صفحة الخطأ إلى صفحة الخطأ المخصصة. بالنسبة إلى زاحف الارتباط (SEO) ، سيؤدي هذا إلى 302 -> 500 ، لكنك تريد أن يحصل زاحف الارتباط على 500 خطأ.

  3. <httpErrors errorMode="DetailedLocalOnly". هذا ما يعادل customErrors الوضع. الخيارات التي لديك: Custom, Detailed, DetailedLocalOnly.

منشور مدونة جيد ساعدني كثيرًا هو: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

<customErrors> مقابل <httpErrors>


<customErrors>

  • لا تزال متوفرة في IIS7+
  • حدد صفحات الخطأ المخصصة للطلبات التي تعالجها ASP.NET
  • يعالج الطلبات فقط ضمن تطبيق ASP.NET
  • لا يتم التعامل مع الملفات الثابتة مثل ملفات HTML أو عناوين URL ("الودية")

<httpErrors>

  • تم تقديمه في IIS7
  • حدد صفحات الخطأ المخصصة للطلبات التي تعالجها IIS
  • يعالج الطلبات ضمن تطبيق ASP.NET و/أو يتعامل مع الطلبات خارج تطبيق - ASP.NET *
  • يتم التعامل مع جميع الملفات وعنوان URL *

ملاحظة: لم يعد من الضروري الاستخدام customErrors

مصدر مقتبس: 404 مخصص وصفحات الخطأ في ASP.NET (مقالة ممتازة)


ExecuteURL يقدم المحتوى الديناميكي مثل صفحة .aspx ( path يجب أن تكون القيمة خادم عنوان URL النسبي):

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
    <remove statusCode="404"/>
    <error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
  </httpErrors>
</system.webServer>

File يخدم ملف خطأ مخصص ، مثل صفحة .html:

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>

المرجعي: أخطاء HTTP (www.iis.net)

لمزيد من التفاصيل ، اقرأ رابط www.iis.net أعلاه

قسم الأخطاء في تكوين الويب هو لتوفير نهج معالجة أخطاء HTTP مخصصة ، هناك قسمان ، واحد مخصص داخل نظام القسم. web و httperrors آخر داخل نظام القسم.

CustomErrors:كان هذا القسم قيد الاستخدام قبل تقديم IIS 7 ، IIS 6 5 وقبل استخدام هذا القسم بالكامل للتعامل مع أخطاء HTTP المخصصة وفقًا لرمز حالة HTTP.

httperrors:IIS 7 وبعد ذلك استخدم هذا القسم أيضًا CustomErrors قسم للتعامل مع أخطاء HTTP المخصصة بناءً على ملحقات الملفات الخاصة بهم إذا تم طلب سجل تمديد الصفحة مع ISAPI DLL (.aspx ، ASHX ، .ASMX ، .SVC وما إلى ذلك) مثل INDEX.aspx ثم IIS التقاط customeerrors قسم آخر يلتقط الإعداد من httperrors (يجب تعيين الوضع المستضاف IIS 7 على أنه مزاج متكامل وليس كلاسيكي)

فيما يلي الأمثلة التي تصل إلى 404 رابط فحص معالجة الأخطاء:

httperrors vs customerrors في WebConfig ، IIS ، ASP.NET

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