ric*_*lla 7 c# model-binding asp.net-web-api
在我们的代码库中,DTO是具有只读字段的不可变类型,状态的getter和接受值的构造函数,因此假设的人类型如下所示:
public class Person
{
private readonly String _firstName;
private readonly String _secondName;
public Person(String firstName, String secondName)
{
_firstName = firstName;
_secondName = secondName;
}
public String FirstName
{
get { return _firstName; }
}
public String SecondName
{
get { return _secondName; }
}
}
Run Code Online (Sandbox Code Playgroud)
使用Web API,是否可以绑定这样的模型而不暴露属性上的公共setter?
Pra*_*ose 16
是的,在没有公共属性的情况下绑定它是可能的.默认情况下,您需要一个公共设置器才能工作.但是,如果您有一个执行初始化的构造函数并且它是默认构造函数,则框架可以构造对象.
在您显示的示例中,由于只有一个构造函数接受两个字段(FirstName和LastName),因此它使用默认构造函数来创建对象.
这是因为Json序列化器的反序列化功能.如果您有多个构造函数,则可以使用JsonConstructor属性指定要使用的构造函数,并且可以设置只读字段.
您可以通过将 WebAPI 请求绑定到一个模型来处理这个问题,并隐式转换为不可变类型:
public class PersonRequestModel
{
public String FirstName { get; set; }
public String SecondName { get; set; }
public static implicit operator Person(PersonRequestModel request) {
return new Person(request.FirstName, request.SecondName);
}
}
public class Person
{
private readonly String _firstName;
private readonly String _secondName;
public Person(String firstName, String secondName)
{
_firstName = firstName;
_secondName = secondName;
}
public String FirstName
{
get { return _firstName; }
}
public String SecondName
{
get { return _secondName; }
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2165 次 |
最近记录: |