该问题是由于,服务端程序集出错时。导致直接被全局异常捕获处理,redirect到错误页面时又继续初始化错误程序集中的内容导致死循环。
解决该问题需要使用纯静态页面,来避开服务端的重复访问从而达到解决信息异常输出的目标!!!
纯静态面临的技术难题是:
- 若使用Get获取静态html页面,出错信息只能通过url参数传递,此处存在一个2k长度限制
- 若使用Post方式获取静态html页面,需要请求服务端进行处理,由此难以绕过Asp.net框架自身存在异常的问题
评估了一下,2K的长度限制问题很严重的,大部分情况下的异常堆栈信息都会超过这个限制。如果因为避免死循环这种特例的情形,而损伤常见场景下的正常能力,那就得不偿失了!!
无论MVC还是WebForm,只是微软包装出来的Web编程模型,拘泥于这些会限制我们的想象力。回到Http协议本身,无非是一个简单的文传输协议。既然我们在Global.asax中已经拿到需要的错误信息了,就不要Redirect转到其它地方处理了。直接输出静态html文件的内容就OK了, 此处有点小掌声 吼吼!