簡體   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