Web API中的自定义模型联编程序返回空对象

时间:2018-08-30 12:15:52

标签: c# asp.net asp.net-web-api

我在Web api中使用自定义模型绑定程序,但是我的模型值为null。

无法从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
    }

我的Model 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 :(得分:0)

您可以从自定义模型绑定程序内的HttpActionContext对象的Request对象获取值。我使用的示例如下。

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

请注意,这是针对您所遇到问题的快速而肮脏的解决方案。如果您愿意遵守规则,则应创建提供程序类以处理此类数据(主体内容),然后创建工厂类以正确参与整个过程。就像here中所述。