2011-03-11 3 views
1

J'ai une application qui utilise sa propre autorisation pour déterminer si un utilisateur a accès aux pages. Je souhaite afficher une page "Accès refusé" plus convivial dans le cas où l'accès est refusé. Dans le MasterPage ...Erreur de classe UnauthorizedAccessException()

 if (!authorize) 
     { 
      throw new UnauthorizedAccessException(); //error occurs here, looks like I'm not allowed to use this class 
     } 

Dans le web.config

<customErrors mode="Off" defaultRedirect="~/ErrorPages/ErrorPage.aspx"> 
    <error statusCode="403" redirect="AccessDeniedPage.aspx" /> 
</customErrors>I get the error below. 

Il semble que je reçois l'erreur comme un résultat de juste essayer d'instancier/utiliser la classe UnauthorizedAccessException(). Je voudrais le faire de cette façon, est-il un moyen d'utiliser cela?

/************************************************************************************************************************** 
Attempted to perform an unauthorized operation. 

Exception Details: System.UnauthorizedAccessException: Attempted to perform an unauthorized operation. 

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. 
*************************************************************************************************************************/ 

Répondre

0

Eh bien, vous sont jeter un UnauthorizedAccessException. S'il n'y a pas try-catch qui l'attrape, le code va planter là. Je pense que l'exception que vous voyez est votre exception.

2

Comme le dit Fredrik, vous jetez une erreur, vous obtenez une erreur. Si vous voulez simplement instancier l'exception, n'utilisez pas throw.

UnauthorizedAccessException uae = new UnauthorizedAccessException ("un certain message");

Mais encore une fois, cela crée juste une exception; Dès que vous le lancerez, vous recevrez le message que vous recevez déjà.

Pourquoi ne pas simplement rediriger? Response.Redirect ("~/AccessDeniedPage.aspx", Faux);

Si vous voulez vraiment utiliser l'exception, vous pourriez continuer à jeter l'exception que vous êtes, mais aussi gérer l'exception en cas Application_Error du fichier Global.asax. Dans l'événement Application_Error, testez si l'exception est une exception UnauthorizedAccessException et, si tel est le cas, redirigez l'utilisateur vers AccessDeniedPage.aspx. Utilisation de base d'Application_Error: MSDN

Questions connexes