2

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

我认为这是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);
        }
4

1 回答 1

3

首先,考虑到 ASP.NET 中没有Action,因为模型不同(基于事件) - 没有可以用Action Filters装饰的方法(操作) ,这都是关于Page-Cycle事件的。

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

来自 MSDN:

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

例如:

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()
    {
    }
}
于 2013-05-27T20:50:07.723 回答