该问题可以通过覆盖ErrorController中的ExecuteCore方法来解决。显然,某些类型的错误(例如禁止文件访问)并未完全填充错误处理程序可用的HttpContext;特别是Context.Session == null,这会导致ExecuteCore方法阻塞,试图确定是否有任何需要保存/加载的TempData。
我决定我可以在我的错误控制器中没有TempData;这是我的实现。
public class ErrorController : Controller {
protected override void ExecuteCore() {
string actionName = RouteData.GetRequiredString("action");
if (!ActionInvoker.InvokeAction(ControllerContext, actionName)) {
HandleUnknownAction(actionName);
}
}
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ViewResult InternalServerError() {
Response.StatusCode = (int)HttpStatusCode.InternalServerError; // 500
return View();
}
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ViewResult NotFound(string Path) {
Response.StatusCode = (int)HttpStatusCode.NotFound; // 404
ViewData["Path"] = Path;
return View();
}
}
这并不摆脱错误的,我和我也使用Visual Studio内置在卡西尼服务器。 – OutOFTouch 2013-01-14 16:30:40
如果使用内置的web-dev和IE,只有在使用内置web dev和FF时才会出现此错误,并且在使用IE和IIS 7时不会发生,这很奇怪。 – OutOFTouch 2013-01-14 21:04:50