gpt4 book ai didi

c# - ASP.NET MVC 6 中的 TryValidateModel

转载 作者:行者123 更新时间:2023-11-30 18:22:39 25 4
gpt4 key购买 nike

我正在编写类似这样的测试框架:https://github.com/ivaylokenov/MyTested.WebApi但对于 ASP.NET 5 MVC 6(使用 6.0.0-beta8)。

我很难尝试调用 Controller 的 TryValidateModel 来验证给定对象的 ModelState。它在 ASP.NET Web API 2 Controller 上没有任何痛苦。我应该在 Controller 类上实例化哪些属性,以便该方法使用默认约定进行验证。无论模型和属性特性如何,我都会收到空引用异常或有效模型状态。

我一直在 MVC 中搜索几个小时的源代码没有运气。我试图在 Controller 上设置 AddMvc() 服务 - 对我不起作用。我什至尝试了位于 HERE 的测试 Controller 类型( GetController 私有(private)方法)但没有运气。这是我目前使用的来源:

        // TODO: for real this is how we configure controller?
var detailsProviders = new IMetadataDetailsProvider[]
{
new DefaultBindingMetadataProvider(new ModelBindingMessageProvider
{
MissingBindRequiredValueAccessor = name => $"A value for the '{ name }' property was not provided.",
MissingKeyOrValueAccessor = () => $"A value is required.",
ValueMustNotBeNullAccessor = value => $"The value '{ value }' is invalid.",
}),
new DefaultValidationMetadataProvider(),
new DataAnnotationsMetadataProvider(),
// new DataMemberRequiredBindingMetadataProvider(), TODO: not available in version 8 but it is in the source code of MVC
};

var compositeDetailsProvider = new DefaultCompositeMetadataDetailsProvider(detailsProviders);

var metadataProvider = new DefaultModelMetadataProvider(compositeDetailsProvider);
var httpContext = new DefaultHttpContext();
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());

var viewData = new ViewDataDictionary(metadataProvider, new ModelStateDictionary());
var tempData = new TempDataDictionary(new HttpContextAccessor(), new SessionStateTempDataProvider());

var bindingContext = new ActionBindingContext()
{
ModelBinder = new GenericModelBinder(),
ValueProvider = new CompositeValueProvider(new IValueProvider[0]),
InputFormatters = new List<IInputFormatter>(),
ValidatorProvider = new DataAnnotationsModelValidatorProvider(
options: null,
stringLocalizerFactory: null)
};

this.Controller.ActionContext = actionContext;
this.Controller.BindingContext = bindingContext;
this.Controller.MetadataProvider = metadataProvider;
this.Controller.ViewData = viewData;
this.Controller.TempData = tempData;
this.Controller.ObjectValidator = new DefaultObjectValidator(new IExcludeTypeValidationFilter[0], metadataProvider);

任何帮助将不胜感激。提前致谢!

最佳答案

事实证明它实际上是 ASP.NET MVC 中的一个错误,团队将在下一个 RC2 版本中修复它:https://github.com/aspnet/Mvc/issues/3586

关于c# - ASP.NET MVC 6 中的 TryValidateModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754314/

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