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 ...
随机推荐
- BZOJ 1040: [ZJOI2008]骑士 [DP 环套树]
传送门 题意:环套树的最大权独立集 一开始想处理出外向树树形$DP$然后找到环再做个环形$DP$ 然后看了看别人的题解其实只要断开环做两遍树形$DP$就行了...有道理! 注意不连通 然后洛谷时限再次 ...
- 使用log4net日志组件经验分享
常见步骤: 第一:在项目中引用log4net组件. 第二:配置log4net,一般都写在web.config中. 第三:调用部分. 具体怎么配置,大家可以参考博客其它博友写的,这里我只写我 ...
- IOS设备设计完整指南
作为初学者,常常不知如何下手设计,IOS应用UI设计中碰到的种种基础小问题,在此都将一一得到解答.这份完整的设计指南将带你快速上手,为IOS设计出优雅的应用吧. 关于此设计指南 此设计指南描述的是如何 ...
- js收藏代码
js收藏代码~ 1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border oncon ...
- Python学习/复习神器-->各种方法/技巧在哪用和典型例子(一)
就我个人在学习Python的过程中,经常会出现学习了新方法后,如果隔上几天不用,就忘了的情况,或者刚学习的更好的方法没有得到应用,还是沿用已有的方法,这样很不利于学习和掌握新姿势,从而拉长学习时间,增 ...
- C/C++语言简介之程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数.因此, ...
- vue.js 与iview官网
vue.js https://cn.vuejs.org/v2/guide/instance.html#生命周期图示 iview https://www.iviewui.com/components/t ...
- makefile讲解
仅供自己学习使用 一.Makefile介绍 Makefile 或 makefile: 告诉make维护一个大型程序, 该做什么.Makefile说明了组成程序的各模块间的相互 关系及更新模块时必须进行 ...
- centos/linux下的安装vsftpd
1.简介: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,ftp服务器软件 2.安 ...
- 深入研究Sphinx的底层原理和高级使用
深入研究Sphinx的底层原理和高级使用