当返回的 List<> 包含项目时,GET 请求不起作用
GET request doesn't work when returned List<> contains items
我在处理 .NET REST 应用程序时 运行 遇到了一个奇怪的问题。我可以很好地发出各种请求,但是这个长轮询 GET 中断请求只有在 returned 列表为空时才会成功。举例说明:
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) returns
<ArrayOfPerson xmlns="http://schemas.datacontract.org/stuff" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
这是预期的,但是当 List
包含项目时,我立即得到 "Could not get a response"。 Console.Writeline 被打印出来。我是否误解了 List
在 C# 中的工作方式?或者也许我在 return 类型 Task<List<Person>>
?
上出错了
编辑:尝试使用普通数组:Person[0]
是唯一可行的方法,更大的数组 "Could not get a response" 不管其中是否有项目。
显然罪魁祸首不是 Task<>
。非异步方法(List<Person>
as return 类型)有同样的问题。客户端根本不知道如何将自定义对象的非空列表映射到响应,事后看来这是可以理解的。
我最终在 UpdateRequest()
方法中明确地将 List
映射到 XML,导致 Task<XElement>
成为新的 return 类型。
我在处理 .NET REST 应用程序时 运行 遇到了一个奇怪的问题。我可以很好地发出各种请求,但是这个长轮询 GET 中断请求只有在 returned 列表为空时才会成功。举例说明:
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) returns
<ArrayOfPerson xmlns="http://schemas.datacontract.org/stuff" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
这是预期的,但是当 List
包含项目时,我立即得到 "Could not get a response"。 Console.Writeline 被打印出来。我是否误解了 List
在 C# 中的工作方式?或者也许我在 return 类型 Task<List<Person>>
?
编辑:尝试使用普通数组:Person[0]
是唯一可行的方法,更大的数组 "Could not get a response" 不管其中是否有项目。
显然罪魁祸首不是 Task<>
。非异步方法(List<Person>
as return 类型)有同样的问题。客户端根本不知道如何将自定义对象的非空列表映射到响应,事后看来这是可以理解的。
我最终在 UpdateRequest()
方法中明确地将 List
映射到 XML,导致 Task<XElement>
成为新的 return 类型。