gpt4 book ai didi

c# - 标准 asp.NET 中的 OnActionExecuting 等价物?

转载 作者:行者123 更新时间:2023-11-30 22:17:24 24 4
gpt4 key购买 nike

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

最佳答案

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

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

来自 MSDN:

HTTP Modules use to intercept HTTP requests for modifying or utilize HTTP based requests according to needs like authentication, authorization, session/state management, logging, modifying Response, URL rewriting, Error handling, Caching....

例如:

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

关于c# - 标准 asp.NET 中的 OnActionExecuting 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com