2

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")] 属性をポスト アクション パラメーターに追加しようとしましたが、うまくいかないようです。何か案は?

4

1 に答える 1