5

Wie kann ich die Sitzung zu einem FakeContext hinzufügen?Hinzufügen einer Sitzung zu fälschen httpContext in C# MVC-Projekt

Diese Funktion haben wir für partielle Anfrage erstellen, wo der Inhalt als Zeichenfolge zurückgegeben werden muss. Nur wir haben jetzt keine Sitzungen in der Teilanforderung.

Und ich kann hinzufügen, sie nicht wie fakeContext.Session = HttpContext.Current.Session

Jemand einen Vorschlag?

///<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; 
    } 

Antwort

5

die Lösung

Gefunden

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

Auf diese Weise können Sie die Sitzung ändern, auch wenn fakeContext.Session readOnly

ist