返回List<>时,GET请求不起作用包含物品

时间:2017-10-30 13:38:19

标签: c# asp.net rest long-polling

我在使用.NET REST应用程序时遇到了一个奇怪的问题。我可以很好地做出各种各样的请求,但是如果返回的List为空,这个长轮询-GET中断请求只会成功。举例说明:

public async Task<List<Person>> UpdateRequest()
{
    try
    {
        await LongPolling(10000);
    }
    catch (TaskCanceledException)
    {
        Console.WriteLine("Long polling GET was cancelled.");
        var fooList = new List<Person>();
        fooList.Add(new Person("tim", "bar")); // <- adding this line breaks the request

        return fooList;
    }

    return null; //Timeout, aka nothing happened
}

.Add()行不存在时,调用mysite.com/update(以及随后中断长GET)返回

<ArrayOfPerson xmlns="http://schemas.datacontract.org/stuff" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>

这是预期的,但当List包含项目时,我会立即得到“无法得到答复”。打印Console.Writeline。我误解了List在C#中的工作方式吗?或者我可能错误的返回类型Task<List<Person>>

编辑:尝试使用普通数组:Person[0]是唯一可行的,更大的数组“无法获得响应”,无论其中是否有项目。

1 个答案:

答案 0 :(得分:0)

显然罪魁祸首不是Task<>。非异步方法(List<Person>作为返回类型)具有相同的问题。客户端根本不知道如何将非空的自定义对象列表映射到响应,事后才能理解。

我最终在List方法中明确地将UpdateRequest()映射到XML,从而导致Task<XElement>成为新的返回类型。