zoukankan      html  css  js  c++  java
  • .NET Core WEB API中接口参数的模型绑定的理解

      在.NET Core WEB API中参数的模型绑定方式有以下表格中的几种:

    微软官方文档说明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-2.1

    特性   绑定源
    [FromHeader] 请求标头
    [FromQuery] 请求查询字符串参数
    [FromForm] 请求正文中的表单数据
    [FromBody] 请求正文
    [FromRoute] 当前请求中的路由
    [FromServices] 作为操作参数插入的请求服务

      接下来将对其中一些特性在实际中的使用方式做出简要说明。首先要新建一个ASP .NET Core WEB API的工程。

    FromHeader(请求标头)

      顾名思义就是从Http的Request Headers:中获取数据。使用示例代码如下:

    1  [HttpGet("TestFromHeader")]
    2 public string TestFromHeader([FromHeader]string headerParam)
    3 {
    4    return $"headerParam: {headerParam}";
    5 }
    View Code

     使用https用Url的方式请求访问,方法返回的结果为空,如下图所示。并且此时的Request Headers中并没有headerParam参数。

    使用Postman给方法的Request Headers加入 headerParam:10。此时方法返回了结果,如下图所示。

    console日志详情如下图:

    通过以上测试可以发现,使用参数使用[FromHeader]特性时,没有给参数赋值时,参数使用的是.NET中类型的默认值,也就是Default(T)。

    FromQuery(请求查询字符串参数)

       对于复杂类型的参数请求,也就是参数类型为对象时,MVC中间件会默认以把数据转换为JSON格式。对于Get请求如果想要用URL查询字符串查询数据。就得在参数前面加[FromQuery]特性,使用示例代码如下:

    1 [HttpGet("GetUserModel")]
    2 public IEnumerable<User> GetUserModel([FromQuery]User users)
    3 {
    4     var list = new List<User>
    5     {
    6     new User() { Id = "1", FirstName = "Fname", SecondName = "Sname" },
    7      };
    8      return list;
    9 }    
    View Code

    使用Postman请求结果如下如下:

    如果去掉[FromQuery]特性请求数据,就会提示415错误,如下图所示:

    对[FromQuery]的请求方式做出总结:

    1.如果使用了[FromQuery]特性,必须使用请求查询字符串作为参数,用JSON格式的数据请求则会报415错误。

    2.如果去掉[FromQuery]特性,则必须使用JSON格式的数据请求,用请求从查询字符串作为参数则会报415错误。

    FromForm(请求正文中的表单数据)

    [FromForm]特性请求标头中的Content-Type为form表单形式:"application/x-www-form-urlencoded",示例代码如下:

    1 [HttpPost("AddUserModel")]
    2 public User UserAddUserModel([FromForm]User users)
    3 {
    4     return users;
    5 }
    View Code

    Postman的请求结果如下:

    FromBody(请求正文)

     使用[FromBody]特性,MVC中间件会把请求参数默认转换为JSON格式。所以请求是必须使用JSON格式的数据。示例代码如下:

    1 [HttpPost("ListAllUserByModel")]
    2 public User ListAllUserByModel([FromBody]User users)
    3 {
    4    return users;
    5 }
    View Code

    Postman的请求方式如下图:

    返回结果如下图:

    FromBody的请求参数使用XML格式的数据

    既然MVC中间件默认[FromBody]的参数请求为JSON格式,那可不可以使用XML格式的参数作为请求数据:

    1.安装NuGet包:Install-Package Microsoft.AspNetCore.Mvc.Formatters.Xml 

    2.在Startup.cs的ConfigureServices方法中添加如下图所示的方法AddXmlSerializerFormatters:

    3.使用Postman的请求方式如下:

    返回结果如下图所示:

    FromBody指定返回的数据为XML格式

    给Request Headers的请求头加上 Accept: "text/xml" 可以指定返回的数据为xml格式,Postman的请求方式如下:

    Postman的返回结果如下图所示,通过下图查看返回了xml的数据。

    以上就是个人对请求参数特性的总结。

  • 相关阅读:
    if __name__ == '__main__' 该如何理解
    Github下载慢和下载过程中断等情况的解决方案
    Git下载安装及设置详细教程
    冒烟测试是什么?
    100道MySQL数据库经典面试题解析
    Linux 下ZooKeeper安装
    运用Docker+Jenkins+Nginx+Spring Boot 自动化部署项目
    linux本地远程上传&下载阿里云oss的shell脚本实现方法
    运行java项目shell简洁脚本
    阿里云oss利用工具上传图片文件
  • 原文地址:https://www.cnblogs.com/fengye310/p/10541468.html
Copyright © 2011-2022 走看看