在标准的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);
}
答案 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()
{
}
}