ASP.NET MVC 6中的TryValidateModel

伊娃(Ivaylo Kenov)

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

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

我已经在MVC源代码中搜索了好几个小时,没有运气。我试图在控制器上设置AddMvc()服务-对我不起作用。我什至尝试了位于这里的测试控制器类型(GetController私有方法),但是没有运气。这是我当前正在使用的来源:

        // 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);

任何帮助将不胜感激。先感谢您!

伊娃(Ivaylo Kenov)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC 6(ASP.NET Core或ASP.NET5)中的友好URL

来自分类Dev

ASP.NET Core / MVC6中的WebTelemetryInitializerBase

来自分类Dev

在ASP.NET 5(MVC6)中请求BinaryRead

来自分类Dev

ASP.Net MVC 6中的依赖项注入(DI)

来自分类Dev

Asp.Net 5(Mvc 6)中的Custom ClaimsPrincipal

来自分类Dev

在ASP.Net 5 MVC 6中添加.css

来自分类Dev

ASP.NET MVC 6中的配置转换

来自分类Dev

ASP.NET 5 MVC 6中的Google OAuth

来自分类Dev

在ASP.Net MVC 6中使用库

来自分类Dev

ASP.Net MVC 6中的全局错误记录

来自分类Dev

如何在ASP NET MVC 6中更新模型?

来自分类Dev

ASP.NET 5 MVC 6中的本地化

来自分类Dev

清除MVC 6 / ASP.NET 5中的输出缓存

来自分类Dev

在ASP.NET MVC 6中创建API代理

来自分类Dev

ASP.NET 5 MVC 6中的web.config

来自分类Dev

在ASP.NET MVC 6中上传文件

来自分类Dev

在asp.net中的Metro ui CSS 5 MVC 6

来自分类Dev

处理ASP.NET 5 MVC 6中的密码更改

来自分类Dev

什么是ASP.NET MVC 6功能?

来自分类Dev

ASP.NET 在 mvc 6 项目中

来自分类Dev

与ASP.NET MVC中的ASP.NET等效

来自分类Dev

如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

来自分类Dev

ASP.Net MVC 5中的Cookie

来自分类Dev

ASP.NET MVC中的可选HttpPostedFileBase

来自分类Dev

ASP .NET MVC 5中的异步任务

来自分类Dev

ViewModel中的ASP.NET MVC SelectList

来自分类Dev

ASP.NET MVC中的异步方法

来自分类Dev

ASP.NET MVC 5中的ClaimsIdentity

来自分类Dev

ASP.NET MVC中的区域路由