OData コントローラーで定義された Post メソッドで必要とされるよりも多くのプロパティが json データに含まれている場合、OData コントローラーへのポスト要求に問題があります。いわゆる過剰投稿は MVC コントローラーで許可されるはずですが、OData コントローラーはそれを受け入れないようです。次のサンプルを確認してください。
私は単純なエンティティクラスを持っています:
public class Skill
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(100)]
public string Name { get; set; }
public SkillAffiliation ApplicableTo { get; set; }
}
- SkillAffiliation は列挙型です。
Post メソッドを使用した単純な OData コントローラーは次のようになります。
public IHttpActionResult Post(Skill skill)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_dbContext.Skills.Add(skill);
_dbContext.SaveChanges();
return Created(skill);
}
問題は、サード パーティの Web コントロール コレクションを使用し、OData コントローラーを使用するはずのコントロールが追加の json プロパティを追加することです。基本的に POST 要求は次のようになります。
{"Name":"TEST2","ApplicableTo":"Vehicle","ApplicableTo_input":"Vehicle"}
そのため、追加の ApplyableTo_input プロパティがあります。残念ながら、これによりモデルの検証エラーが発生します。ModelState.IsValid プロパティが false に設定され、「プロパティ 'ApplicableTo_input' はタイプ 'Mango.Models.Skill' に存在しません。タイプによって定義されたプロパティ名のみを使用してください。」というエラー メッセージが表示されます。この余分なプロパティを追加することは明らかに彼らのソリューションのバグであり、次のリリースで修正される予定ですが、その時が来るまで回避策を見つける必要があります.
[Bind(Exclude="ApplicableTo_input")] 属性をポスト アクション パラメーターに追加しようとしましたが、うまくいかないようです。何か案は?