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