2016-12-07 7 views
2

.NET 4.6.1でVS 2015を使用しています。私はコードの統合テストを書こうとしていますが、それは私に上記のエラーを与えています。私は頭がおかしい。この方法は、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が必要なのはなぜですか?

この操作は必要と統合パイプラインモード

enter image description here

+0

あなたのパイプラインは何ですか? –

+0

@PouyaSamie IIsExpressを使用していますが、フルIIで展開してエラーを修正できるかどうかを確認できます。 –

答えて

0

クラシックモード(以下IIS6との唯一のモード)のみISAPI拡張

統合で動作するIISモードでIIS一方、IIS7では、IISパイプラインがASP.NET要求パイプラインと密接に統合されている(つまり、まったく同じ)IIS7の新しいモードです。

ソリューションエクスプローラとプレスF4でWebアプリケーションプロジェクトのノードを選択し、ところで、あなたのパイプラインenter image description here

を変更する、あなたは、Web APIを使用しているので、その部分がされているので、HttpModuleをとのhttpHandlersを心配する必要はありません統合パイプラインモードでweb configureで変更されました。

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

いいえ、私はパイプラインを変更してください。 –

+0

実際に私は実際にプロパティにパイプラインを統合していることを確認しました。匿名は無効になっており、ウィンドウは有効です。 –

関連する問題