C# ASP.NET核心Web API-当类的成员是接口时,参数绑定不起作用

C# ASP.NET核心Web API-当类的成员是接口时,参数绑定不起作用,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,我的Web API控制器中有一个方法: [HttpPost] public void Post([FromBody]Registration registration) { // omitted } 我可以调用该方法,但参数始终为null。注册类别定义为: public class Registration { public int Id { get; set; } public IStudent Student { get; set; } } public inte

我的Web API控制器中有一个方法:

[HttpPost]
public void Post([FromBody]Registration registration)
{
    // omitted
}
我可以调用该方法,但参数始终为null。注册类别定义为:

public class Registration
{
    public int Id { get; set; }
    public IStudent Student { get; set; }
}

public interface IStudent
{
    string FirstName { get; set; }
    string LastName { get; set; }
}

public class Student : IStudent
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
似乎注册作为接口的学生属性是导致这种情况的原因,因为当我尝试用具体类型替换它时,它绑定得很好


使用接口时如何进行绑定?另外,在我的原始Web API上,我接受类型为Registration的参数。也可以将其作为接口(IRegistration)并仍然绑定吗?

也可以,但您必须进行一些额外的编码。此处举例说明:


您可能不想执行这个额外的代码。它可能会有马车。您可以创建POCO/DTO,并使用Automapper将您的业务域模型映射到您的POCO/DTO。

这是可能的,但您必须进行一些额外的编码。此处举例说明:


您可能不想执行这个额外的代码。它可能会有马车。您可以创建POCO/DTO,并使用Automapper将业务域模型映射到POCO/DTO。

接口在模型绑定中有什么用途。NET只能实例化类,所以它应该使用接口的哪个实现?@CodeCaster:在旧的Web API中,有一些解决方法,如。我想知道在WebAPI核心中是否还有我可以做的事情。您可以尝试编写自己的json输入格式化程序。。。(实现
IInputFormatter
并在mvc选项中注册它:
options.InputFormatters.Insert(0,新的MyJsonInputFormatter())
即使你找到了一个解决方法,这仍然是一个糟糕的做法。我同意@CodeCaster的观点,你不应该在模型中使用接口。而且这不值得努力。抽象poco类没有太大价值。接口在模型绑定中有什么用途?.NET只能实例化类,那么应该使用哪种接口实现uld是否可以使用?@CodeCaster:在旧的Web API中,有一些解决方法,如。我想知道在Web API核心中是否也可以做一些事情。您可以尝试编写自己的json输入格式化程序…(实现
IInputFormatter
并在mvc选项中注册它:
options.InputFormatters.Insert(0,new MyJsonInputFormatter())
即使你找到了一个解决方法,这仍然是一个不好的做法。我同意@CodeCaster的观点,你不应该在模型中使用接口。而且这不值得付出努力。抽象poco类没有太大价值