3

次のようなメソッドを使用した WebAPI 実装があります。

 public IEnumerable<Device> GetAllDevices()
 public Device GetDeviceById(int id)

IISまたはセルフホストで実行しているときに動作します。JSON オブジェクトを正しく返します。

ただし、最初の方法は、インメモリサーバーを使用しようとした単体テストで失敗します。

 System.InvalidOperationException : Cannot create and populate list type System.Linq.IQueryable`1[Test.Device].

これは、Newtonsoft.Json.Serialization アセンブリにまで及びます。テストの例は次のとおりです。

        [Test]
    public void GET_AskingForListOfDevices_GettingOk200WithListOfDevicesInJSON()
    {
        var client = new HttpClient(InMemoryServer);
        HttpRequestMessage request = CreateRequest("api/devices", "application/json", HttpMethod.Get);

        using (HttpResponseMessage response = client.SendAsync(request).Result)
        {
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
            Assert.NotNull(response.Content);
            Assert.AreEqual("application/json", response.Content.Headers.ContentType.MediaType);

            // next line throws exc
            var content = response.Content.ReadAsAsync<IQueryable<Device>>().Result;

            Assert.AreEqual(3, content.Count());
        }

        request.Dispose();
    }

どこを見ればいいですか?

更新
以下の例はそのエラーをスローしますが、それを回避する解決策を見つけました。IQueryable<> の代わりに IList<> を使用するだけです。それでも、なぜFiddlerで動作しているのかという質問には答えません。それは同じトリックを使用していますか?

4

1 に答える 1

2

私は同じ状況に直面しています。IQueryableは例外をスローしますが、IEnumerableを使用すると機能します。

于 2012-12-16T15:24:37.590 に答える