是否可以在404之后的HttpModule的Error事件处理程序中访问SessionState?
我尝试使用本博文中描述的技术为完整和部分回发实现一致的错误处理机制,
而不是在查询字符串上传递大量参数,而不是尝试将异常推送到会话状态并从错误页面访问它。
在我执行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);
}
}
马特
答案 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");
}
}
这应该可以做到!适合我!