2017-07-22 25 views
2

私はasp.net mvcを学習していて、いつBindAttributeを使用する必要があるのだろうかと思います。BindAttributeはいつ使用しますか?

最初のケース(Bindを使用):

モデル:

public class Book 
{ 
    public string Id { get; set; } 

    public string Name { get; set; } 

    public string Author { get; set; } 
} 

コントローラ:Idは、サーバー側で生成される

public IActionResult Create([Bind(nameof(Book.Name), nameof(Book.Author))] Book model) 
{ 
    return Ok(); 
} 

ブック。だから、クライアント側はそれとは何の関係もなく、すべての動作を変更しようとする/ IDができないようにする。

Bindを使用していない)は、第2のケース:

モデル:

public class BookViewModel 
{ 
    public string Name { get; set; } 

    public string Author { get; set; } 
} 

コントローラー:第2のモデルはIdプロパティが含まれていないので

public IActionResult Create(BookViewModel model) 
{ 
    return Ok(); 
} 

、我々はしないでください作成や変更を防止する必要があります。

私は2番目を好む。モデルの管理は簡単です。

ケースがありますmustBind属性がありますか?

答えて

1

複雑なプロパティのいくつかのプロパティがサーバーで受信されたときに無視されるようにしたい場合は、bindを使用します。それは安全のためか他の理由のためかもしれません。

このアクションが実行されると、MVCモデルバインダーは要求パラメータを使用して、すでに知っているようにuserパラメータのプロパティを設定します。ただし、Bind属性は、モデルバインダーにという名前のプロパティを指定した場合にのみ指定します。

この場合、プロパティには、UsernameFullNameEmailのプロパティのみが入力されます。他のすべては無視されます。

詳細はこちらをご覧ください:http://ittecture.wordpress.com/2009/05/01/tip-of-the-day-199-asp-net-mvc-defining-model-binding-explicitly/

をあなただけがExcludeプロパティを使用することができます結合から1 parametarを無視する必要があるときに、状況をお持ちの場合:

[Exclude] 
public Entity Name {get; set;} 
+0

ありがとう!私はそれを使用しないでください?モデルに約10のプロパティ(9/10のプロパティが必要)が含まれていると、コードが読みにくく見えるようになると思います。 '[Bind(nameof(MyModel.Property1)、nameof(MyModel.Property2)、nameof(MyModel.Property3)、nameof(MyModel.Property4)..........)] ' – Vayne

+0

「9/10状況 "除外プロパティを使用することができます。私は答えを更新しました。 –

+0

asp.netコアは 'Exclude'属性をサポートしていませんが、私はそれを覚えています。ありがとう! – Vayne

1

バインドは、セキュリティと不正を高めるために使用されますサーバに投稿されるデータ。モデルクラスでは、コンテンツプロパティも持っているとします。コンテンツプロパティが将来必要でない場合それから、そのプロパティのすべての発生を取り除くことは難しいでしょう。ここでは、この

[Bind(exclude="content")] 

のようなバインドプロパティを使用するかが唯一の選択したプロパティをバインドすることができますが、それ here

についての詳細を学ぶことができ、この

public ActionResult create([Bind(Include = "Name,Author")] Modelclass modelclass) 
{ 
//Do something here 
} 

などのプロパティを含むことにより、サーバー上に掲載します

2番目の方法は、すべてのプロパティを書き込んでバインドするのに適していますが、ロールプロパティまたはIsAdminプロパティを持つモデルのようにユーザーをバインドしなければならない状況があります。 IsAdminまたはrolesプロパティーをサーバーに追加します。それはどこにバインド属性を使用することができます

関連する問題