在 ASP.NET 中的类中进行响应的不良做法.重定向
本文关键字:不良 重定向 响应 ASP NET | 更新日期: 2023-09-27 18:34:26
在我的 ASP.NET 应用程序中,我正在使用一种方法来检查用户权限,以确定用户是否可以查看页面,或被重定向到"无效权限"页面。
由于在母版页上添加此权限重定向会导致无限循环,因此我被迫将其应用于所有页面。我不想将此方法复制到每个页面上,因此我想在我的 Web 应用程序中创建一个包含此方法的类,以便我可以在我的应用程序中全局使用它。
我没有接受过正式的培训,但我的直觉告诉我,在类中放置 Response.Redirect 或任何"Web"函数是一种不好的做法?我说的对吗?如果是这样,有没有更好的方法呢?
在重定向之前,您可以检查当前 url 以确保它不是无效权限页面;因此,只有在您尚未重定向时才会重定向。
if(!Request.RawUrl.Contains("Invalid Permissions Page"))
Response.Redirect("Invalid Permissions Page");
<</div>
div class="answers"> 你可以创建一个新类,我们称之为myPageClass
,来自System.Web.UI.Page
的遗产,然后,包括你需要的所有代码在此类中,使你背后的所有代码都可以从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
,例如,如果它将带您到另一个页面,则无需转到服务器即可执行此操作,这只能在客户端中进行。
首先,您的原始问题:
在ASP.NET 的类中进行响应的不良做法?
是的,我认为这是一种不好的做法。 传递委托更安全,然后您的"授权请求"方法可以调用委托。 下面是一个示例:
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 接口。 无论哪种方式,我都不会在每个页面中编写代码。