【发布时间】:2017-05-14 23:29:21
【问题描述】:
我在控制器中有一个函数,我正在对它进行单元测试,该函数需要 http 请求标头中的值。我无法初始化 HttpContext,因为它是只读的。
我的控制器函数需要“device-id”的 http 请求标头值
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
//not valid controller.HttpContext is readonly
//controller.HttpContext = new DefaultHttpContext();
var result = controller.Get();
Assert.AreEqual(result.Count(), 2);
}
有没有不使用第三方库的直接方法来做到这一点?
【问题讨论】:
-
不要使用HttpContext?使用控制器的全部意义在于数据来自控制器的参数。如果您的控制器使用 HttpContext 来读取数据,就好像它是一个 WebForms 页面一样,那么您就有问题了。
-
@PanagiotisKanavos 标头中的值是一条信息,指示呼叫来自哪个移动设备。这是检索正确数据所必需的。设备 ID 位于标头中,因为身份验证需要该 ID,由自定义操作过滤器处理。我可以将设备 ID 作为路由参数传递,但这将是多余的
-
检查 FromHeaderAttribute 但也检查重复项。 HttpContext 现在可以通过配置注入了
-
我建议您编辑您的问题以准确指定您想要的内容(访问标题字段以识别移动设备)。 ASP.NET 文档似乎正在经历一个....“过渡”时期,说得好听点,缺少文档页面。检查询问如何路由移动设备的this almost identical question
标签: c# asp.net-mvc unit-testing asp.net-core