2011-12-05 19 views
2

我嘲笑了Controller中使用的服務器變量。在類中訪問Mocked Request.ServerVariables

request.SetupGet(x => x.ServerVariables) 
    .Returns(new System.Collections.Specialized.NameValueCollection 
    { 
     {"SERVER_NAME","localhost"}, 
     {"SCRIPT_NAME","localhost"}, 
     {"SERVER_PORT","80"}, 
     {"HTTPS","www.melaos.com"}, 
     {"REMOTE_ADDR","127.0.0.1"}, 
     {"REMOTE_HOST","127.0.0.1"} 
    }); 

我可以得到控制器中的服務器變量的值,但不能在模型類中。爲什麼這樣?

在控制器和模型中獲取值的唯一區別在於,我們在控制器中編寫HttpContext.Request.ServerVariables而在模型中我們編寫HttpContext.Current.Request.ServerVariables

他們有區別嗎?我怎樣才能在模型中獲得這些值。

回答

3

而在模型中我們編寫HttpContext.Current.Request.ServerVariables。

HttpContext.Current是問題所在。這是一個靜態屬性,你不能嘲笑,並且不能在ASP.NET上下文之外使用,如單元測試。所以如果你使用HttpContext.Current你不能單元測試你的應用程序。這就是說你不應該在你的模型中使用任何HTTP特定的工件。您應該直接將控制器的值傳遞給模型,以便模型不會嘗試獲取它們。