Ограничьте, какие свойства связаны, используя BindProperty для класса - PullRequest
0 голосов
/ 15 октября 2019
<form method="post">
    <input asp-for="Test.Code" />
    <input asp-for="Test.Hash" disabled="disabled" />
</form>

public class Test
{
    public string Id { get; set; }
    public string Code { get; set; }
    public string Hash { get; set; }
}


public class CreateModel : PageModel
{
    [BindProperty]
    public Test { get; set; }
}

Допустим, я хочу привязать только код свойства, пользователь может удалить отключенный из хеша в инструментах браузера. Как я могу сказать это на стороне сервера, чтобы принимать только определенные свойства?

1 Ответ

3 голосов
/ 15 октября 2019

То, на что вы ссылаетесь, называется чрезмерной публикацией.

Предотвращение массового назначения или публикации в ASP.NET Core

Выдержка:

  1. Использование BindAttribute для метода действия
public IActionResult Safe1([Bind(nameof(UserModel.Name))] UserModel model)
{
    return View("Index", model);
}
Используйте [Редактируемый] или [BindNever] на модели
public class UserModel
{
    [MaxLength(200)]
    [Display(Name = "Full name")]
    [Required]
    public string Name { get; set; }

    [Editable(false)]
    public bool IsAdmin { get; set; }
}
Используйте две разные модели
public class BindingModel
{
    [MaxLength(200)]
    [Display(Name = "Full name")]
    [Required]
    public string Name { get; set; }
}

public class UserModel
{
    [MaxLength(200)]
    [Display(Name = "Full name")]
    [Required]
    public string Name { get; set; }

    [Editable(false)]
    public bool IsAdmin { get; set; }
}
Используйте базовый класс
public class BindingModel
{
    [MaxLength(200)]
    [Display(Name = "Full name")]
    [Required]
    public string Name { get; set; }
}

public class UserModel : BindingModel
{
    public bool IsAdmin { get; set; }
}
Использовать ModelMetadataTypeAttribute
[ModelMetadataType(typeof(UserModel))]
public class BindingModel
{
    public string Name { get; set; }
}

public class UserModel
{
    [MaxLength(200)]
    [Display(Name = "Full name")]
    [Required]
    public string Name { get; set; }

    public bool IsAdmin { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...