OnActionExecuting在标准asp.NET中等效?

时间:2013-05-27 20:13:39

标签: c# asp.net asp.net-mvc-3 webforms web-parts

在标准的asp.NET中是否存在MVC.NET的OnActionExecuting的等价物? ?

我认为它是Page_Load,因为每次执行一个动作(或页面加载)时都会调用OnActionExecuting。但是当我尝试使用Page_Load时,我遇到了继承问题。

由于很难让我的解决方案与Page_Load一起工作,我想我可能没有最好的解决方案。

是否有相同或足够接近的想法?

背景:

我正在将一个MVC3应用程序转换为标准.NET以包装在SharePoint Web部件中。

这是我正在尝试翻译的MVC代码,因为你可以看到我正在翻译的用户安全位:

protected override void OnActionExecuting(ActionExecutingContext filterContext) {

            if (!SiteCacheProvider.ItemCached(enmCacheKey.SiteSetting)) {

                if (filterContext.IsImplementedGeneralPrincipal()) {
                    IUserProfile userProfile = ((IGeneralPrincipal)filterContext.HttpContext.User).UserProfile;

                    SiteCacheProvider.ChangeSiteSetting(userProfile.SiteID);
                }
            }

            base.OnActionExecuting(filterContext);
        }

1 个答案:

答案 0 :(得分:3)

首先,考虑到没有操作在ASP.NET中,因为模型不同(基于事件) - 没有方法(操作)可以用{{3来装饰},这是关于Action Filters事件的全部内容。

其次,在ASP.NET中,您可以使用Page-Cycle(特别是HTTP modules),以便通过添加所需的逻辑来拦截对应用程序页面的传入请求。

来自MSDN:

  

HTTP模块用于拦截HTTP请求以进行修改或利用   基于HTTP的请求根据需要进行身份验证,   授权,会话/状态管理,日志记录,修改响应,   URL重写,错误处理,缓存......

例如:

using System;
using System.Web;
using System.Collections;

public class HelloWorldModule : IHttpModule
{
    public string ModuleName
    {
        get { return "HelloWorldModule"; }
    }

    public void Init(HttpApplication application)
    {
         application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
         application.EndRequest += (new EventHandler(this.Application_EndRequest));

    }

    private void Application_BeginRequest(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        context.Response.Write("<h1>HelloWorldModule: Beginning of Request</h1><hr>");
    }
    private void Application_EndRequest(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        context.Response.Write("<hr><h1>HelloWorldModule: End of Request</h1>");
    }
    public void Dispose()
    {
    }
}