Эта проблема может быть исправлена путем переопределения метода ExecuteCore в вашем ErrorController. Очевидно, что некоторые виды ошибок (например, запрещенный доступ к файлу) не полностью заполняют 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();
}
}