[英]How to get data frombody in a custom ModelBinder?
我正在.NET Core 1.1(完整框架)应用程序中创建IModelBinder的自定义实现。
我有一个ActivityModel
类,它有一个接口属性:
public class ActivityModel
{
public int Id { get; set; }
public string Title { get; set; }
public int Type { get; set; }
public IActivityContent Content { get; set; } // marker interface
//more unimportant props
}
我们的想法是客户端可以使用Content
属性发送此对象,该属性可以是许多(当前为8,但可能正在增长)不同类中的一个。
这样我们就可以在API中有一个端点(对于每个CRUD操作),它可以处理所有这些不同类型的对象。
我正在实现一个ModelBinder来将客户端发送的对象转换为具体的类,这是我到目前为止所得到的:
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
var content = bindingContext.ValueProvider.GetValue("content");
return TaskCache.CompletedTask;
}
我目前正在尝试将Content对象变为变量,因此我可以更多地使用它,但ValueProvider只有RouteValueProvider和QueryStringValueProvider。 我如何在这里获取身体数据?
您可以在自定义模型绑定器FormValueProvider
控制器上下文与FormValueProvider
一起FormValueProvider
,并实现如下代码。
public Task BindModelAsync(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
bindingContext.ValueProvider = new FormValueProvider(controllerContext);
ActivityModel model = (ActivityModel)bindingContext.Model ?? new ActivityModel();
model.content = bindingContext.ValueProvider.GetValue("Content")
return TaskCache.CompletedTask;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.