- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用普通 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/
我有一个 Controller ,它使用模型绑定(bind)从表单中检索数据。我需要在验证之前对模型进行一些编辑,所以我按照文档建议使用 TryValidateModel。但是由于某种原因,即使“用户
我有一个需要模型列表的操作。我想同时验证每个模型与整个模型集合。我正在尝试使用 TryValidateModel,但似乎如果我的任何一个模型无效,那么所有模型都无效。我的表单显示 5 个 Survey
使用普通 MVC,我可以使用 TryValidateModel 重新验证我的模型。 TryValidateModel方法似乎不适用于WebAPI。使用 WebAPI 时如何重新验证我的模型? 最佳答案
我正在编写类似这样的测试框架:https://github.com/ivaylokenov/MyTested.WebApi但对于 ASP.NET 5 MVC 6(使用 6.0.0-beta8)。 我很
我有一个两步表单流程,其中第一组数据存储在 session 中。 [IsMp4File] [Required(ErrorMessage = "* Please select a video to up
我正在尝试为 Asp.Net Core Web API 的 ModelState 验证编写单元测试。 我读到,最好的方法是使用 TryValidateModel 函数。但是,每次我运行单元测试时,它都
我是一名优秀的程序员,十分优秀!