【发布时间】:2016-10-11 16:18:08
【问题描述】:
首先我想说的是,我提出的任何解决方案都必须适用于 .NET 2.0,因为这是我的项目所针对的框架。
我有一个 ASP.NET 网站,我使用代码强制页面进入 SSL 与否,而不是 web.config。基本上每个页面都被强制使用非 SSL,除非页面继承了我创建的允许页面定义属性以强制 SSL 的接口。我有一个在页面加载时运行的方法,它查看页面是否继承了这个接口,然后检查这个属性的值。这对我们来说一切都很好,但我想将这种类型的功能扩展到自定义服务器或用户控件。
我最初只考虑让控件使用相同的界面,但我很快发现递归查看所有 Page 的控件集合非常耗时,如果嵌套太深会导致堆栈溢出。
接下来我试图创建一个属性,我可以用它来装饰控件并在属性的 CTOR 中运行一些逻辑,但这失败了,因为我不能始终如一地强制属性的 CTOR 运行,因为我必须这样做在控件上调用 GetCustomAttributes() 方法,这使我回到递归和那里的问题。
有没有人知道我可以用接口、属性等“装饰”一个类,并将其与在.NET 2.0 中实例化类时可以一致运行的一些逻辑联系起来?我想我已经确认我可以使用 Page 的 Items 集合(或 HttpContext 的 Items 集合)来存储“ForceSSL”值,然后我可以在页面加载时查找并根据需要重写 URL。我想弄清楚的技巧是如何简单地触发它。
我意识到我可以有一个像 Organization.Global.Utilities.ForceSSL() 这样的全局方法来做这种事情,但我希望有某种“装饰”类型的模式可以用来调用这个逻辑/方法。
感谢您对此进行调查。
【问题讨论】: