Пользовательский связыватель модели возвращает нулевой объект в веб-интерфейсе - PullRequest
0 голосов
/ 30 августа 2018

Я использую привязку пользовательской модели в веб-интерфейсе, но значение моей модели равно нулю.

Невозможно получить значение из ValueProvider.

Пожалуйста, посмотрите на мой код ниже.

bindingContext.ValueProvider.GetValue("Report") is null

Вот мой код.

public class TestReportDto
    {
        public ReportFormatType ExportFormat { get; set; }
        public string Report { get; set; }
        public Dictionary<string, object> ParameterValues { get; set; }
    }

    public enum ReportFormatType
    {
        PDF,
        XLS
    }

Класс моей модели Binder.

public class TestModelBinder : IModelBinder
    {
        public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
        {
            var testReportDto = new TestReportDto();
            bool isSuccess = true;

            if (bindingContext.ValueProvider.GetValue("Report") != null)
            {
                testReportDto.Report = Convert.ToString(bindingContext.ValueProvider.GetValue("Report").RawValue);
            }
            else
            {
                isSuccess = false;
                bindingContext.ModelState.AddModelError("request.Report", "Report");
            }

            bindingContext.Model = testReportDto;
            return isSuccess;
        }
    }

Код API:

public async Task<string> Post([ModelBinder(typeof(TestModelBinder))]TestReportDto request)
        {

            return "Hello";
        }

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете получить значение из объекта Request объекта HttpActionContext внутри привязки пользовательской модели. Пример, который я использовал ниже.

var bodyContent = actionContext.Request.Content.ReadAsStringAsync().Result;

Обратите внимание, что это быстрое и грязное решение проблемы, с которой вы столкнулись. Если вы играете по правилам, вам следует создать класс провайдера для обработки таких данных (содержание тела), а затем класс фабрики, чтобы правильно задействовать весь процесс. Как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...