عدم الحصول على إعادة توجيه إلى صفحة الخطأ المخصصة باستخدام أخطاء مخصصة - ASP.NET

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

سؤال

إليك Application_Onerror Event Sink في Global.asax.vb:

    Sub Application_OnError(ByVal sender As Object, ByVal e As EventArgs)

    Dim innerMostException As Exception = getInnerMostException(Me.Context.Error)

    If TypeOf innerMostException Is AccessDeniedException Then

        Security.LogAccessDeniedOccurrence(DirectCast(innerMostException, AccessDeniedException))

        Dim fourOhThree As Integer = DirectCast(HttpStatusCode.Forbidden, Integer)

        Throw New HttpException(fourOhThree, innerMostException.Message, innerMostException)

    End If

End Sub

سترى أنه إذا حصلنا على استثناء الأعمق من Type AccessDeniEdException ، فإننا نرمي httpexcpetion جديد مع رمز الحالة 403 الملقب "المحظور"

إليك إدخال Web.Config ذات الصلة:

    <customErrors defaultRedirect="~/Application/ServerError.aspx" mode="On">
      <error statusCode="403" redirect="~/Secure/AccessDenied.aspx" />
    </customErrors>    

إذن ما نتوقعه هو إعادة توجيه إلى صفحة AccessDenied.aspx. ما كنا احصل على هو إعادة توجيه إلى صفحة servererror.aspx.

لقد جربنا هذا أيضًا:

    Sub Application_OnError(ByVal sender As Object, ByVal e As EventArgs)

    Dim innerMostException As Exception = getInnerMostException(Me.Context.Error)

    If TypeOf innerMostException Is AccessDeniedException Then

        Security.LogAccessDeniedOccurrence(DirectCast(innerMostException, AccessDeniedException))

        Context.Response.StatusCode = DirectCast(HttpStatusCode.Forbidden, Integer)

    End If

End Sub

وهو ما لا ينجح بشكل غير مستورق أيضًا.

أي أفكار ما نفعله خطأ؟

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

المحلول

Application_Error يهدف إلى التقاط أخطاء لا يتم التعامل معها بواسطة تطبيقك. عندما يطلق النار ، حدث خطأ بالفعل وكل شيء يدور حول هذا الخطأ. إذا رميت خطأ من الداخل Application_Error أنت تقول بالفعل "هناك خطأ في معالج الأخطاء". بدلا من ذلك فقط Server.Transfer إلى الصفحة المناسبة. إذا كنت ترغب في الاحتفاظ بجميع منطق إعادة توجيهك في الويب. هذه المقالة حول كيفية تحليل قسم Customerrors لمعرفة مكان إعادة التوجيه إلى.

قيل كل هذا ، ولم أحاول هذا ، لكن هل يمكنك محاولة الاتصال Server.ClearError():

            Dim Ex = Server.GetLastError()
            Server.ClearError()
            Throw New HttpException(System.Net.HttpStatusCode.Forbidden, Nothing, Ex)

لا أعتقد أنه سيعمل بسبب ما قلته أعلاه ولكنه يستحق المحاولة.

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