2016-12-07 101 views
2

我正在使用VS 2015與.Net 4.6.1。我正在嘗試爲代碼編寫集成測試,但它給了我上面的錯誤。我無法擺弄我的頭。這種方法是在Global.asax中集成測試 - 此操作需要IIS集成管道模式

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特定的標頭的條件和錯誤是,任何想法?爲什麼它需要IIS進行測試?

此操作需要IIS集成的管線模式

enter image description here

+0

什麼是你的管道? –

+0

@PouyaSamie我正在使用IIsExpress,但我可以將它部署在完整的IIs上,並檢查它是否修復了錯誤。 –

回答

0

經典模式(僅在IIS6和下面模式)是其中僅IIS與ISAPI擴展工作的模式

集成模式是IIS7中的一種新模式,其中IIS管道與ASP.NET請求管道

緊密集成(即完全相同) 0

選擇在解決方案資源管理器,按F4 Web應用程序項目節點,並改變你的管道enter image description here

順便說一句,因爲你正在使用的Web API有沒必要擔心的HttpModule和HttpHandlers的,因爲他們的部分已在集成管道模式下的web配置中更改。

UPDATE我會建議使用IHttpContext併爲他們編寫自己的包裝,比如說說IHttpContext。然後您只需擁有自己的HttpContext並將所有調用委託給它。然後在你的應用程序中,每個人都使用該界面這解決了您與微軟密封類交互的問題,因爲您可以替代模擬或存根或其他任何東西。

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

+0

我正在使用IISExpress,是否需要使用完整的IIS?以及一切都是本地主機,所以我可以嘗試在IIS中創建一個網站。 –

+0

沒有隻是表達iis會做...改變管道,你應該很好 –

+0

實際上,我剛剛證實我確實已經集成了管道屬性,匿名被禁用並啓用了窗口。 –