gpt4 book ai didi

c# - MVC4 禁用对一个操作的验证

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:36 24 4
gpt4 key购买 nike

我正在处理一个 MVC4 项目,并且我有一个我希望禁用验证的操作,如下所示:

[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult AddNewItems(AddNewItemsModel model, string postType)
{ ... }

即使我设置了“ValidateInput(false)”,应用程序仍坚持要验证数据等。我已逐步执行代码,并且已确认正在调用此操作,但似乎属性被忽略。是否有一些简单的替代方法来完成这项工作(尤其是不需要另一层模型等的方法)?

最佳答案

经过大量研究后,我得出结论,验证已深入集成到默认模型绑定(bind)器中,并且 ValidateInput 属性基本上被 MVC 忽略。我会注意到在 web.config 中使用以下内容

<system.Web>
...
<httpRuntime requestValidationMode="2.0"/>

有时会补救这种情况,但有时不会。我注意到此设置与“ValidateInput”属性相结合只是间歇性地受到尊重,这使得它在 IMO 中毫无用处。最后我想出了一个 Action 过滤器,定义如下:

public class ClearModelErrorsAttribute : ActionFilterAttribute
{
// ---------------------------------------------------------------------------------------
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ModelStateDictionary msd = filterContext.Controller.ViewData.ModelState;
foreach (var item in msd.Values)
{
item.Errors.Clear();
}
}
}

您可以看到它正在强力删除所有错误(由于无法关闭验证),这适用于我的特定场景。显然,这不是最强大的解决方案(和 hack),但可以轻松修改它以适用于更具体的场景。

我的 Action 的新签名是这样的:

[HttpPost]
[ValidateAntiForgeryToken]
[ClearModelErrors]
public ActionResult AddNewItems(AddNewItemsModel model, string postType)
{ ... }

我已经从 web.config 中删除了上面提到的项目。

关于c# - MVC4 禁用对一个操作的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19526760/

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