我听说ASP.Net MVC可以显著缩短页面加载时间,仅因为它不使用旧的asp.net生命周期,并以不同的方式处理页面。是否有一种简单的方法,例如通过让我的网页继承其他类来利用这样的东西。如果可能的话,我希望这个解决方案适用于ASP.Net 2.0。
我发现大部分文章都在讲使用页面作为基类,并在其上实现功能,看起来你需要创建自己的MyPage类并实现IHttpHandler接口
From the MSDN article
using System.Web;
命名空间 HandlerExample
{
public class MyHttpHandler : IHttpHandler
{
// 重写 ProcessRequest 方法。
public void ProcessRequest(HttpContext context)
{
context.Response.Write("这是一个 HttpHandler 测试。
");
context.Response.Write("您的浏览器:");
context.Response.Write("类型:" + context.Request.Browser.Type + "
");
context.Response.Write("版本:" + context.Request.Browser.Version);
}
}
// Override the IsReusable property.
public bool IsReusable
{
get { return true; }
}
以下是需要翻译的内容:
再次引用文章内容:要使用此处理程序,请在 Web.config 文件中包含以下行。
要使用此处理程序,需在 Web.config 文件中添加以下代码:
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="handler.aspx" type="HandlerExample.MyHttpHandler,HandlerTest"/>
</httpHandlers>
</system.web>
</configuration>
我会查看 System.web.ui.page 的源代码并了解它的作用以指导你。 我猜想它主要只是按正确的顺序调用不同的 asp.net 页面生命周期方法。 你可以通过从 ProcessRequest 方法调用自己的 page_load 来做类似的事情。 这将路由到你实现的 MyPage 类的个体实现。
我以前从未考虑过做这样的事情,听起来相当不错,因为我确实没有使用任何臃肿的 WebForms 功能。 MVC 可能会使整个练习徒劳无功,但它看起来相当不错。
new base:
using System.Web;
namespace HandlerExample
{
// Replacement System.Web.UI.Page class
public abstract class MyHttpHandler : IHttpHandler
{
// Override the ProcessRequest method.
public void ProcessRequest(HttpContext context)
{
// Call any lifecycle methods that you feel like
this.MyPageStart(context);
this.MyPageEnd(context);
}
// Override the IsReusable property.
public bool IsReusable
{
get { return true; }
}
// define any lifecycle methods that you feel like
public abstract void MyPageStart(HttpContext context);
public abstract void MyPageEnd(HttpContext context);
}
Implementation for the page:
// Individual implementation, akin to Form1 / Page1
public class MyIndividualAspPage : MyHttpHandler
{
public override void MyPageStart(HttpContext context)
{
// stuff here, gets called auto-magically
}
public override void MyPageEnd(HttpContext context)
{
// stuff here, gets called auto-magically
}
}
}
如果您不需要所有这些“asp.net的东西”,您可以考虑实现自定义的IHttpHandler。据我所知,除了Page类之外,没有其他标准的IHttpHandlers可供重用。
要做到这一点,您应该首先查看System.Web.UI.PageHandlerFactory类和相应的System.Web.IHttpHandlerFactory接口。
从那里,您可能会查看System.Web.IHttpHandler接口和System.Web.UI.Page类。
基本上,您将编写自己的IHttpHandlerFactory,生成处理页面请求的IHttpHandlers。