Ext.Net也是一个很有名的前端框架,它构建于ExtJS之上,提供了一整套UI+AJAX的解决方案.通过对其源码的研究,了解其是如何实现这套AJAX的,对我们也是很有帮助的.
1.静态的AJAX方法实现.
当把[DirectMethod]标记标在一个静态方法上时,Ext.Net是通过HttpModule来截获Http请求实现的.具体的实现类为:DirectRequestModule类
在应用程序生命周期的PostAcquireRequestState事件内中加入处理函数
public void Init(HttpApplication app)
{
app.PostAcquireRequestState += OnPostAcquireRequestState;
app.PreSendRequestHeaders += RedirectPreSendRequestHeaders;
}
{
app.PostAcquireRequestState += OnPostAcquireRequestState;
app.PreSendRequestHeaders += RedirectPreSendRequestHeaders;
}
如果是AJAX请求且是静态AJAX方法则调用ProcessRequest方法
private void OnPostAcquireRequestState(object sender, EventArgs eventArgs)
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Context.Request;
if (RequestManager.IsAjaxRequest)
{
if (DirectMethod.IsStaticMethodRequest(request) /*|| Utilities.ReflectionUtils.IsTypeOf(app.Context.Handler, "System.Web.Script.Services.ScriptHandlerFactory+HandlerWrapper")*/)
{
this.ProcessRequest(app, request);
}
}
}
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Context.Request;
if (RequestManager.IsAjaxRequest)
{
if (DirectMethod.IsStaticMethodRequest(request) /*|| Utilities.ReflectionUtils.IsTypeOf(app.Context.Handler, "System.Web.Script.Services.ScriptHandlerFactory+HandlerWrapper")*/)
{
this.ProcessRequest(app, request);
}
}
}