集成测试 - 此操作需要 IIS 集成管道模式

Integration Test - This operation requires IIS integrated pipeline mode

我正在使用 VS 2015 with.Net 4.6.1。我正在尝试为代码编写集成测试,但它给了我上述错误。我无法理解。此方法在global.asax

public void Application_EndRequest(object sender, EventArgs e)
        {
            AddCorsResponseHeadersForUnauthorizedRequests(Response, Request);
        }

        public static void AddCorsResponseHeadersForUnauthorizedRequests(HttpResponse response, HttpRequest request)
        {
            var origin = request.Params[AppConstant.RequestHttpOrigin];
            if (response.StatusCode == (int) HttpStatusCode.Unauthorized &&
                string.IsNullOrEmpty(response.Headers[AppConstant.AccessControlAllowOrigin]) &&
                !string.IsNullOrEmpty(origin))
            {
                response.AddHeader(AppConstant.AccessControlAllowOrigin, WebApiConfig.GetCorsAllowedOrigin());
                response.AddHeader(AppConstant.AccessControlAllowCredentials, "true");
            }
        }

IntegrationTest.cs

[TestFixture]
    public class AuthenticationResponseHeadersTests
    {
        private WebApiApplication systemUnderTest;
        private HttpRequest httpRequest;
        private HttpResponse httpResponse;

        [SetUp]
        public void Setup()
        {
            systemUnderTest = new WebApiApplication();
            httpRequest = new HttpRequest(string.Empty, "http://localhost:5001/", string.Empty);
            httpResponse = new HttpResponse(TextWriter.Null);
            httpResponse.AddHeader("Connection", "keep-alive");
        }

        [Test]
        public void ShouldAddCorsResponseHeaders()
        {
            httpResponse.StatusCode = (int)HttpStatusCode.Unauthorized;
            WebApiApplication.AddCorsResponseHeadersForUnauthorizedRequests(httpResponse, httpRequest);

            Assert.AreEqual("http://localhost:5001", httpResponse.Headers[AppConstant.AccessControlAllowOrigin]);
            Assert.AreEqual("true", httpResponse.Headers[AppConstant.AccessControlAllowCredentials]);
        }
    }

我得到的错误是在它试图为 Response.Headers 获取特定 header 的条件下,错误是,知道吗?为什么需要 IIS 进行测试?

This operation requires IIS integrated pipeline mode

经典模式(IIS6及以下版本的唯一模式)是IIS只能与ISAPI扩展一起工作的模式

另一方面,集成模式是 IIS7 中的一种新模式,其中 IIS 管道与 ASP.NET 请求管道

紧密集成(即完全相同)

select 解决方案资源管理器中的 Web 应用程序项目节点并按 F4 并更改您的管道

顺便说一下,因为您使用的是 Web API,所以无需担心 HttpModule 和 HttpHandlers,因为它们的部分已在集成管道模式下的 Web 配置中更改。

UPDATE 我会建议使用 IHttpContext 并编写您自己的包装器,并为它们编写一个接口,例如 IHttpContext。然后你就拥有自己的 HttpContext 并将所有调用委托给它。然后在您的应用程序中,每个人都使用该界面。这解决了与 Microsoft 密封 类 交互的问题,因为您可以替换模拟或存根或其他任何内容。

检查此 link: http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx/