1

在我的 ASP.NET 应用程序中,我使用一种方法来检查用户权限,以决定用户是否可以查看该页面,或者被重定向到“无效权限”页面。

由于在母版页上添加此权限重定向会导致无限循环,因此我被迫将其应用于所有页面。我不想将此方法复制到每个页面上,因此我想在我的 Web 应用程序中创建一个包含此方法的类,以便我可以在我的应用程序中全局使用它。

我没有接受过正式培训,但我的直觉告诉我,在课堂上放置 Response.Redirect 或任何“Web”功能是不好的做法?我对么?如果是这样,有没有更好的方法来解决这个问题?

4

3 回答 3

3

您可以在重定向之前检查当前的 url 以确保它不是无效的权限页面;因此,只有当您不在那里时,您才会重定向。

if(!Request.RawUrl.Contains("Invalid Permissions Page"))
    Response.Redirect("Invalid Permissions Page");
于 2012-05-16T16:11:17.587 回答
1

你可以创建一个新类,我们称之为myPageClass继承 from System.Web.UI.Page,然后,在这个类中包含你需要的所有代码,使你所有的代码都可以继承 from myPageClass

public class myPageClass : System.Web.UI.Page
    {
        public void authorize()
        { 
            // your auth code here
            Response.Redirect("Invalid_Permissions_Page.aspx", false);
        }
    }

public partial class _Default : myPageClass
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Your code here
    }
}

在我看来,你不应该Response.Redirect在按钮动作的情况下使用,例如,如果它将带你到另一个页面,你不需要去服务器做那个,那只是做在客户端。

于 2012-05-16T16:24:50.403 回答
1

首先,您的原始问题:

在 ASP.NET 中的类中有一个 Response.Redirect 的坏习惯?

是的,我认为这是一种不好的做法。传递委托更安全,然后您的“AuthorizeRequest”方法可以调用委托。这是一个例子:

public static void AuthorizeRequest(Action<string> redirect)
{
    if( /*whatever*/ )
        redirect("/InvalidPermissions.htm");
}

protected void Page_Load(object sender, EventArgs e)
{
    AuthorizeRequest(Response.Redirect);
}

现在更大的问题......你不想这样做!

让每个页面都断言授权是编写安全问题的快速方法。有人会忘记或意外删除断言。ASP.NET 有多种方法来拦截和过滤为此目的的请求。

最简单的做法是将其放在 Global.asax 文件中的事件挂钩中。HttpApplication对象有几个可用于此目的的事件。另一种选择是实现IHttpModule接口。无论哪种方式,我都不会在每一页中编写代码。

于 2012-05-16T16:42:36.200 回答