Asp.net 在请求(可能重定向)后处理对象

Asp.net 在请求(可能重定向)后处理对象,asp.net,dispose,Asp.net,Dispose,我有一个CustomRequestContext对象,必须在每次请求后处理它。我在Page\u Load中创建它,并在Page\u Unload中处理它。唯一的问题是,在某些情况下,我需要调用Server.Transfer以重定向到另一个aspx页面。在这种情况下,在新页面准备好卸载之前,不应卸载对象。实现这一点的最佳方法是什么?为下面提到的所有asp.net页面创建自定义PageBase类,并在页面加载和页面卸载事件中处理CustomRequestContext /// <summary

我有一个
CustomRequestContext
对象,必须在每次请求后处理它。我在
Page\u Load
中创建它,并在
Page\u Unload
中处理它。唯一的问题是,在某些情况下,我需要调用
Server.Transfer
以重定向到另一个aspx页面。在这种情况下,在新页面准备好卸载之前,不应卸载对象。实现这一点的最佳方法是什么?

为下面提到的所有asp.net页面创建自定义PageBase类,并在
页面加载
页面卸载
事件中处理CustomRequestContext

/// <summary>
/// Base of front end web pages.
/// </summary>
public class PageBase : System.Web.UI.Page
{

    /// <summary>
    /// Initializes a new instance of the Page class.
    /// </summary>
    public Page()
    {
        this.Load += new EventHandler(this.Page_Load);
        this.UnLoad += new EventHandler(this.Page_UnLoad);
    }

    /// <summary>
    /// Page Load
    /// </summary>
    /// <param name="sender">sender as object</param>
    /// <param name="e">Event arguments</param>
    private void Page_Load(object sender, EventArgs e)
    {
        try
        {
            //Dispose the object here, assuming it is IDisposable.
            //You can apply your own Disposition steps here..
            CustomRequestContext.Dispose();
        }
        catch
        {
            //handle the situation gracefully here.
        }
    }

    /// <summary>
    /// Page UnLoad
    /// </summary>
    /// <param name="sender">sender as object</param>
    /// <param name="e">Event arguments</param>
    private void Page_UnLoad(object sender, EventArgs e)
    {
        try
        {
            //Dispose the object here, assuming it is IDisposable.
            //You can apply your own Disposition steps here..
            CustomRequestContext.Dispose();
        }
        catch
        {
            //handle the situation gracefully here.
        }
    }
}
//
///前端网页的基础。
/// 
公共类PageBase:System.Web.UI.Page
{
/// 
///初始化Page类的新实例。
/// 
公共网页()
{
this.Load+=新事件处理程序(this.Page\u Load);
this.UnLoad+=新事件处理程序(this.Page_UnLoad);
}
/// 
///页面加载
/// 
///发送者作为对象
///事件参数
私有无效页面加载(对象发送方,事件参数e)
{
尝试
{
//在此处处置该对象,假设该对象可IDisposable。
//您可以在此处应用自己的处置步骤。。
CustomRequestContext.Dispose();
}
抓住
{
//在这里优雅地处理这种情况。
}
}
/// 
///页面卸载
/// 
///发送者作为对象
///事件参数
私有无效页面\u卸载(对象发送方,事件参数e)
{
尝试
{
//在此处处置该对象,假设该对象可IDisposable。
//您可以在此处应用自己的处置步骤。。
CustomRequestContext.Dispose();
}
抓住
{
//在这里优雅地处理这种情况。
}
}
}

我通过允许对象一次拥有一个页面来解决这个问题。如果我想从页面中放弃控制,我会将它设置为null,然后它不会在页面的析构函数中释放

您正在加载和卸载函数中处理它。你的建议是我应该重新创建上下文对象,而不是试图保存它吗?不是。我刚刚介绍了如何在给定事件上处理对象。何时处置该物体由您决定。