我有一个ASP.NET MVC 5应用程序,我使用SQL Server设置会话状态。一切正常。
我目前在我的开发者服务器上,所以我想断开互联网[会话数据库在线],看看会发生什么。毫不奇怪,着名的黄页死亡发生了。然后我想抓住这个例外我用过:
try{
session["age"]= 25;
}catch
{ //log the exception here and continue}
但我很惊讶这不会导致任何例外;因为应用程序在此阶段不会联系SQL Server。
似乎当IIS准备好视图页面以显示用户时;然后它会联系SQL Server以保存会话信息,如果失败,那么它将抛出死亡的黄页。
我的问题是:
有没有办法在代码中捕获异常?除了Global.asax
?
答案 0 :(得分:3)
会话加载/访问发生在请求生命周期(HttpApplication.AcquireRequestState
事件)的开头,并在请求生命周期(HttpApplication.ReleaseRequestState
事件)结束时保持不变。它不是你从会话中获得价值的地方。要捕获它,请使用MVC全局操作过滤器来处理异常,包括在这种情况下将发生的SQLException
。或者,创建一个HttpModule
来处理异常事件。
在RegisterGlobalFilters
方法(由Global.asax.cs
调用)中:
public class FilterConfig
{
public static void RegisterGlobalFilters( GlobalFilterCollection filters )
{
filters.Add( new YourCustomExceptionHandlingAttribute } );
}
}
YourCustomExceptionHandlingAttribute
应该实施HandleErrorAttribute