Ale*_*ler 6 c# asp.net-mvc model-binding asp.net-core
我正在 .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
}
Run Code Online (Sandbox Code Playgroud)
这个想法是客户端可以发送带有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;
}
Run Code Online (Sandbox Code Playgroud)
我目前只是试图将 Content 对象放入一个变量中,以便我可以更多地使用它,但 ValueProvider 只有 RouteValueProvider 和 QueryStringValueProvider。我如何在这里获取身体数据?
您可以在自定义模型绑定器中使用控制器上下文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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |