2009-10-21 29 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