C# 访问类中的模拟Request.ServerVariables

C# 访问类中的模拟Request.ServerVariables,c#,mocking,request.servervariables,C#,Mocking,Request.servervariables,我模拟了控制器中使用的服务器变量 request.SetupGet(x => x.ServerVariables) .Returns(new System.Collections.Specialized.NameValueCollection { {"SERVER_NAME","localhost"}, {"SCRIPT_NAME","localhost"}, {"SERVER_PORT","80"},

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

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

它们不同吗?如何在模型中也获得这些值

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

HttpContext.Current
是问题所在。它是一个静态属性,您不能对其进行模拟,也不能在ASP.NET上下文(如单元测试)之外使用。因此,如果使用HttpContext.Current,则无法对应用程序进行单元测试。也就是说,您不应该在模型中使用任何特定于HTTP的构件。您应该直接将值从控制器传递到模型,这样模型就不会试图获取它们