2

我已经模拟了控制器中使用的服务器变量。

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 和 Model 中获取值的唯一区别是,我们在 Controller 中编写HttpContext.Request.ServerVariables,而在 Model 中编写HttpContext.Current.Request.ServerVariables

它们不同吗?我怎样才能在模型中获得这些值。

4

1 回答 1

3

而在模型中,我们编写 HttpContext.Current.Request.ServerVariables。

HttpContext.Current是问题所在。它是一个不能模拟的静态属性,并且不能在 ASP.NET 上下文(例如单元测试)之外使用。因此,如果您使用 HttpContext.Current,您将无法对您的应用程序进行单元测试。话虽如此,您不应在模型中使用任何 HTTP 特定工件。您应该直接将值从控制器传递给模型,以便模型不会尝试获取它们。

于 2011-12-05T09:57:19.803 回答