BodyOrDefaultModelBinderProvider.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Microsoft.AspNetCore.Mvc.ModelBinding;
  2. using Microsoft.AspNetCore.Mvc.ModelBinding.Binders;
  3. #if NET5_0_OR_GREATER
  4. using ComplexDataModelBinderProvider = Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexObjectModelBinderProvider;
  5. #else
  6. using ComplexDataModelBinderProvider = Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinderProvider;
  7. #endif
  8. namespace Masuit.Tools.AspNetCore.ModelBinder;
  9. public class BodyOrDefaultModelBinderProvider : IModelBinderProvider
  10. {
  11. private readonly BodyModelBinderProvider _bodyModelBinderProvider;
  12. private readonly ComplexDataModelBinderProvider _complexDataModelBinderProvider;
  13. public BodyOrDefaultModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider, ComplexDataModelBinderProvider complexDataModelBinderProvider)
  14. {
  15. _bodyModelBinderProvider = bodyModelBinderProvider;
  16. _complexDataModelBinderProvider = complexDataModelBinderProvider;
  17. }
  18. public IModelBinder GetBinder(ModelBinderProviderContext context)
  19. {
  20. if (context.BindingInfo.BindingSource != null && context.BindingInfo.BindingSource.CanAcceptDataFrom(BindingSource.Body))
  21. {
  22. var bodyBinder = _bodyModelBinderProvider.GetBinder(context);
  23. var complexBinder = _complexDataModelBinderProvider.GetBinder(context);
  24. return new BodyOrDefaultModelBinder(bodyBinder, complexBinder);
  25. }
  26. return null;
  27. }
  28. }