私のAzureモバイルアプリケーションのバックエンドで奇妙な動作が発生しています。 私のコントローラのアクションがIQueryable<T>
を返し、エンティティタイプは、ナビゲーションプロパティを持っている場合、それは500Azure MobileApp Controllerは、戻り値の型が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<ProductHierarchy> FromBrand(int brandId)
{
var hierarchies = Query().Where(hi => hi.Brand.OldBrandId ==brandId);
return hierarchies;
}
私が解決策は私のローカルマシン上で実行されていると、すべてが正常に動作します私は紺碧の解決策を公開するときに、このアクションにリクエスト柯、しかし、FromBrand
アクションはまた、一般的なメッセージ
"An error has occurred."
で、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
私はエラーを回避することができる2つの変更を見つけた:私はのBrand
プロパティを飾るとき
1)のモデルJsonIgnore
は、Brand
プロパティは無視され、すべては私がJsonIgnore
atributeなしモデルのBrand
財産を維持、List<ProductHierarchy>
にアクションの戻り値の型を変更すると、すべてがあまりにも正常に動作
2)正常に動作しています。
これは、タイプに別のエンティティを持つプロパティがある場合に、この問題がシリアル化されて発生していると結論づけます。IQueryable<T>
同じ問題がある人が見つかりませんでしたので、シリアルナンバープロセスでWorksまたはInteractパッケージを探しているナゲットパッケージを調べ始めました。疑わしいのはNewtonsoft JsonとAutoMapperです。
誰もがこれらのパッケージのフードを見て、問題の原因を特定する方法についていくつかの手掛かりを持っていますか?
おかげエイドリアン、私はあなたが言及した2つの参照に見てみましょうそれが役に立ったら結果を返してください。 –
エイドリアン、材料のおかげで、それはパスを明らかにした。 私はエンティティから関係を取り除きます。なぜなら、私はそれをモバイル側で必要としないし、エンティティをフラットに保つからです。 –