【NetWebApi】接口参数传递笔记

之前没做过Api接口开发,很少了解一下东西。今天遇到了很多问题。尤其是GET,POST时候提示404,405,等问题。

场景一:POST提交一个字段给后台标记为[HttpPost]的方法:

     [HttpPost]
        [Route("SendCaptcha")]
        public HttpResponseMessage SendCaptchaSms([FromBody]string mobile)
        {
            return CreateResponse("", new SendSmsResult() { ReturnCode = -2, Message = "手机号码为空" });
      }
<script>
       var sendsmsCaptcha = function () {
           var mobile = "13800138000";
           $.ajax({
               type: "POST",
               url: "/Mobile/Captcha/SendCaptcha",
               data: { "": mobile }, // 关键奇葩点就在这里,刚开始传递{"mobile":mobile}后台老是提示mobile为null
               dataType: "json",
               success: function (data) {
                   console.log(data);
               }

           });
       };
</script>

场景二:前端传递多个字段,以及一个复杂对象(比如参数个数不确定),此时用dynamic比较方便

     [HttpPost]
        [Route("SendNotifySms")]
        public HttpResponseMessage SendSms(dynamic dynamicData)
        {
            if (dynamicData == null) return CreateResponse("参数异常", "-1");

            string mobile = "";
            List<DynamicDict> extendParams;
            try
            {
                mobile = Convert.ToString(dynamicData.Mobile);
                extendParams = JsonHelper.ToObject<List<DynamicDict>>(Convert.ToString(dynamicData.extendParams));
            }
            catch (Exception ex)
            {
                LogHelper.LogErr("【SendSms】" + ex.GetBaseException());

                return CreateResponse("参数异常", "-1");
            }      // 其他逻辑
  }

前端JS调用:

<script>
var sendsms = function () {
            var mobile = "13800138000";
            var params = [
                { "Key": "DealerShopName", "Value": "火星北京路4S店" },
                { "Key": "TestDriverModelName", "Value": "大黄蜂 F11战斗机" },
                { "Key": "TestDriverDate", "Value": "2016年7月28日 星期四" },
                { "Key": "DealerShopAddress", "Value": "火星北京路4S店9527号" },
                { "Key": "AdviserNameAndPhone", "Value": "东方不败:13838389438" }
            ];
            $.ajax({
                type: "POST",
                url: "/Mobile/Captcha/SendNotifySms",
                data: JSON.stringify({ "Mobile": mobile, "extendParams": params }),
                contentType: ‘application/json‘, // 这里一定不能忘掉了 
                success: function (data) {
                    console.log(data);
                }
            });
        };
    </script>

折腾了一个小时,调试了好几次,终于算吧逻辑跑通了。真是知识匮乏时间成本高啊。

发现了一篇文章写的更详细:http://www.cnblogs.com/landeanfen/p/5337072.html

时间: 2024-08-05 12:50:10

【NetWebApi】接口参数传递笔记的相关文章

OpenCV(C++接口)学习笔记4-Mat::operator = 的陷阱

当我们想要将一个Mat对象的数据复制给另一个Mat对象时,应该怎么做呢? 我们发现,OpenCV提供了重载运算符Mat::operator = ,那么,是否按照下列语句就可以轻松完成对象的赋值呢? Mat a; Mat b = a; 答案是否定的! 我们可以从reference manual 中看到: Mat::operator = Provides matrix assignment operators. C++: Mat& Mat::operator=(const Mat& m) Pa

OpenCV(C++接口)学习笔记2-像素级的图像操作

1.通过成员函数at(int y, int x)访问 这种方法需要知道像素保存的格式. (1) 这是为模板类型的函数,因为一个函数的返回类型只有在运行时才会知道. (2)这个函数返回的是一个向量即Vector,故有下标的操作. image.at<uchar>(j,i)= 255; 在单通道图像中,采用以上语句可以获取图像(i,j)处的灰度值(注:先行后列,一般用j表示行(rows),i表示列(cols)).如果是灰度图像的话,只需要更改一个数据就可以了.如果是rgb图像的话,就要用"

OpenCV(C++接口)学习笔记1-图像的读取、显示、保存

OpenCV在2.0版本之后添加了C++接口函数,之前学习的都是C语言的接口函数,现在OpenCV已经发展到2.4.9版本了,所以决定学习C++接口函数,跟上节奏. 1.创建图像 cv::Mat image; 采用类cv::Mat来定义图像变量或矩阵变量. 当然你也可以指定图像的大小: cv::Mat img(240,320,CV_8U,cv::Scalar(100)); 参数CV_8U中的U代表unsigned,而S代表signed.对于三通道彩色图像可以用CV_8UC3.你也可以声明16或3

PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式

以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTime = 0){ //文件名 $filename = $this->_dir.$k.'.'.self::EXT; ..... line:25 把缓存时间设置为 11 位的数字,如果不满 11 位,则在时间前面补 0.再把缓存时间和缓存内容进行拼接: $cacheTime = sprintf('%011

PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式

方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时)→返回数据 ↓                                              ↑ 缓存(缓存生效时)     →   →    →    → 方案三:定时读取缓存方式(crontab 定时任务) 封装并返回数据 ↑ 数据库→crontab→缓存 ↑ http 请求 ==

面向接口,思考笔记

面向对象是对现实世界的抽象.接口, 是对对象的功能的抽象. 接口可以理解为一组功能,协议. 协议体现在两点: 1, 是业务需求与程序之间的协议.将需求功能抽象为接口. 2,是架构,或分层中层与层之间的协议.体现在“是什么就一定能干什么”.view 层和business层和db层之间的协议.这也体现了封装性.只需知道接口不需要知道具体实现.

闭包以及暴露接口---学习笔记

闭包      :  函数可以访问它被创建时所处的上下文环境.---<JavaScript语言精粹> 产生原理:  JavaScript中没有块级作用域,只有函数作用域,函数中任何位置定义的参数和变量在函数内的任何地方都是可见的,在函数外不可见. 使用方法:  可以通过在函数内部创建局部变量,实现变量的私有化.(外部不可见) 注意事项:  内部函数访问外部函数的变量时访问的是实际变量(值为外部函数返回时变量的值). 知识点   :  ①只要内部函数需要,外部函数中的变量不会在外部函数返回后销毁

java之接口(笔记)

1.特征 (1)所有成员变量都是public, static, final.(2)所有方法都是public, abstract.(3)所有嵌套类型都是public, static. 2.接口也是继承自Object. 3.接口实例化(伪) public class test2 { public static void main(String[] args) { ioo i = new ioo() { @Override public void print() { System.out.printl

PoEduo - C++阶段班【Po学校】-继承&amp;虚函数&amp;抽象&amp;接口- 课堂笔记

附录(一) 扩展知识:  1--> 面向对象的三个基本特征   1.0 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public) 1.1 继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力).可视继承(子窗体使用父窗体的外观和实现代码).接口继承(仅使用属性和方法,实现滞后到子类实现).前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式. 1.3 多态:是将