Asp.net 4.5 自定义属性网络表单

Asp.net 4.5 Custom Attribute Webform

使用 Asp.Net 旧项目,要访问网络表单,我需要创建一个自定义 class 属性来读取用户权限,例如 'Rights.ViewDashboard' 或 'Rights.CanEdit' 等。 class代码是:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
    public class AuthorizationAttribute : Attribute
    {
        public AuthorizationAttribute(Rights permission)
        {
            if (Security.IsAuthorizedTo(permission))
                return;
            HttpContext.Current.Server.TransferRequest("~", false);            
        }
    }

在我的 aspx 网络表单中:

[Authorization(Rights.ViewDashboard)]
public partial class DashboardRisorse : System.Web.UI.Page
 {
    protected void Page_Load(object sender, EventArgs e)
     {
     }       
 }

当用户在没有特定权限的情况下调用网络表单时,页面不会加载,网站会被重定向到默认页面。但是,如果他刷新页面,则代码不会执行,属性将被忽略并加载页面。调试时我看到这个属性只执行一次。 我的错在哪里? 我不需要 Net Core 解决方案,因为该项目有旧程序集。 谢谢

英德

我在这里假设您正在尝试定义类似于 MVC 中的 ActionFilter 属性的自定义属性。不幸的是 ASP.Net 的工作方式不同。

你有两个选择

  1. 创建一个 HttpModule 并使用可用的事件之一来构建您的逻辑

  2. 编写您要在页面加载中执行的逻辑。使用 Page.IsPostBack 来确定它是页面的初始加载还是页面正在回发。在 if..else if conditions

    中写下你需要的逻辑

如果我的假设不正确,请提供有关您的查询的更多详细信息,特别是您尝试使用该属性实现的目标是什么。