zoukankan      html  css  js  c++  java
  • 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

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



  • 相关阅读:
    拦截器
    git和bootstrap
    java面试题目
    Struts2笔记
    sql语句的面试题
    公司面试总结
    面试题12 包含 min 函数的栈 【栈】
    面试题11 字符串的排列[算法]
    [面试] 进程和线程的区别(面试题)
    [baidu] 面向对象的三个基本要素和五项基本设计原则
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/8490115.html
Copyright © 2011-2022 走看看