ASP.NET中的位置访问

时间:2010-08-25 18:18:31

标签: asp.net web-config forms-authentication role

我有我的网站的管理区域:http://www.mysite.com/webadmin我希望通过角色保护它(我使用的是ASP.NET表单身份验证),这样只有角色为“admin”的用户才能访问它。 在web.config中我添加了这个条目:

<location path="WebAdmin">
    <system.web>
        <authorization>
            <deny users="*"/>
            <allow roles="admin"/>
        </authorization>
    </system.web>
</location>

并且它“有点”工作 - 如果你不是“admin”角色,它会将你重定向到登录页面。但我不希望这样,我想显示一个错误页面。我能以任何方式控制这种行为吗?

谢谢你, 安德烈

1 个答案:

答案 0 :(得分:1)

您可以通过web.config更改文件认为是登录页面的URL。 (见http://www.15seconds.com/issue/020220.htm。)

考虑将自定义错误页面网址替换为配置中的真实登录网址。

修改

如果将整个虚拟目录作为一般解决方案实现,那么web.config方法是可行的。 (尝试在web.config中的<location>元素下配置自定义loginUrl将导致配置错误。)

通过在管理页面(或管理页面的基类)中注入此类代码,您可以对此行为进行更细粒度的控制:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    if (!User.IsInRole("admin"))
    {
        Response.Redirect("~/ErrorPage.aspx?reason=denied");
    }
}

您还可以考虑创建HttpModule或者使用Global.asax,以更一般的方式处理授权,而不依赖于页面继承。见http://msdn.microsoft.com/en-us/library/ms227673.aspx。使用BeginRequest事件检查URL路径,如果它与您的模式匹配,则传递您要传递的错误或重定向。