2009-10-21 52 views
1

我已经安装的错误处理如下所述:How can I properly handle 404 in ASP.NET MVC?ASP.NET MVC - 处理404的:在SessionStateTempDataProvider需要SessionState的启用

当errorController.Execute方法被调用时,我得到一个InvalidOperationException:本SessionStateTempDataProvider SessionState的要求启用。

我的会话状态模式设置为InProc,但我没有使用它,所以我也尝试关闭它,如下所述:How can I disable session state in ASP.NET MVC?代码已执行,但仍然出现错误。

这是使用Visual Studio内置的Web浏览器在本地进行的。

有没有办法解决这个问题?

回答

0

该问题可以通过覆盖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(); 
    } 
} 
1

如果你想离开会话状态上,尝试添加下列到<system.webServer> <modules>

<add name="SessionStateModule" type="System.Web.SessionState.SessionStateModule" /> 
+0

这并不摆脱错误的,我和我也使用Visual Studio内置在卡西尼服务器。 – OutOFTouch 2013-01-14 16:30:40

+0

如果使用内置的web-dev和IE,只有在使用内置web dev和FF时才会出现此错误,并且在使用IE和IIS 7时不会发生,这很奇怪。 – OutOFTouch 2013-01-14 21:04:50