我有一个ASP.Net应用程序,我注意到通过使用分析器,在我的页面运行之前发生了大量的处理。在我的应用程序中,我们没有使用viewstate,asp.Net会话,我们可能不需要使用asp.net页面生命周期所带来的大部分开销。还有其他一些我可以轻易继承的课程,它会删除所有的Asp.Net内容,让我自己动手写一下这个页面吗?
我听说ASP.Net MVC可以大大减少页面加载,因为它不使用旧的asp.net生命周期,并且以不同的方式处理页面。有没有一种简单的方法,可能只需让我的网页继承其他类来利用这样的东西。如果可能的话,我想要一个适用于ASP.Net 2.0的解决方案。
答案 0 :(得分:9)
我发现大多数文章都在谈论使用Page作为基类并在其上实现功能,看起来你需要创建自己的MyPage类来实现IHttpHandler
来自MSDN文章
using System.Web;
namespace HandlerExample
{
public class MyHttpHandler : IHttpHandler
{
// Override the ProcessRequest method.
public void ProcessRequest(HttpContext context)
{
context.Response.Write("This is an HttpHandler Test.");
context.Response.Write("Your Browser:");
context.Response.Write("Type: " + context.Request.Browser.Type + "");
context.Response.Write("Version: " + context.Request.Browser.Version);
}
// Override the IsReusable property.
public bool IsReusable
{
get { return true; }
}
}
}
同样,从文章:要使用此处理程序,请在Web.config文件中包含以下行。
// Override the IsReusable property.
public bool IsReusable
{
get { return true; }
}
<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可能会使整个练习徒劳无功,但看起来确实非常整洁。
新基地:
页面实施:
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);
}
答案 1 :(得分:3)
如果您不需要所有这些“asp.net内容”,您可能希望实现自定义IHttpHandler。 Afaik,除了Page class之外,没有其他标准的IHttpHandler可以重用。
答案 2 :(得分:0)
为此,您应首先查看System.Web.UI.PageHandlerFactory类和相应的System.Web.IHttpHandlerFactory接口。
从那里你可能会看到System.Web.IHttpHandler接口和System.Web.UI.Page类。
基本上你会编写自己的IHttpHandlerFactory来生成处理页面请求的IHttpHandlers。