如何在控制器动作请求中使用继承?

时间:2017-11-03 09:10:57

标签: c# asp.net-core

使用ASP.NET CORE MVC在行动中使用继承的最简单方法是什么?

例如,我有3个班级:

public class Common
{
  public string CommonField { get; set; }
}

public class A : Common
{      
  public string FieldA { get; set; }
}

public class B : Common
{
  public string FieldB { get; set; }
}

我有控制器动作

IActionResult Post([FromBody] [ModelBinder(BinderType = typeof(MyCustomeBinder))] Common field)
{
  //process field here
}

在绑定之前替换field初始化(基于某些查询参数(例如,type=a))的最佳方法是什么? 我仍然需要从身体填充所有属性。

我已经有类似的东西:

public class MyCustomBinder : IModelBinder
{
  public Task BindModelAsync(ModelBindingContext bindingContext)
  {
    switch (bindingContext.HttpContext.Request.Headers["type"])
            {
                case "a":
                    bindingContext.Result = ModelBindingResult.Success(new A());
                    break;
                case "b":
                    bindingContext.Result = ModelBindingResult.Success(new B());
                    break;
                default:
            }

                return TaskCache.CompletedTask;
  }
}

这是正确的对象,但所有字段都是空的。

0 个答案:

没有答案