gpt4 book ai didi

asp.net-mvc - 如何在 MVC 中省略/防止数据发送到 Controller 中的 POST 方法

转载 作者:行者123 更新时间:2023-12-01 03:48:45 24 4
gpt4 key购买 nike

我有一个使用模型的 View ,并且我正在使用该信息来创建表单。
我有三个可选的或可能不显示的表单步骤。

问题是这些隐藏部分与表单数据一起发布并破坏了业务逻辑。 (我无法控制业务逻辑)

那么有没有办法告诉框架不要传递某些部分或字段?也许 VIA 一个类或什么的?

我知道我可以根据需要使用 AJAX 发送某些部分,但站点规范是根据需要隐藏和显示它们。

最佳答案

尽管您可以在客户端执行此操作,但它不会阻止恶意 over-posting/mass assignment .

我建议阅读 6 Ways To Avoid Mass Assignment in ASP.NET MVC .

摘录:

仅指定包含的属性:

[HttpPost]
public ViewResult Edit([Bind(Include = "FirstName")] User user)
{
// ...
}

仅指定排除的属性:
[HttpPost]
public ViewResult Edit([Bind(Exclude = "IsAdmin")] User user)
{
// ...
}

使用 TryUpdateModel()
[HttpPost]
public ViewResult Edit()
{
var user = new User();
TryUpdateModel(user, includeProperties: new[] { "FirstName" });
// ...
}

使用接口(interface)
public interface IUserInputModel
{
string FirstName { get; set; }
}

public class User : IUserInputModel
{
public string FirstName { get; set; }
public bool IsAdmin { get; set; }
}

[HttpPost]
public ViewResult Edit()
{
var user = new User();
TryUpdateModel<IUserInputModel>(user);
// ...
}

使用 ReadOnlyAttribute
public class User 
{
public string FirstName { get; set; }

[ReadOnly(true)]
public bool IsAdmin { get; set; }
}

最后,最推荐的方法是使用真正的 ViewModel,而不是域模型:
public class UserInputViewModel
{
public string FirstName { get; set; }
}

关于asp.net-mvc - 如何在 MVC 中省略/防止数据发送到 Controller 中的 POST 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com