Контроллер мобильных приложений Azure возвращает 500, только если тип возвращаемого значения — IQueryable.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Контроллер мобильных приложений Azure возвращает 500, только если тип возвращаемого значения — IQueryable.

Сообщение Anonymous »

Моя серверная часть мобильного приложения Azure ведет себя странно.
Если действие моего контроллера возвращает IQueryable, а тип сущности имеет свойство навигации, оно возвращает 500.Простой пример:
Модель

Код: Выделить всё

public class ProductHierarchy : EntityData
{
public string Name { get; set; }

public string Description { get; set; }

public DateTime ValidFrom { get; set; }

public DateTime ValidTo { get; set; }

public string BrandId{ get; set; }
[ForeignKey("BrandId")]
public virtual Brand Brand { get; set; }

public ProductStatus Status { get; set; }

public int CreatedBy { get; set; }

public int ModifiedBy { get; set; }
}
Действие контроллера

Код: Выделить всё

[HttpGet]
[Route("api/ProductHierarchies/FromBrand/{brandId}")]
public IQueryable
 FromBrand(int brandId)
{
var hierarchies = Query().Where(hi => hi.Brand.OldBrandId ==brandId);
return hierarchies;
}
Когда я делаю запрос на это действие, когда решение работает на моем локальном компьютере, все работает нормально, однако когда я публикую решение в Azure, запускается действие FromBrand чтобы вернуть 500 с общим сообщением

"Произошла ошибка".

Кроме того, журналы Azure отображают следующее исключение, когда я делаю запрос на действие:

Код: Выделить всё

Detailed Error Information: Module
__DynamicModule_Microsoft.Owin.Host.SystemWeb.OwinHttpModule,Microsoft.Owin.Host .SystemWeb, Version=3.0.1.0,  Culture=neutral,PublicKeyToken=31bf3856ad364e35_19e9f0a3-023d-4d8b-83ef- 180a415e7921 Notification PreExecuteRequestHandler Handler ExtensionlessUrlHandler-Integrated-4.0 Error Code 0x00000000
Я нашел два изменения, которые помогут избежать ошибки:
  • Когда я украшаю клеймо< /code> модели с JsonIgnore, свойство Brand игнорируется и все работает нормально

    Когда Я меняю тип возвращаемого действия на List
    , сохраняя свойство Brand модели без атрибута JsonIgnore, тоже все работает нормально.
    < /li>
Это приводит меня к выводу, что проблема заключается в сериализации IQueryable, когда T имеет свойство с другим объектом как type.
Я не нашел никого, у кого была бы такая же проблема, поэтому я начал изучать свои пакеты nuget в поисках того, какой пакет работает или взаимодействует с процессом сериализации, и все мои подозрительные над Newtonsoft JSON и AutoMapper.
Кто-нибудь знает, как заглянуть под капот этих пакетов и определить причину проблемы?

Подробнее здесь: https://stackoverflow.com/questions/406 ... iqueryable
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»