繁体   English   中英

如何在自定义ModelBinder中从body获取数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM