标准 asp.NET 中的 OnActionExecuting 等效项?

Posted

技术标签:

【中文标题】标准 asp.NET 中的 OnActionExecuting 等效项?【英文标题】:OnActionExecuting equivalent in standard asp.NET? 【发布时间】: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 :这就是很多代码 【参考方案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 我会将其标记为答案

以上是关于标准 asp.NET 中的 OnActionExecuting 等效项?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC、Telerik Kendo、jQuery 验证中的非标准日期格式

.net 标准库中的 HttpContext

ASP.NET Core中的依赖注入:控制反转(IoC)

修改 ASP .NET Core 中的登录页面文本

Asp.net MVC中的约定

ASP.NET 中的 WCF 模拟异常