我已经模拟了Controller中使用的服务器变量。
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"}
});
我可以在Controller中获取Server变量的值,但不能在Model类中获取。为什么会这样?
在Controller和Model中获取值的唯一区别是在Controller中我们编写HttpContext.Request.ServerVariables
而在Model中编写HttpContext.Current.Request.ServerVariables
。
它们有什么不同吗?如何在模型中获取这些值。
答案 0 :(得分:3)
在Model中我们编写HttpContext.Current.Request.ServerVariables。
HttpContext.Current
是问题所在。它是一个静态属性,您无法模拟,也无法在ASP.NET上下文之外使用,例如单元测试。因此,如果您使用HttpContext.Current,则无法对您的应用程序进行单元测试。这就是说你不应该在模型中使用任何HTTP特定的工件。您应该直接将控制器中的值传递给模型,以便模型不会尝试获取它们。