代码之家  ›  专栏  ›  技术社区  ›  Andrey

中的位置访问ASP.NET

  •  1
  • Andrey  · 技术社区  · 15 年前

    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>
    

    它“有点”的工作-它重定向到登录页面,如果你不是在角色“管理员”。但我不想这样,我想显示一个错误页。我能控制这种行为吗?

    谢谢您, 安德烈

    1 回复  |  直到 15 年前
        1
  •  1
  •   kbrimington    15 年前

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

    考虑用自定义错误页url替换配置中的实际登录url。

    这个web.config文件如果将此作为贯穿整个虚拟目录的通用解决方案来实现,则该方法是可行的。(正在尝试在 <location> 元素web.config文件将导致配置错误。)

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

    protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e);
    
        if (!User.IsInRole("admin"))
        {
            Response.Redirect("~/ErrorPage.aspx?reason=denied");
        }
    }
    

    您还可以考虑创建一个 HttpModule ,或点击你的全球.asax,以更通用的方式处理授权,而不依赖于页继承。看到了吗 http://msdn.microsoft.com/en-us/library/ms227673.aspx BeginRequest 事件来检查URL路径,如果它与您的模式匹配,则传递要传递的错误或重定向。

    推荐文章