2010-11-16 21 views
5

मैं फर्जी कॉन्टेक्स्ट में सत्र कैसे जोड़ सकता हूं?सी # एमवीसी प्रोजेक्ट में नकली httpContext में सत्र जोड़ें

यह फ़ंक्शन हमने आंशिक अनुरोध के लिए बनाया है जहां सामग्री को स्ट्रिंग के रूप में वापस किया जाना चाहिए। केवल हमारे पास आंशिक अनुरोध में सत्र नहीं हैं।

और मैं उन्हें fakeContext.Session = HttpContext.Current.Session

किसी एक सुझाव की तरह नहीं जोड़ सकते हैं?

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

उत्तर

5

मिले समाधान

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

इस तरह आप सत्र को बदल सकते हैं जैसे fakeContext.Session पढ़ा जाता है केवल