ASP.NET WebAPI String 传值问题
如果我们再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
有什么疑问欢迎留言与我交流。
ASP.NET WebAPI String 传值问题的更多相关文章
- ASP.NET 页面之间传值的几种方式
开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- ASP.NET WebApi 文档Swagger深度优化
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明博客园蜗牛原文地址,cnblogs.com/tdws 写在前面 请原谅我这个标题党,写到了第100篇随笔,说是深度优化,其实也并没有什么深度 ...
- ASP.NET WebApi 文档Swagger中度优化
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简 ...
- 使用Asp.net WebAPI 快速构建后台数据接口
现在的互联网应用,无论是web应用,还是移动APP,基本都需要实现非常多的数据访问接口.其实对一些轻应用来说Asp.net WebAPI是一个很快捷简单并且易于维护的后台数据接口框架.下面我们来快速构 ...
- 在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...
- 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 ...
随机推荐
- POJ 2185 Milking Grid [KMP]
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8226 Accepted: 3549 Desc ...
- CentOS常用命令大全
一:使用CentOS常用命令查看cpumore /proc/cpuinfo | grep "model name" grep "model name" /pro ...
- 想玩 BGP 路由器么?用 CentOS 做一个
在之前的教程中,我对如何简单地使用Quagga把CentOS系统变成一个不折不扣地OSPF路由器做了一些介绍.Quagga是一个开源路由软件套件.在这个教程中,我将会重点讲讲如何把一个Linux系统变 ...
- Spring Boot - Font Awesome OTS parsing error: Failed to convert 字体加载失败
字体文件,加载不出来 解决方案 一 问题是Maven正在过滤字体文件并破坏它们. <resource> <directory>${project.basedir}/src/m ...
- iOS中蓝牙的使用
Core Bluetooth的使用 1,建立中心设备 2,扫描外设(Discover Peripheral) 3,连接外设(Connect Peripheral) 4,扫描外设中的服务和特征(Disc ...
- 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据
目录 前言 1 Get方式和Post方式接口说明 2 OkHttp库简单介绍及环境配置 3 具体实现 前言 本文具体实现思路和大部分代码参考自<第一行代码>第2版,作者:郭霖:但是文中讲 ...
- elasticsearch-5.1.1使用snapshot接口备份索引
如果ES是集群,那么需要使用共享存储,支持的存储有:a.shared file systemb.S3c.HDFS 我使用的是第一种,NFS共享文件系统.这里要说一下权限问题,ES一般是使用 elast ...
- SQL总结手册
1.SQL语法 (1)查询 SQL查询是使用最多的,需要凭借结构.索引和字段类型等因素.大多数据库含有一个优化器(optimizer),把用户查询转换为可选形式,以提高查询效率. 基本语法为: SEL ...
- jqeury显示前几个,隐藏后几个,点击后隐藏前几个显示后几个
<script type="text/javascript"> $(".ul li").each(function(){ if($(this).in ...
- 【前端】Vue2全家桶案例《看漫画》之六、图片阅读页
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_6.html 项目github地址:https://github.com/shamoyuu/ ...