Tengo un FakeHttpContext que he estado tratando de modificar para incluir algunos encabezados con fines de prueba.
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; }Esto funciona sin los encabezados, pero cuando agrego cualquiera de estas líneas de código entre las líneas httpRequest y stringWriter .
httpRequest.Headers.Add("blah", "1234"); httpRequest.Headers["blah"] = "1234";tira
Se produjo una excepción del tipo 'System.PlatformNotSupportedException' en System.Web.dll pero no se manejó en el código de usuario
Acabo de descubrir que con la clase HttpRequestMessage , puede agregar fácilmente encabezados para probar sus controladores WebAPI sin tener que crear ningún HttpContext falso .
var request = new HttpRequestMessage(HttpMethod.Get, "http://stackoverflow"); request.Headers.Add("deviceId","1234"); _myController.Request = request;Estoy usando .Net Core 3.1 y el marco Moq. Creé un DefaultHttpContext, establecí los encabezados allí, finalmente lo asigné al constructor ControllerContext del controlador.
var httpContext = new DefaultHttpContext(); httpContext.Request.Headers["X-Example"] = "test-header"; var controller = new ExampleController(mockClient.Object, mockLogger.Object) { ControllerContext = new ControllerContext() { HttpContext = httpContext } };Fuente: https://www.thecodebuzz.com/unit-test-mock-httprequest-in-asp-net-core-controller/