【问题标题】:OnActionExecuting equivalent in standard asp.NET?标准 asp.NET 中的 OnActionExecuting 等效项?
【发布时间】:2013-05-22 17:04:15
【问题描述】:

在标准的 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);
        }

【问题讨论】:

  • 你有到目前为止的代码示例吗?
  • @RaimondKuipers 我的 asp.NET 代码还是我正在转换的 MVC 代码?
  • 两者都会有帮助
  • @MyName 看看我的回答。
  • @RaimondKuipers :这就是很多代码

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


【解决方案1】:

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

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

来自 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()
    {
    }
}

【讨论】:

  • 所以我开始请求将类似于执行操作?我认为开始请求会在操作执行之前发生......在 MVC 页面循环中,这就是我认为页面加载可能更适合的原因。我真的很困惑。那么 OnAuthorization 会是什么?
  • 我猜它的 AuthorizeRequest ??
  • @MyName 问题是你的目标是什么,是指日志记录吗?安全吗?
  • 安全主要是,我实际上认为有更好的方法来实现我想要的,而不仅仅是盲目地翻译代码哈哈。出于我的目的,我意识到用户是否是静态的并不重要。感谢您的帮助:D 我会将其标记为答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多