首页 > Windows开发 > 详细

使用WebAPI时重新验证模型(TryValidateModel等效)

时间:2021-04-22 15:13:42      阅读:16      评论:0      收藏:0      [点我收藏+]

如何在使用WebAPI时重新验证我的模型?

我决定自己实现TryValidateModel(对象模型),基于System.Web.Mvc.Controller.cs中的实现
问题是mvc的TryValidateModel内部使用了自己的HttpContext和ModelState.如果你去和两者相媲美,它们非常相似……

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

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;
    }

使用WebAPI时重新验证模型(TryValidateModel等效)

原文:https://www.cnblogs.com/kittyajoke/p/14689152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!