2009-10-21 5 views
1

J'ai la gestion des erreurs de configuration comme décrit ici: How can I properly handle 404 in ASP.NET MVC?ASP.NET MVC - Manipulation 404 de: Le SessionStateTempDataProvider exige SessionState être activé

Lorsque la méthode errorController.Execute est appelée, je reçois un InvalidOperationException: Le SessionStateTempDataProvider exige SessionState être activé.

Mon mode d'état de session est défini sur InProc, mais je ne l'utilise pas. J'ai également essayé de le désactiver comme décrit ici: How can I disable session state in ASP.NET MVC? Le code est exécuté, mais l'erreur persiste.

Cela se produit localement à l'aide du navigateur Web intégré de Visual Studio.

Y at-il un moyen de résoudre ce problème?

Répondre

0

Ce problème peut être résolu en remplaçant la méthode ExecuteCore dans ErrorController. Apparemment, certains types d'erreurs (par exemple, l'accès aux fichiers interdits) ne remplissent pas complètement le HttpContext disponible pour le gestionnaire d'erreurs; en particulier Context.Session == null, ce qui provoque l'étouffement de la méthode ExecuteCore en essayant de déterminer s'il y a un TempData qui doit être sauvegardé/chargé.

J'ai décidé que je peux vivre sans TempData dans mon contrôleur d'erreur; voici ma mise en œuvre.

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

Si vous voulez quitter l'état de session, essayez d'ajouter ce qui suit à <system.webServer> <modules>:

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

Cela ne se débarrasse pas de l'erreur pour moi et je suis également via le haut- Visual Studio dans le serveur Cassini. – OutOFTouch

+0

Cette erreur ne se produit que si vous utilisez web-dev et IE, il ne se produit pas lorsque vous utilisez le web dev intégré et FF et ne se produit pas lorsque vous utilisez IE et IIS 7, étrange. – OutOFTouch

Questions connexes