如果我们再WebAPI中定义了只有一个string参数的WebAPI函数,如下所示:

[HttpPost]
public string TrackBill(string str){return  str;}

就是这样一个简单的函数,有一个字符串类型的参数,

当我们用PostMan对该API进行测试,给api接口传一个Key为str,value为123的键值对。

其结果如下:

我们看到,返回的结果是找不到与该请求匹配的资源。很奇怪,我们的给该方法指定了HttpPost的方法,也指定了参数名为str的参数,请求的方法是post方法,参数也是str,却匹配不到该函数。

1.第一步。

给string str加上[FromBody]进行修饰。

如下所示。

  [HttpPost]public string Post([FromBody]string str){return str;}

我们在在postman中用同样的方法进行post访问。

返回值为null 也就是说匹配到了webapi中的post方法,但是该方法根本没有接收到postman中传递过去的key 为str  Vaue为123的值。

2.第二步

查阅相关资料后,得出结论,原来当方法中只有一个string类型的参数时,不能给该键值对赋予key值,也就是说key必须得空着。

如下所示。

我们在postman中把key空着,然后value为123,结果webapi中的post函数成功获取到了改值。

不知道微软在这样设计的时候出于什么考虑。

3.第三步。

post函数两个string类型的参数。填加post的重载方法,如下:

  [HttpPost]public string Post([FromBody]string str1, [FromBody]string str2){return string.Format("第一个str是:{0},第二个str是{1}",str1,str2);}

我在在postman中和上例一样,不指定key,然后指定两个value,看看结果会怎样?

当两个key都是空着的时候,出现错误,提示,“无法将多个参数(“str1”和“str2”)绑定到请求的内容。”

也就是说多个string参数,那么key不能空着,我们加上试试。

结果让人很意外,任然是不可以。

4.第四步,

那么,当有多个string类型的参数怎么办呢?

我想到的解决办法是用object类型取代string类型。

更改如下:

 public class HomeController : ApiController{[HttpPost]public string Post(Str str){return string.Format("第一个str是:{0},第二个str是{1}",str.Str1,str.Str2);}}public class Str{public string Str1 { get; set; }public string Str2 { get; set; }}

然后我们在postman 访问试试。
我们看到,成功收到了str1和str2的值。

5.第五步

其实还有更简单暴力的办法,在路由中通过url中给参数指定值。

代码如下:

 [HttpPost][Route("~/Post/{Str1}/{Str2}")]public string Post(string Str1,string Str2){return string.Format("第一个str是:{0},第二个str是{1}",Str1,Str2);}

然后我们post的Url为http://localhost:56866/Post/123/456

结果如图所示:

我们直接在url中按照路由规则给str1和str2指定了值,并且WebApi中的post函数成功获取到了其值。

该i昂木的GitHub地址:https://github.com/liuzhenyulive/WebApiString

有什么疑问欢迎留言与我交流。

作者:码农阿宇

出处:https://www.cnblogs.com/CoderAyu/p/8490115.html

本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。

转载于:https://www.cnblogs.com/jhxk/articles/10687695.html

ASP.NET WebAPI String 传值问题相关推荐

  1. ajax asp后台获取不到post数据,asp.net webapi [FromBody]string 获取不到ajax post的数据的解决方法...

    原文:asp.net webapi [FromBody]string 获取不到ajax post的数据的解决方法 webapi中如下([FromBody]string jsonData: public ...

  2. 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi

    一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...

  3. 【转】ASP.NET中页面传值

    http://www.cnblogs.com/wenly/archive/2008/06/10/1216678.html 一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交,    & ...

  4. ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  5. asp.net webapi 自托管插件式服务(转)

    webapi问世已久,稀里糊涂的人哪它都当mvc来使,毕竟已mvc使用级别的经验就可以应对webapi. webapi和mvc在asp.net5时代合体了,这告诉我们,其实 它俩还是有区别的,要不现在 ...

  6. 一、目前在ASP.NET中页面传值共有这么几种方式:

    一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交,    <form action= "target.aspx" method = "post&q ...

  7. ASP.NET WebAPI 集成 Swagger 启用 OAuth 2.0 配置问题

    在 ASP.NET WebAPI 集成 Swagger 后,由于接口使用了 IdentityServer 做的认证,调试起来很不方便:看了下 Swashbuckle 的文档 ,是支持 OAuth2.0 ...

  8. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

  9. 【转】OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service Client

    一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and consumption of quer ...

最新文章

  1. E.Text Editor (Gym 101466E + 二分 + kmp)
  2. jQuery插件simplePagination的使用-踩坑记_03
  3. ajax 同步异步true,async: false 实现AJAX同步请求 ( $.ajax同步/异步(async:false/true) )(示例代码)...
  4. Java包装类API详解
  5. Python自动化测试 (九)urllib2 发送HTTP Request
  6. 栈和队列之用一个栈实现另一个栈的排序
  7. FizzBu​​zz Kata与Java流
  8. PyCharm 安装插件
  9. 大型互联网分布式企业微服务云架构
  10. Oracle中是用case...when语句进行判断
  11. 【Cqoi2006】【BZOJ2222】猜数游戏(乱搞)
  12. 我的博客文章快速索引
  13. Twaver-HTML5基础学习(9)HTML节点(HTMLNode)
  14. iris流程图_IRIS项目管理流程
  15. Spring boot(四):整合Mybatis
  16. TransUNet: Transformers Make StrongEncoders for Medical Image Segmentation文章详解(结合代码)
  17. TensorFlow学习--tf.summary.histogram与直方图仪表板/tensorboard_histograms
  18. Springboot -Shiro整合JWT(注解形式)
  19. WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
  20. css-Basics

热门文章

  1. 通过OleDB连接方式,访问Access,Excel数据库.
  2. webpack最简单的入门教程里bundle.js之运行单步调试的原理解析
  3. 诺基亚将携手Nedaa在迪拜设立IoT实验室
  4. Day5---D4:合规和审计管理
  5. Iptables防火墙配置
  6. 通过案例对SparkStreaming透彻理解-3
  7. perl中Net::FTP帮助文档
  8. DATAGUARD STANDBY 服务器归档日志管理
  9. Activity 中的Toast在Activity销毁后报错,解决方法,把context改成应用的
  10. cmd连接mysql连接:mysql-h主机地址-u用户名-p用户密码(注:u与root可以不用加)