3

我正在使用 ASP.NET,我希望能够将用户从 web 配置重定向到另一个页面。

我有许多限制,例如:

 <location path="Structures.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin"/>
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

如果我将用户重定向到某个页面,那就太好了。我看到了 这篇文章,但这不是我想要的。

我需要在 web.config 中而不是在后面的代码中进行。谢谢!

4

2 回答 2

5

假设您要处理所有“未经授权”的错误:

<customErrors defaultRedirect="Error.aspx" mode="On">
    <error statusCode="401" redirect="Unauthorized.aspx" />
    <error statusCode="403" redirect="Forbidden.aspx" />
</customErrors>

任何 401(未经授权)请求将被转发到Unauthorized.aspx.

或者,您需要在您的Page_Load活动中执行检查。如果这看起来很乏味,您总是可以为所有应该是管理员的页面创建一个基页面类并在那里执行检查。例如

// base class
public class AdminOnlyPage : Page
{
  /*...*/ Page_Load(Object sender, EventArgs e)
  {
    /* check if the user is admin otherwise reject and redirect */
  }
}

// Your "Structures.aspx" page
public class Structures : AdminOnlyPage
{
}
于 2013-02-06T14:45:33.020 回答
1

我注意到我的应用程序正在使用带有“Location”标头集的“302 Found”代码重定向回登录页面。由于我的登录页面恰好位于共享同一服务器的外部应用程序中,因此我无法对其进行修改。

相反,我将其添加到我的 global.asax 中:

    protected void Application_EndRequest(Object sender, EventArgs e)
    {
        if (Response.Status.StartsWith("302") 
            &&
            Request.IsAuthenticated 
            &&
            Response.RedirectLocation.StartsWith(System.Web.Security.FormsAuthentication.LoginUrl))
        {
            //log.Trace("Preventing redirection from app to login form since user is already logged in. It's authorization issue, not authentication.");
            Response.Clear();
            Response.Redirect("~/AccessDenied.aspx");
        }
    }
于 2016-04-12T19:12:41.803 回答