0

カスタムの単体テストをしようとしていますApiController。私のカスタム コントローラーInitializeでは、認証ヘッダーを評価するメソッドをオーバーライドします。

だから私の問題は、利用可能なリクエストヘッダーが2つあるということです。

protected override void Initialize(HttpControllerContext controllerContext)
{
    base.Initialize(controllerContext);
    // Headers 1
    var headersOne = controllerContext.Request.Headers;
    // Headers 2
    var headersTwo = HttpContext.Current.Request.Headers;
}

しかし、これは問題そのものではありません。問題は、ヘッダーが一致しないことです。したがって、生産的な運用のために:どこで認証ヘッダーを探す必要がありますか。そして、テストシナリオの認証ヘッダーをどこに適用する必要がありますか。

現時点では、認証ヘッダーをに適用しますcontrollerContext:

var fakeControllerContext = new HttpControllerContext
{
    Request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost/api/test"),
        Headers =
        {
            { "Authorization", "Fake Authorization-Header"}
        }
    }
};

しかし、私がすでに言ったように。ヘッダーは後で で使用できなくなりますHttpContext.Current.Request.Headers。助けてもらえますか?残念ながら、どのコンテキストがどの目的を満たしているのか正確にはわかりません。

4

1 に答える 1

0

私が今見つけたのは、それHttpContext.Currentがもう使用されるべきではない古い実装であるということです。コンテンツを制御して単体テストを行うことはできないためです。

HttpControllerContextは新しい実装です。また、その内容は交換可能です。メソッド initialize に送信された controllerContext は、ControllerContext-Property で使用できます。したがって、これを使用する必要があります。

最初の回答でこれを見つけました: Testing a Web API method that uses HttpContext.Current.Request.Files? おかげで: Martin Liversage

于 2015-07-16T11:56:51.720 に答える