在控制台应用程序中人工填充HttpContext对象

本文关键字:填充 HttpContext 对象 控制台 应用程序 | 更新日期: 2023-09-27 18:30:06

我正在为log4net编写一个包装器库。这个库应该能够捕获上下文信息,如查询字符串、cookie、表单字段等。

我从控制台应用程序调用这个包装器类,而不是TDD类。

有没有一种方法可以在控制台应用程序中填充HttpContext对象,如下所示?

HttpContext c = new HttpContext(null);
c.Request.QueryString.Keys[1] = "city";
c.Request.QueryString[1] = "Los Angeles";
c.Request.QueryString.Keys[2] = "state";
c.Request.QueryString[2] = "CA";

然后按如下方式检索它?

Console.WriteLine(context.Request.QueryString.Keys[1]);

当我尝试上面的代码时,我得到了以下异常。

Property or indexer 'System.Collections.Specialized.NameObjectCollectionBase.KeysCollection.this[int]' cannot be assigned to -- it is read only 

在控制台应用程序中人工填充HttpContext对象

您可以在这里阅读关于使用Moq伪造它的内容:http://o2platform.wordpress.com/2011/04/05/mocking-httpcontext-httprequest-and-httpresponse-for-unittests-using-moq/

模拟HttpContext并不容易。您可以使用Typemock Isolator来设置上下文,但它不是免费的。另一种(更好的)方法是抽象HttpContext,并针对抽象的模拟实现来实现控制台(测试?)客户端