.NET Core WEB API接口参数模型绑定
.NET Core WEB API
模型绑定方式有以下表格中的几种:
特性 | 绑定源 |
---|---|
[FromHeader] | 请求标头 |
[FromQuery] | 请求查询字符串参数 |
[FromForm] | 请求正文中的表单数据 |
[FromBody] | 请求正文 |
[FromRoute] | 当前请求中的路由 |
[FromServices] | 作为操作参数插入的请求服务 |
FromHeader(请求标头)
顾名思义就是从Http的Request Headers:中获取数据。使用示例代码如下
[HttpGet("TestFromHeader")]
public string TestFromHeader([FromHeader]string headerParam)
{
return $"headerParam: {headerParam}";
}
FromQuery(请求查询字符串参数)
对于复杂类型的参数请求,也就是参数类型为对象时,MVC中间件会默认以把数据转换为JSON格式。对于Get请求如果想要用URL查询字符串查询数据。就得在参数前面加[FromQuery]特性,使用示例代码如下:
[HttpGet("GetUserModel")]
public IEnumerable<User> GetUserModel([FromQuery]User users)
{
var list = new List<User>
{
new User() { Id = "1", FirstName = "Fname", SecondName = "Sname" },
};
return list;
}
FromForm(请求正文中的表单数据)
[FromForm]特性请求标头中的Content-Type为form表单形式:Content-Type:"application/x-www-form-urlencoded",示例代码如下:
[HttpPost("AddUserModel")]
public User UserAddUserModel([FromForm]User users)
{
return users;
}
FromBody(请求正文)
使用[FromBody]特性,MVC中间件会把请求参数默认转换为JSON格式。所以请求是必须使用JSON格式的数据。示例代码如下:
[HttpPost("ListAllUserByModel")]
public User ListAllUserByModel([FromBody]User users)
{
return users;
}
FromBody的请求参数使用XML格式的数据
既然MVC中间件默认[FromBody]的参数请求为JSON格式,那可不可以使用XML格式的参数作为请求数据:
1.安装NuGet包:Install-Package Microsoft.AspNetCore.Mvc.Formatters.Xml
2.在Startup.cs的ConfigureServices方法中添加如下图所示的方法AddXmlSerializerFormatters:
FromBody指定返回的数据为XML格式
给Request Headers的请求头加上 Accept: "text/xml" 可以指定返回的数据为xml格式
模型验证
通过验证特性可以为模型属性指定验证规则。有很多内置验证特性,也可以自定义验证特性。
内置特性
以下是一些内置验证特性:
- [CreditCard]:验证属性是否具有信用卡格式。 需要JQuery 验证其他方法。
- [Compare]:验证模型中的两个属性是否匹配。
- [EmailAddress]:验证属性是否具有电子邮件格式。
- [Phone]:验证属性是否具有电话号码格式。
- [Range]:验证属性值是否在指定的范围内。
- [RegularExpression]:验证属性值是否与指定的正则表达式匹配。
- [Required]:验证字段是否不为 null。 有关此属性的行为的详细信息,请参阅 [Required]特性。
- [StringLength]:验证字符串属性值是否不超过指定长度限制。
- [Url]:验证属性是否具有 URL 格式。
- [Remote]:通过在服务器上调用操作方法来验证客户端上的输入。 有关此属性的行为的详细信息,请参阅 [Remote]特性。
错误消息
通过验证特性可以指定要为无效输入显示的错误消息。 例如:
[StringLength(8, ErrorMessage = "Name length can't be more than 8.")]
在内部,特性使用用于字段名的某个占位符调用 String.Format,有时还使用额外占位符。 例如:
[StringLength(8, ErrorMessage = "{0} length must be between {2} and {1}.", MinimumLength = 6)]
示例
- 定义一个Model类
public class UserInfo
{
public int Id { get; set; }
[Required]
[StringLength(20, ErrorMessage = "Name length can't be more than 20.")]
public string Name { get; set; }
[Range(1,120)]
public int Age { get; set; }
[Display(Name = "Birthday")]
public DateTime Birthday { get; set; }
[EmailAddress]
public string Email { get; set; }
[Required]
[StringLength(1000)]
public string Description { get; set; }
}
- 增加一个接口
[HttpPost]
public IEnumerable<string> Post([FromBody] UserInfo userInfo)
{
return new string[] { "result", "ok" };
}
测试
略,自己去测试吧
如果觉得还不错的话,动动小手指点个赞。欢迎关注我的博客,需要更多内容请关注微信订阅号。