Tengo un método de una clase (DPCal_EventMove) al que quiero limitar el acceso mediante Roles. Tengo un controlador de errores Global.asax.cs y un manejador de errores IHttpModule personalizado para capturar las excepciones no controladas y el Servidor. Transferirlos a GlobalExceptionHandler.aspx, que verifica si los errores son SecurityExceptions que se originaron de comprobaciones de PrincipalPermission fallidas. Por alguna razón, la excepción no controlada causada por el método decorado por PricipalPermission no se enruta a través de ninguno de mis controladores de errores. Mi pregunta es: ¿a dónde se dirige esta excepción y cómo la atrapo y manejo?Excepción no controlada no detectada por el controlador de error Global.asax o el controlador de error personalizado IHttpModule
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();
}
}
}
A continuación es mi archivo Global.asax.cs:
public class Global : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + Request.Path);
}
}
A continuación es mi costumbre manejador IHttpModule: no se alcanza nunca
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);
}
}
Load en GlobalExceptionHandler.aspx.
Creo que este enlace puede tener buena información para usted: http://stackoverflow.com/questions/2192093/wcf-principalpermission-attribute-exception-loggin –
Si está teniendo un error durante una devolución de llamada de página a través de un WebMethod , tendrá que manejar el error adecuadamente en el lado del cliente. ¿Podría publicar una versión (simplificada) de su código cuando (1) llame a 'DPCal_EventMove' y (2) a la definición de' DPCal_EventMove'? –