ASP.NET WebAPI String 传值问题

简介: 如果我们再WebAPI中定义了只有一个string参数的WebAPI函数,如下所示:   [HttpPost] public string TrackBill(string str) { return str; } 就是这样一个简单的函数,有一个字符串类型的参数,  当我们用PostMan对该API进行测试,给api接口传一个Key为str,value为123的键值对。

如果我们再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

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



 

相关文章
|
15天前
|
开发框架 JSON .NET
|
2月前
|
JSON 开发框架 .NET
ASP.NET Core Web API设置响应输出的Json数据格式的两种方式
ASP.NET Core Web API设置响应输出的Json数据格式的两种方式
108 0
|
11月前
|
开发框架 .NET 中间件
Swagger的 ASP.NET Core Web API 帮助页
使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战。 Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题。 它具有诸如交互式文档、客户端 SDK 生成和 API 可发现性等优点。
84 0
|
11月前
|
开发框架 JSON .NET
使用 ASP.NET Core 创建 Web API系列
使用 ASP.NET Core 创建 Web API系列
188 0
|
12月前
|
开发框架 JSON 算法
ASP.NET Core Web API之Token验证
ASP.NET Core Web API之Token验证
198 0
|
12月前
|
开发框架 前端开发 JavaScript
VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(完)
VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(完)
87 0
|
12月前
|
开发框架 前端开发 JavaScript
VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(三)
VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(三)
82 0
|
12月前
|
开发框架 JSON 前端开发
ASP.NET Web API入门介绍(一)
ASP.NET Web API入门介绍(一)
152 0
|
开发框架 JSON 前端开发
6.3 ASP.NET Core Web API技术选择
ASP.NET Core Web API技术选择
6.3 ASP.NET Core Web API技术选择
|
开发框架 前端开发 .NET
.NET MVC第三章、三种传值方式
.NET MVC第三章、三种传值方式
92 0
.NET MVC第三章、三种传值方式