在.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:中获取数据。使用示例代码如下:

  [HttpGet("TestFromHeader")]
public string TestFromHeader([FromHeader]string headerParam)
{
return $"headerParam: {headerParam}";
}

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

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

console日志详情如下图:

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

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

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

 [HttpGet("GetUserModel")]
public IEnumerable<User> GetUserModel([FromQuery]User users)
{
var list = new List<User>
{
new User() { Id = "", FirstName = "Fname", SecondName = "Sname" },
};
return list;
}

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

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

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

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

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

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

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

 [HttpPost("AddUserModel")]
public User UserAddUserModel([FromForm]User users)
{
return users;
}

Postman的请求结果如下:

FromBody(请求正文)

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

 [HttpPost("ListAllUserByModel")]
public User ListAllUserByModel([FromBody]User users)
{
return users;
}

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的数据。

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

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

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

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

  2. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  3. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  4. ASP.NET Core Web API中使用Swagger

    本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger   在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...

  5. 如何在ASP.NET Core Web API中使用Mini Profiler

    原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...

  6. ASP.NET Core Web API中带有刷新令牌的JWT身份验证流程

    ASP.NET Core Web API中带有刷新令牌的JWT身份验证流程 翻译自:地址 在今年年初,我整理了有关将JWT身份验证与ASP.NET Core Web API和Angular一起使用的详 ...

  7. 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

    在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...

  8. ASP.NET Web API中的参数绑定总结

    ASP.NET Web API中的action参数类型可以分为简单类型和复杂类型. HttpResponseMessage Put(int id, Product item) id是int类型,是简单 ...

  9. 翻译一篇英文文章,主要是给自己看的——在ASP.NET Core Web Api中如何刷新token

    原文地址 :https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/ 先申明,本人英语太菜,每次 ...

随机推荐

  1. .htaccess实现php网站伪静态

    伪静态是啥?很简单,就是假的静态网页...例如有个网页是:www.xxx.com/index.php?id=1这是动态网页,php后缀的如果改成:www.xxx.com/index-1.html那么这 ...

  2. flask error

    from flask import Flaskfrom flask import abort app = Flask(__name__) @app.route('/')def index(): ret ...

  3. 第一次安装myeclipse+tomcat经验

    在网上找了很多资料,这里记录一下验证有用的资料,避免以后走弯路 1.安装myeclipse 参考如下URL,亲测有用 https://blog.csdn.net/qingjianduoyun/arti ...

  4. centos7基于SVN+Apache+IF.svnadmin实现SVN的web管理

    一.介绍 本文介绍的是CentOS7上搭建基于Apache.SVN Server.iF.svnadmin实现web后台可视化管理SVN. iF.SVNAdmin应用程序是Subversion授权文件基 ...

  5. RTSP-RTMP-HLS媒体播放管理

    近在跟一些做安防行业同学交流中发现,他们对于外网中播放各类视频流觉得各种设置麻烦的很, 好吧,小小的做了一个解决方案. 这个工具从视频监控管理平台剥离出来, 支持对rtsp, rtmp, hls流的管 ...

  6. WPF中查找指定类型的父控件

    /// <summary> /// 查找父控件 /// </summary> /// <typeparam name="T"></type ...

  7. 错误:软件包:3:docker-ce-18.09.4-3.el7.x86_64 (docker-ce-stable) 需要:container-selinux >= 2.9

    命令:yum -y install http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.68-1. ...

  8. 为什么越来越多的人偏爱go语言

    如果你是一个开发者或者程序员,你大概应该听过Go语言或者Golang语言.当然,如果没有听过也没关系,看到这篇文章的同学,就说明你对Golang是关注的,只需要这一点就够了.今天来聊聊关于Golang ...

  9. 在Javascript中数组对象(json)里元素相同的操作

    1.数组对象元素相同,分组显示   let arry = [ { expensedate: '2018/09/29', amount: 1, type: '交通费' }, { expensedate: ...

  10. Java锁与CAS

    一.加锁与无锁CAS 在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小,可以无所顾忌地做事,但对于悲观派而已,他们总会认为发 ...