【问题标题】:Avoiding mass assignment MVC避免批量分配 MVC
【发布时间】:2015-02-12 10:07:32
【问题描述】:

我是一名初学者,遇到了一个问题,如何避免批量分配,目前我只有两个非常小的实体 Author 和 Book。

public class Book
{
    public Book()
    {
        Authors = new List<Author>();
    }
    public int? BookId { get; set; }
    public string Title { get; set; }
    public IList<Author> Authors { get; set; }
}

当我更新一本书时,我想避免分配(bookInDb.Title = book.Title):

public void UpdateBook(Book book)
    {
        var bookInDb = GetBook(book.BookId.Value);

        bookInDb.Title = book.Title; // I want this logic to be replaced in more elegent way

        var authorsInDb = bookInDb.Authors.Select(f => f.AuthorId).ToList();

        var editedAuthors = book.Authors.Select(f => f.AuthorId).ToList();
        var authorToAdd = GetAuthorsToAdd(authorsInDb, editedAuthors);

        authorToAdd.ToList().ForEach(x=>bookInDb.Authors.Add(x));

        var authorsIdToRemove = authorsInDb.Except(editedAuthors);
        var authorsToRemove = AuthorsToRemove(bookInDb.Authors, authorsIdToRemove);

        authorsToRemove.ToList().ForEach(x => bookInDb.Authors.Remove(x));

        _dbContext.SaveChanges();
    }

现在这不是问题,但如果我有更多的领域,我应该这样还是有更简单的方法? 感谢您的回答。

【问题讨论】:

    标签: c# model-view-controller


    【解决方案1】:

    UpdateBook([Bind(Exclude = "Title")] Book book)

    更多信息和更多方法here

    【讨论】:

      【解决方案2】:

      如果有人在 C# .net 核心 API 中遇到此问题,请在控制器中添加 [Bind] 或 [Bind("prop1","prop2")] 而不是 [FromBody]。

      参考-https://softdevpractice.com/blog/asp-net-core-how-to-prevent-mass-assignment-attacks/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 2021-04-24
        • 2018-05-29
        相关资源
        最近更新 更多