我们在我们的网站(.net4,IIS 7.5,VS 2010,所有漂亮的库存东西)中实现了自定义ASP.NET角色提供程序。我的问题是当用户被拒绝访问页面时如何处理或拦截角色提供者重定向?
让我说清楚。角色提供程序正常工作。我们在我们网站的各个子目录中创建了web.config文件,这些子目录为访问添加了适当的元素/属性。所以,假设我尝试访问我没有角色的子目录中的页面...现在,角色提供程序将我重定向到我们的登录页面(可能是我们的成员资格提供程序的web.config值。孔)。
但是,我想要做的是将用户重定向到我们选择的自定义“拒绝访问”页面,而不是登录页面。
基于许多谷歌搜索,我尝试了一些根本无效的东西。
例如,有人建议将自定义Application_Error方法添加到global.asax文件中。试过,它从未被击中。
还尝试添加到web.config中的customErrors部分:
<error statusCode="401" redirect="AccessDenied.aspx" />
再次,这从未奏效。
我投入的调试断点越来越多,我能说的最好的是角色提供者在生命周期中比我能捕获的更早,并自动重定向到我们的登录页面。
对于如何拦截这一点的任何想法都将非常感激。
感谢。
答案 0 :(得分:1)
当用户由于数据库中的某些内容而无法访问时,它会重定向到表单配置元素中指定的loginUrl:
<forms loginUrl="login.aspx" />
我想到的唯一项目是,如果您在登录页面,this.User.Identity.IsAuthenticated
属性为true,则用户到达那里是因为他们被重定向到其中一个问题。那么您可以重定向到AccessDenied.aspx页面。如果经过身份验证的用户被重定向到仅登录以拒绝,则此方法可行。否则,如果你需要将它们发送到各种各样的地方,我唯一能想到的是转储内置的重定向功能,在global.asax中,添加Application_AcquireRequestState
处理程序或在其他一些地方(取决于如果您需要访问会话,请检查用户的权限,并相应地重定向(通过HttpContext.Current.Response.Redirect
)。