1

Web APIコントローラーのビジュアルスタジオで自動統合テストを行っています。テストで次のコードを取得しました。

var url = serverAddress + "/api/PostalCodes?postalCode=" + postalCodeToFind;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("accept", "application/json");
HttpResponseMessage response = client.GetAsync(url).Result;
response.EnsureSuccessStatusCode();

次のエラーが表示されます。

System.Net.Http.HttpRequestException: 応答ステータス コードが成功を示していません: 404 (見つかりません)。

使用されるセルフホスト サーバー:

private const string serverAddress = "http://localhost:8080";

        [TestInitialize]
        public void Initialize()
        {
            config = new HttpSelfHostConfiguration(serverAddress);

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.MaxReceivedMessageSize = 2024 * 2024;
            config.MaxBufferSize = 2024 * 2024;

            server = new HttpSelfHostServer(config);
            server.OpenAsync().Wait();
        }

奇妙な点は、IIS に Web API コントローラーがある場合、同じ URL が正常に機能し、値を返すことです。また、同じ URL で投稿を行っていますが (postalCodeToFind クエリ パラメーターなしで)、それもうまく機能します...

手がかりはありますか?

4

1 に答える 1

0

コントローラーはテストによってロードされていません。

カスタム リゾルバーを持っていますか、それとも焼き付けられたリゾルバーがそれを拾うことを期待していますか?

カスタム リゾルバーを使用している (つまり、DefaultAssembliesResolver から継承している) 場合は、コントローラーを含むライブラリが読み込まれていることを確認してください。

焼き付けられたリゾルバーがそれを取得することを期待している場合、コントローラーを含むライブラリーは、テストの実行元のディレクトリーにある必要があります。

于 2013-09-24T13:29:07.287 に答える