該問題可以通過覆蓋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