Проблема десериализации HttpContent.ReadAsAsync - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть небольшая служба REST, которую я запускаю через HttpSelfHostServer (ASP.Net WebApi Beta), но у меня возникают некоторые проблемы с десериализацией некоторых данных, которые отправляются на сервер. Сигнатура метода выглядит следующим образом:

public HttpResponseMessage PostServers(ServerType serverType)

Метод вызывается нормально, однако при десериализации данных используется следующий код:

var servers = Request.Content.ReadAsAsync<List<ServerZoneInformation>>().Result;
...

IOException генерируется с сообщением «Не удается получить доступ к закрытому потоку.». Та же ошибка возникает при попытке десериализации кода через

XmlSerializer serializer = new XmlSerializer(typeof(List<ServerZoneInformation>));
var servers = (List<ServerZoneInformation>)serializer.Deserialize(Request.Content.ReadAsStreamAsync().Result);
... 

Однако я могу заставить метод работать, если я использую следующее:

XmlSerializer serializer = new XmlSerializer(typeof(List<ServerZoneInformation>));
string data = Request.Content.ReadAsStringAsync().Result;
using (MemoryStream ms = new MemoryStream(UTF8Encoding.UTF8.GetBytes(data)))
{
   var servers = (List<ServerZoneInformation>)serializer.Deserialize(ms);
   ...
}

Я что-то не так делаю в первых двух случаях, или это ошибка в WebApi?

Примечание: я еще не пробовал это, когда хостинг через IIS.

Приветствия

Ben

1 Ответ

2 голосов
/ 03 апреля 2012

После разговора с MS на веб-сайте ASP.Net обнаружена ошибка в текущей бета-версии WebApi, дополнительная информация здесь . Эта проблема должна быть исправлена ​​в следующей версии WebApi.

...