2
我有一个FakeHttpContext我一直在试图修改,包括用于测试目的如何FakeHttpContext设置Request.Header单元测试
public static HttpContext FakeHttpContext()
{
var httpRequest = new HttpRequest("", "http://stackoverflow/", "");
var stringWriter = new StringWriter();
var httpResponse = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponse);
var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),
new HttpStaticObjectsCollection(), 10, true,
HttpCookieMode.AutoDetect,
SessionStateMode.InProc, false);
httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null, CallingConventions.Standard,
new[] { typeof(HttpSessionStateContainer) },
null)
.Invoke(new object[] { sessionContainer });
return httpContext;
}
此作品,未经信息,但是一些头当我添加任何这些代码行在httpRequest和stringWriter行之间。
httpRequest.Headers.Add("blah", "1234");
httpRequest.Headers["blah"] = "1234";
它抛出
类型的异常 'System.PlatformNotSupportedException' 在System.Web.dll中发生 但在用户代码中没有处理
- 我为什么得到这个异常?
- 有没有一种可能的方式头添加到HttpContext的测试 的WebAPI控制器?
如果你能得到你的代码与HttpContextBase工作,那么你可以这样平时模拟的东西(包括请求,并请求头)。一般来说,只要你没有使用HttpContext.Current,这应该不成问题。 – Reddog
我试着按照这个链接http://stackoverflow.com/questions/32640/mocking-asp-net-mvc-controller-context上的答案,但它似乎不适用于WebAPI控制器,但MVC控制器 – Oluwafemi