gpt4 book ai didi

asp.net - 使用 WebAPI 时重新验证模型(TryValidateModel 等效项)

转载 作者:行者123 更新时间:2023-12-02 20:54:22 26 4
gpt4 key购买 nike

使用普通 MVC,我可以使用 TryValidateModel 重新验证我的模型。 TryValidateModel方法似乎不适用于WebAPI。使用 WebAPI 时如何重新验证我的模型?

最佳答案

我知道这个问题已经有一段时间了,但问题仍然存在。因此我想我应该分享我对这个问题的解决方案。我决定自己实现 TryValidateModel(对象模型),基于 System.Web.Mvc.Controller.cs 中的实现

问题是mvc的TryValidateModel内部使用了自己的HttpContext和ModelState。如果你去比较一下两者,它们非常相似......

为了能够使用我们自己的 HttpContext,存在一个 HttpContextWrapper 可以用于此目的。
由于我们必须清除模型状态,因此使用不同类型的 ModelState 并不重要,只要我们得到所需的结果,因此我从正确的类型创建一个新的 ModelState 对象...
我确实将错误添加到 Controller 的 ModelState 中,而不是添加到新创建的 ModelState 的模型状态中,这似乎对我来说效果很好:)
这是我的代码,我刚刚添加到 Controller 中...
不要忘记导入库...

using System.Web.ModelBinding;

protected internal bool TryValidateModel(object model)
{
return TryValidateModel(model, null /* prefix */);
}

protected internal bool TryValidateModel(object model, string prefix)
{
if (model == null)
{
throw new ArgumentNullException("model");
}

ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
var t = new ModelBindingExecutionContext(new HttpContextWrapper(HttpContext.Current), new System.Web.ModelBinding.ModelStateDictionary());

foreach (ModelValidationResult validationResult in ModelValidator.GetModelValidator(metadata, t).Validate(null))
{
ModelState.AddModelError(validationResult.MemberName, validationResult.Message);
}

return ModelState.IsValid;
}

关于asp.net - 使用 WebAPI 时重新验证模型(TryValidateModel 等效项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12906359/

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