2010-11-16 31 views
5

Comment puis-je ajouter la session à un fauxcontexte?Ajouter une session pour simuler httpContext dans le projet C# MVC

Cette fonction est-elle compilée pour une requête partielle où le contenu doit être renvoyé sous forme de chaîne. Seulement nous n'avons pas de sessions maintenant dans la requête partielle.

Et je ne peux pas les ajouter comme fakeContext.Session = HttpContext.Current.Session

Quelqu'un une suggestion?

///<summary> 
    /// Invoke the partial request and return the result as a string. 
    ///</summary> 
    ///<param name="context">The controller context to use.</param> 
    ///<returns>A string containing the result of the partial request.</returns> 
    public String InvokeAsString(ControllerContext context) 
    { 
     var stringBuilder = new StringBuilder(); 
     //create memory writer used for httpresponse. 
     var memoryWriter = new StringWriter(stringBuilder); 
     //create a fake response 
     var fakeResponse = new HttpResponse(memoryWriter); 
     //create a fake context. 
     var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse); 
     var oldPrincipal = context.HttpContext.User; 
     fakeContext.User = oldPrincipal; 

     //create a fake controllercontext to use for the default invoke action. 
     var fakeControllerContext = new ControllerContext(new HttpContextWrapper(fakeContext), context.RouteData, context.Controller);       

     var oldContext = HttpContext.Current; 
     HttpContext.Current = fakeContext; 

     ManagedWebSessionContext.Bind(
      HttpContext.Current, 
      SessionManager.SessionFactory.OpenSession(new Interceptor())); 

     //perform the default invoke action. 
     Invoke(fakeControllerContext); 
     HttpContext.Current = oldContext; 

     //Flush memory and return output 
     memoryWriter.Flush(); 
     var content = stringBuilder.ToString(); 

     return content; 
    } 

Répondre

5

trouvé la solution

fakeContext.Items.Add ("ASPSESSION", HttpContext.Current.Session);

De cette façon, vous pouvez changer la session même si fakeContext.Session est readOnly