使用 Global.asax asp.net 的自定义错误

本文关键字:自定义 错误 net asp Global asax 使用 | 更新日期: 2023-09-27 18:35:43

我犯了一个错误;如果网站内的任何应用程序出现错误,该页面会引导用户。我做了Global.asax而不是使用Webconfig。我的问题是:如果出现错误,是否可以从Global.asax重定向用户以获取这些状态代码"401"、"404"和"500",而不是使用 Webconfig?

换句话说,使用Global.aspx而不是Webconfig!?我只是好奇地想知道。

谢谢

使用 Global.asax asp.net 的自定义错误

    protected void Application_Error(Object sender, EventArgs e)
    {
         Exception ex = this.Server.GetLastError();
         if(ex is HttpException)
         {
              HttpException httpEx = (HttpException)ex;
              if(httpEx.GetHttpCode() == 401)
              {
                   Response.Redirect("YourPage.aspx");
              }
         }
    }

是的,这是可能的。下面是一些代码示例。这应该在Global.asax.cs中添加。

如果 Global.asax Web.config 文件中没有Application_Error处理程序,则切勿在 Web.config 文件中将customErrors设置为 Off。有关您网站的潜在危害信息可能会暴露给可能导致您的网站上发生错误的任何人。

void Application_Error(object sender, EventArgs e)
{
  // Code that runs when an unhandled error occurs
  // Get the exception object.
  Exception exc = Server.GetLastError();
  // Handle HTTP errors
  if (exc.GetType() == typeof(HttpException))
  {
    // The Complete Error Handling Example generates
    // some errors using URLs with "NoCatch" in them;
    // ignore these here to simulate what would happen
    // if a global.asax handler were not implemented.
      if (exc.Message.Contains("NoCatch") || exc.Message.Contains("maxUrlLength"))
      return;
    //Redirect HTTP errors to HttpError page
    Server.Transfer("HttpErrorPage.aspx");
  }
  // For other kinds of errors give the user some information
  // but stay on the default page
  Response.Write("<h2>Global Page Error</h2>'n");
  Response.Write(
      "<p>" + exc.Message + "</p>'n");
  Response.Write("Return to the <a href='Default.aspx'>" +
      "Default Page</a>'n");
  // Log the exception and notify system operators
  ExceptionUtility.LogException(exc, "DefaultPage");
  ExceptionUtility.NotifySystemOps(exc);
  // Clear the error from the server
  Server.ClearError();
}

也一次可以得到错误代码,如

exc.GetHttpCode() == 403 so that 
if (exc!= null && httpEx.GetHttpCode() == 403)
    {
        Response.Redirect("/youraccount/error/forbidden", true);
    }
    else if (exc!= null && httpEx.GetHttpCode() == 404)
    {
        Response.Redirect("/youraccount/error/notfound", true);
    }
    else
    {
        Response.Redirect("/youraccount/error/application", true);
    }

另请参阅Custom error in global.asax