2010-11-16 81 views
5

如何將會話添加到fakeContext?在C#MVC項目中添加會話以僞造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只有