0

J'utilise WebForms et le routage Asp.Net.Après avoir lancé une exception de sécurité, rediriger vers la page de connexion

Lorsque vous essayez de mettre en œuvre la sécurité sur un dossier des membres, je suis en suivant les instructions ici:

http://blogs.msdn.com/b/mikeormond/archive/2008/06/21/asp-net-routing-and-authorization.aspx

private IHttpHandler GeneratePage(string VN, RequestContext RC) 
    { 
    string virtualPath 
     = string.Format("~/Members/{0}.aspx", VN); 

    if (UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, 
     RC.HttpContext.User, 
     RC.HttpContext.Request.HttpMethod)) 
    { 
     if (virtualPath != null) 
     { 
     return (Page)BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)); 
     } 
    } 
    else 
    { 
     throw new SecurityException(); 
    } 

    return null; 
    } 
} 

Cependant, je ne veux juste jeter une exception de sécurité, je aime rediriger vers la page de connexion. Je préfère ne pas coder un Response.Redirect et je ne pense pas que ce soit la bonne façon de le faire de toute façon.

Quelle est la "bonne" façon de transmettre le contrôle au moteur d'autorisation et de rediriger vers la page de connexion par défaut?

Répondre

1

Vous ne pouvez pas avoir les deux. La propagation d'une exception met fin au chemin du code.

Vous pouvez également appeler FormsAuthentication.RedirectToLoginPage(string extraQueryString) et passer un argument qui vous permet d'informer l'utilisateur du problème sur la page de connexion.

par exemple.

FormsAuthentication.RedirectToLoginPage("error=authorization-failure")

Vous, bien sûr, besoin d'écrire du code dans la page de connexion pour le reconnaître.

+0

Merci. Je me demandais pourquoi vous vouliez juste lancer une erreur de sécurité dans cet espace, mais je supposais que vous feriez la redirection dans un bloc 'catch'. – Armstrongest

+0

@ Atømix - tout dépend de qui fait la capture. vous avez dit que vous vouliez lancer et rediriger. la seule façon de le faire est si vous faites le catching et si c'est le cas, ce n'est pas une exception, c'est un cas attendu et devrait avoir un chemin de code approprié. Vous lanceriez une exception s'il n'y a rien que vous puissiez faire à propos de l'état. –

Questions connexes