在404之后访问IHttpModule中的SessionState?

时间:2009-05-15 16:05:49

标签: c# asp.net

是否可以在404之后的HttpModule的Error事件处理程序中访问SessionState?

我尝试使用本博文中描述的技术为完整和部分回发实现一致的错误处理机制,

ASP.NET Error Handling......

而不是在查询字符串上传递大量参数,而不是尝试将异常推送到会话状态并从错误页面访问它。

在我执行Server.Transfer(在HttpModule的错误处理程序中)时,SessionState永远不可用,因此错误页面无法使用。

我尝试过使用IRequestSessionState接口将IHttpHandler重置为一个但没有快乐的技巧。

提前致谢,

编辑 - IHttpModule错误处理程序的代码是

void context_Error(object sender, EventArgs e)
{
    try
    {            
        var srcPageUrl = HttpContext.Current.Request.Url.ToString();                       

        // If the error comes our handler we retrieve the query string
        if (srcPageUrl.Contains(NO_PAGE_STR))
        {
            // Deliberate 404 from page error handler so transfer to error page
            // SESSION NOT AVAILABLE !!!!

            HttpContext.Current.ClearError();                
            HttpContext.Current.Server.Transfer(string.Format("{0}?ErrorKey={1}", ERROR_PAGE_URL, errorKey), true);
        }
        else            
            HttpContext.Current.Server.ClearError();                

        return;
    }
    catch (Exception ex)
    {
        Logging.LogEvent(ex);
    }
} 

马特

1 个答案:

答案 0 :(得分:0)

    public class ExceptionModule : IHttpModule
    {
        #region IHttpModule Members

        public void Dispose()
        {

        }

    /// <summary>
    /// Init method to register the event handlers for 
    /// the HttpApplication
    /// </summary>
    /// <param name="application">Http Application object</param>
    public void Init(HttpApplication application)
    {
        application.Error += this.Application_Error;
    }




    private void Application_Error(object sender, EventArgs e)
    {

                    // Create HttpApplication and HttpContext objects to access
                    // request and response properties.
                    var application = (HttpApplication)sender;
                    var context = application.Context;
                    application.Session["errorData"] = "yes there is an error";

                    context.Server.Transfer("Error.aspx");

         }
}

这应该可以做到!适合我!