Ho un metodo di una classe (DPCal_EventMove) che voglio limitare l'accesso all'utilizzo di ruoli. Ho sia un gestore di errori Global.asax.cs sia un gestore di errori IHttpModule personalizzato inteso a rilevare eccezioni non gestite e Server.Transferli a GlobalExceptionHandler.aspx, che verifica se gli errori sono SecurityException originati da verifiche PrincipalPermission non riuscite. Per qualche motivo, l'eccezione non gestita causata dal metodo decorato da PricipalPermission non viene instradata da nessuno dei miei gestori di errori. La mia domanda è: dove viene indirizzata questa eccezione e come la prendo e la gestisco?Eccezione non gestita non rilevata dal gestore errori Global.asax o dal gestore errori IHttpModule personalizzato
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();
}
}
}
Qui di seguito è il mio file di Global.asax.cs:
public class Global : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
Server.Transfer("~/GlobalExceptionHandler.aspx?ReturnUrl=" + Request.Path);
}
}
Qui di seguito è il mio personalizzato gestore 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 su GlobalExceptionHandler.aspx non viene mai raggiunto.
Penso che questo collegamento possa avere alcune buone informazioni per voi: http://stackoverflow.com/questions/2192093/wcf-principalpermission-attribute-exception-loggin –
Se si verifica un errore durante una richiamata della pagina tramite un WebMethod , dovrai gestire l'errore in modo appropriato sul lato client. Potresti postare una versione (semplificata) del tuo codice quando (1) chiamando 'DPCal_EventMove' e (2) la definizione di' DPCal_EventMove'? –