未处理的异常没有任何的Global.asax错误处理或自定义IHttpModule的错误处理程序捕获

2019-09-21 13:54发布

我有一个类(DPCal_EventMove),我要访问限制使用角色的一种方法。 我同时拥有Global.asax.cs中的错误处理程序,并打算异常和Server.Transfer的他们捕获未处理到GlobalExceptionHandler.aspx,检查,看看是否错误是源于失败的支票的PrincipalPermission一个SecurityExceptions定制IHttpModule的错误处理程序。 出于某种原因,造成PricipalPermission装饰方法未处理的异常没有通过任何我的错误处理程序的路由。 我的问题是:这哪里是例外,被路由到,如何捕捉和处理呢?

public partial class DayView : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Do some stuff
    }

    [PrincipalPermission(SecurityAction.Demand, Role = "Investigator")]
    [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
    protected void DPCal_EventMove(object sender, DayPilot.Web.Ui.Events.EventMoveEventArgs e)
    {
        // If no overlap, then save
        int eventId = Convert.ToInt32(e.Value);
        MembershipUser user = Membership.GetUser();
        if (!CommonFunctions.IsSchedulingConflict(eventId, e.NewStart, e.NewEnd) && 
            Page.User.HasEditPermission(user, eventId))
        {
            dbUpdateEvent(eventId, e.NewStart, e.NewEnd);
            GetEvents();
            DPCal.Update();
        }
    }
}

下面是我的Global.asax.cs文件:

public class Global : System.Web.HttpApplication
{
    protected void Application_Error(object sender, EventArgs e)
    {
        Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + Request.Path);
    }
}

下面是我的自定义IHttpModule的处理程序:

public class UnhandledExceptionModule : IHttpModule
{
    private HttpApplication _context;
    private bool _initialized = false;

    public void Init(HttpApplication context)
    {
        _context = context;
        _initialized = true;
        context.Error += new EventHandler(Application_Error);
    }

    public UnhandledExceptionModule()
    {
        _initialized = false;
    }

    public void Dispose()
    {
        if (_initialized)
            _context.Dispose();
    }

    public void Application_Error(object sender, EventArgs e)
    {
        if (_initialized)
            _context.Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + _context.Request.Path);
    }
}

的Page_Load上GlobalExceptionHandler.aspx从未达到。

Answer 1:

原来,这个问题是因为DPCal_EventMove方法作为页面回调执行造成的。 幸运的是,DayPilot日历组件有一个选项可以更改此行为。 有一次,我改变了DayPilot的EventMoveHandling属性:DayPilotCalendar控制“回传”,而不是“回调”,我是能够捕获和处理安全异常。



Answer 2:

你有没有尝试过:

public class Global : System.Web.HttpApplication
{
    protected void Application_Error(object sender, EventArgs e)
    {
        Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + Request.Path);
    }
}


Answer 3:

加:

private void Page_Error(object sender, System.EventArgs e)
{
        //errorcode
}

要在您的网页代码,看看这是一个错误时叫什么名字?



文章来源: Unhandled exception not caught by either Global.asax error handler or custom IHttpModule error handler