Пользовательский обработчик ошибок Application_Error в Global.asax - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу обнаруживать и перенаправлять пользовательские ошибки из Global.asax.Возвращает 200 нормально или ноль.Я не уверен, как я могу обнаружить и перенаправить на ошибки автоматически.Надеюсь, у вас, ребята, есть идея.

В Web.Config

<system.web>
    <customErrors mode="On" />
</system.web>
<system.webServer>
    <httpErrors existingResponse="PassThrough"/>
</system.webServer>

В Global.asax

protected void Application_Error(object sender, EventArgs e)
{
    Response.TrySkipIisCustomErrors = true;

                Exception ex = Server.GetLastError();

                if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 200)
                {
                    errormessage = ex.Message;
                    Response.RedirectToRoute("error");
                }
                else if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 400)
                {
                    errormessage = ex.Message;
                   Response.RedirectToRoute("error");
                }
                else if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
                {
                    errormessage = ex.Message;
                    Response.RedirectToRoute("error");
                }
                else if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 500)
                {
                    errormessage = ex.Message;
                    Response.RedirectToRoute("error");
                }
                else
                {
                    errormessage = ex.Message;
                    Response.RedirectToRoute("error");
                }
    Server.ClearError();
}

1 Ответ

0 голосов
/ 13 ноября 2018

Ну

Я нашел временное решение для моей проблемы. Это не самое лучшее, но оно может вам понадобиться.

В Web.Config

<system.web>
    <customErrors mode="On" /> // On or Off doesn't matter ISS 7 or newer version
</system.web>
<system.webServer>
    <httpErrors existingResponse="Auto">
     <clear/>
     <error statusCode="404" path="/notfound.aspx" responseMode="ExecuteURL" />
     </httpErrors>
</system.webServer>

В Global.asax

HttpException httpexception = Server.GetLastError().GetBaseException() as HttpException;
string ex_message = httpexception.InnerException;
// send or save errors here
Server.ClearError();
Response.Redirect("error");  

Примечание: Я не обработал ошибку 404 из codebehind, web.configuration помогает об этом.

...