.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" };
}

测试

略,自己去测试吧

.NET Core WEB API接口参数模型绑定的更多相关文章

  1. .NET Core WEB API中接口参数的模型绑定的理解

    在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种: 微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-a ...

  2. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  3. vue前端开发那些事——后端接口.net core web api

    红花还得绿叶陪衬.vue前端开发离不开数据,这数据正来源于请求web api.为什么采用.net core web api呢?因为考虑到跨平台部署的问题.即使眼下部署到window平台,那以后也可以部 ...

  4. .net core Web API参数绑定规则

    参数推理绑定 先从一个问题说起,微信小程序按照WebAPI定义的参数传递,Get请求服务器端可以正常接收到参数,但是Post请求取不到. Web API代码(.netcore 3.1)如下: [Htt ...

  5. 加快ASP。NET Core WEB API应用程序。第3部分

    下载source from GitHub 对ASP进行深度重构和优化.NET Core WEB API应用程序代码 介绍 第1部分.创建一个测试的RESTful WEB API应用程序. 第2部分.增 ...

  6. .net core web api + Autofac + EFCore 个人实践

    1.背景 去年时候,写过一篇<Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统>,采用Asp.net Web API + Element-UI.当时主要是为了 ...

  7. 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

    HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...

  8. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...

  9. ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容.下面的类图描述了我们已经实现的组件及其之间的关系,貌似系统已经变得越来越复杂了. 其 ...

随机推荐

  1. Java实现 LeetCode 780 到达终点(逻辑题)

    780. 到达终点 从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y). 给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则 ...

  2. ASP.NET使用HttpHandler进行页面静态化(自动生成页面)

    这次的Demo是,一个根页面,点击链接创建子页面,子页面都是一个Template页面进行替换的 一个根页面 <%@ Page Language="C#" AutoEventW ...

  3. (Java实现) 均分纸牌

    题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  4. Java实现 蓝桥杯VIP 算法训练 P1101

    有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输出提货单的 ...

  5. Java实现 LeetCode 295 数据流的中位数

    295. 数据流的中位数 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2. ...

  6. 栈 & 队列

    栈 先进者后出,后进者先出,LIFO,典型的"栈"结构 从栈的操作特性上来看,栈是一种"操作受限"的线性表,只允许在一段插入和删除数据. 在功能上来说,数组和链 ...

  7. synchronized 和 java.util.concurrent.locks.Lock 的异同 ?

    主要相同点:Lock 能完成 synchronized 所实现的所有功能 主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能. synchronized 会自动释放锁,而 ...

  8. EIGRP-12-弥散更新算法-DUAL的FSM(*没写完)

    FD (可行距离).后继和可行后继.本地计算和弥散计算(随着查询包的发出而扩散,随着响应包的接收而收敛)一到目前为止介绍的这些机制能够使路由器有效地计算出去往某目地的新路径,只要在整个弥散计算中不再出 ...

  9. turtle 画国旗

    代码实现: import turtle import time import os def draw_square(org_x, org_y, x, y): turtle.setpos(org_x, ...

  10. Windows服务监控工具Perfmon

    原文:https://www.jianshu.com/p/f82c2b726ecf 一.Perfmon简介.性能监控指标.性能对象指标 Perfmon:提供了图表化的系统性能实时监视器.性能日志和警报 ...