我在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";
}
答案 0 :(得分:0)
您可以从自定义模型绑定程序内的HttpActionContext对象的Request对象获取值。我使用的示例如下。
var bodyContent = actionContext.Request.Content.ReadAsStringAsync().Result;
请注意,这是针对您所遇到问题的快速而肮脏的解决方案。如果您愿意遵守规则,则应创建提供程序类以处理此类数据(主体内容),然后创建工厂类以正确参与整个过程。就像here中所述。