0

我正在使用WebForms和Asp.Net路由。抛出安全异常后,重定向到登录页面

当试图执行一个成员文件夹的安全,我按照这里的指示:

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; 
    } 
} 

不过,我不只是想抛出一个安全异常,我会喜欢重定向到登录页面。我宁愿不硬编码Response.Redirect,我不认为这是以任何方式做它的正确方法。

将控制权传递给授权引擎并重定向到默认登录页面的“正确”方式是什么?

回答

1

你不能同时拥有两者。

发出异常终止代码路径。

或者,您可以拨打 FormsAuthentication.RedirectToLoginPage(string extraQueryString)并传递一个arg,让您在登录页面上通知用户该问题。

例如

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

你会的,当然,需要在登录页面编写代码来认识到这一点。

+0

谢谢。我想知道为什么你只想在这个空间抛出一个安全错误,但我假设你会在'catch'块中做重定向。 – Armstrongest 2010-09-23 16:36:58

+0

@Atømix - 这一切都取决于谁在捕捉。你说你想扔和重定向。唯一可以做到这一点的方法是,如果您正在执行捕获,并且情况确实如此,那么它不是一个例外,它是预期的情况,应该有适当的代码路径。如果你对状态没有任何可以做的事情,你会抛出异常。 – 2010-09-23 18:25:41