public IModelBinder GetBinder(ModelBinderProviderContext context)
 {
     if (context.BindingInfo.BindingSource != null && context.BindingInfo.BindingSource.CanAcceptDataFrom(BodyOrDefaultBindingSource.BodyOrDefault))
     {
         var bodyBinder    = _bodyModelBinderProvider.GetBinder(context);
         var complexBinder = _complexTypeModelBinderProvider.GetBinder(context);
         return(new BodyOrDefaultModelBinder(bodyBinder, complexBinder));
     }
     return(null);
 }
예제 #2
0
        public IModelBinder GetBinder(ModelBinderProviderContext context)
        {
            IModelBinder modelBinder = defaultProvider.GetBinder(context);

            // default provider returns null when there is error.So for not null setting our binder
            if (modelBinder != null)
            {
                modelBinder = new NtBodyModelBinder(this.formatters, this.readerFactory);
            }

            return(modelBinder);
        }
    public void GetBinder_DoesNotThrowNullReferenceException()
    {
        // Arrange
        var context = new TestModelBinderProviderContext(typeof(Person));

        context.BindingInfo.BindingSource = BindingSource.Body;
        var formatter     = new TestInputFormatter();
        var formatterList = new List <IInputFormatter> {
            formatter
        };
        var provider = new BodyModelBinderProvider(formatterList, new TestHttpRequestStreamReaderFactory());

        // Act & Assert (does not throw)
        provider.GetBinder(context);
    }
        /// <summary>
        /// Creates a <see cref="T:Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder" /> based on <see cref="T:Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext" />.
        /// </summary>
        /// <param name="context">The <see cref="T:Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderProviderContext" />.</param>
        /// <returns>
        /// An <see cref="T:Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder" />.
        /// </returns>
        public IModelBinder?GetBinder(ModelBinderProviderContext context)
        {
            var bodyBinder    = _bodyModelBinderProvider.GetBinder(context);
            var complexBinder = _complexTypeModelBinderProvider.GetBinder(context);

            if (context.BindingInfo.BindingSource != null &&
                context.BindingInfo.BindingSource.CanAcceptDataFrom(BodyAndRouteBindingSource.BodyAndRoute))
            {
                return(new BodyAndRouteModelBinder(bodyBinder, complexBinder));
            }
            else
            {
                return(null);
            }
        }