Любая коллекция вызывает тихий сбой с кодом состояния 500 в веб-API Asp.Net MVC 4 RC

Я совершенно потерялся в том, что может быть причиной этого.

У меня есть приложение ASP.Net MVC 4 RC и набор контроллеров веб-API. Я пытаюсь вернуть объект, содержащий набор дочерних объектов в IList. Всякий раз, когда я запрашиваю объект, я получаю ошибку 500 в браузере без заметного исключения в отладчике. Я попытался поместить обработчик Application_Error в global.asax, и там также не было обнаружено никаких ошибок.

Неважно, является ли список фактическим отношением к базе данных или просто жестко запрограммированным списком строк, в любом случае запрос не будет выполнен. Если я установлю список равным нулю, запрос будет успешным.

Если я удалю список, запрос завершится успешно, и я получу XML (или JSON) представление объекта.

Я также пробовал эту линию -

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

Чтобы зафиксировать фактическое исключение и ничего не вернуть.

Вот текущий объект

public class Authority : IEntity
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Address1 { get; set; }
    public virtual string Address2 { get; set; }
    public virtual string City { get; set; }
    public virtual string County { get; set; }
    public virtual string State { get; set; }
    public virtual string ContactPostalCode { get; set; }

    //public virtual IList<PostalCode> PostalCodes { get; set; }
    public virtual IList<string> RandomTrash { get; set; }

    public VPA()
    {
        //PostalCodes = new List<PostalCode>();
        RandomTrash = new List<string> {"foo"};
    }
}

Обратите внимание на закомментированную коллекцию PostalCodes — это реальное отношение базы данных «многие ко многим». Я закомментировал его и заменил фиктивной коллекцией «RandomTrash», и сбой, похоже, тот же.

У меня такое чувство, что это какой-то сбой сериализации, но я не могу понять, как этого избежать. Если это поможет, я использую NHibernate в качестве ORM.

Кто-нибудь видел это?


person JoshReedSchramm    schedule 02.07.2012    source источник
comment
запрос попадает в ваш контроллер? Или статус 500 возвращается до того, как он может добраться до вашего действия?   -  person Szilard Muzsi    schedule 03.07.2012
comment
проверьте тело ответа 500, там должна быть ошибка (отладчик ее не поднимет, ее проглотил Web API, но возвращает ошибку в теле ответа)   -  person Filip W    schedule 03.07.2012
comment
@SzilardMuzsi он попадает в контроллер, проходит до конца и иногда выходит из строя во время рендеринга.   -  person JoshReedSchramm    schedule 06.07.2012
comment
@FilipW нет тела. Совершенно пустой ответ.   -  person JoshReedSchramm    schedule 06.07.2012
comment
Вы пытались изменить IList на IEnumerable или IQueryable, чтобы увидеть, сохраняется ли ошибка?   -  person Szilard Muzsi    schedule 09.07.2012


Ответы (1)


Отвечая на мой собственный вопрос, если кто-то снова столкнется с этим.

Это закончилось Сериализацией, следующей за сеткой в ​​цикле. Чтобы исправить это, я добавил 2 атрибута к каждой ссылке на цикл в одной из моделей.

[IgnoreDataMember] Для сериализатора XML [JsonIgnore] Для сериализатора JSON.Net.

Я добавил их в класс PostalCode свойства IList.

Может быть лучшее решение. Недостатком этого является то, что он делает мой API односторонним. Я могу запросить Уполномоченный и получить все его почтовые индексы, но я не могу запросить почтовый индекс и получить все его Уполномоченные.

person JoshReedSchramm    schedule 10.07.2012
comment
Я обнаружил, что с момента использования версии выпуска Visual Studio 2012 эти тихие ошибки больше не молчат, и вы можете увидеть, что на самом деле пошло не так. - person Netricity; 28.08.2012