zoukankan      html  css  js  c++  java
  • Asp.Net WebAPI Get提交、Post提交处理

    1.启用跨域提交

      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET, POST" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    (function () {
        var domain = 'http://localhost:5000/';
        var apiUrl = {
            getPostOne: function (action) {
                return domain + 'postone/' + action;
            },
            getOne: function (action) {
                return domain + 'getone/' + action;
            }
        }
        window.apiUrl = apiUrl;
    })();

    2.Get方式和MVC相同

    Get方式前台代码

    /*
    * 跨域的get请求
    * 1个参数
    */
    $.getJSON(apiUrl.getOne("testone"), {
        name: 234
    }).done(function (data) {
        alert(data);
    });
    /*
    * 跨域的get请求
    * 2个参数
    */
    $.get(apiUrl.getOne("TestTwo"), {
        name: 'abc',
        age:11
    }, function (data) {
        alert(data);
    });

    Get方式后台代码

    /*
    * 1.WebApi 控制器方法 默认仅支持一种格式的请求,默认为Post请求
    * 2.WebApi 控制器方法 默认不支持Get请求,
    *   抛出异常:The requested resource does not support http method 'GET'.
    *   需要手动指定
    * FromBody:指定参数来自外部请求
    * FromUri:指定参数来自url
    */
    //前台Get请求获取一个参数 
    [HttpGet]
    public string TestOne(string name)
    {
        return string.Format("姓名:{0}", name);
    }
    //前台Get请求获取2个参数
    [HttpGet]
    public string TestTwo(string name, int age)
    {
        return string.Format("姓名:{0},年龄:{1}", name, age);
    }

    3.POST方式和MVC中不相同,只获取第一个参数,需要制定 FromBody标志

    前台代码

    /*
    * 跨域的post请求
    * 无参数,获取列表
    */
    $.post(apiUrl.getOne("PostNull"), {
    }, function (data) {
        console.info(data);
        alert(data[0].name);
    });
    /*
    * 跨域请求Post
    * 一个参数,不能指定key的名称
    * 注意参数指定 json 字符串
    */
    $.post(apiUrl.getOne("PostOne"),
        { '': '张三' },
        function (data) {
            alert(data);
        });
    /*
    * 跨域请求Post
    * 2个参数----失败
    */
    $.post(apiUrl.getOne("PostTwo"),
        { name: '张三' ,age:12},
        function (data) {
            alert(data);
        });
    /*
    * 跨域请求Post
    * 1个对象参数
    */
    $.post(apiUrl.getOne("PostThree"),
        { name: '张三', age: 12 },
        function (data) {
            alert(data);
        });
    $.ajax({
        url: apiUrl.getOne("PostThree"),
        data: { name: '张三', age: 12 },
        type: 'post',
        success: function (data) {
            alert(data);
        }
    });

    对应的后台代码

    /*
    * 1.WebApi 控制器方法 默认支持Post请求
    * 2.默认情况下,
    * 指定Controller,不指定action时,当前controller中有多种请求方式,
    *  则:抛出异常,Multiple actions were found that match the request
    * 3.post方式只能接受一个参数而且必须放在FromBody 里用FromBody特性标识
    */
    //Post请求无参方法,返回结果json格式
    [HttpGet]
    [HttpPost]
    public List<object> PostNull()
    {
        List<object> list = new List<object>() {
            new  { name="张三"},
            new  { name="李四",age=11},
        };
        return list;
    }
    //Post请求一个参数
    public string PostOne([FromBody] string name)
    {
        return string.Format("姓名:{0}", name);
    }
    /*Post请求2个参数,
    * 参与外部交互action中只接受一个参数
    * 不支持多个FromBody
    * 抛出异常:"Can't bind multiple parameters ('name' and 'age') to the request's content."
    */
    public string PostTwo([FromBody] string name, [FromBody] int age)
    {
        return string.Format("姓名:{0},年龄:", name, age);
    }
    //Post请求 1个 对象参数
    public string PostThree([FromBody] Student stu)
    {
        return stu.ToString();
    }

    参考资料:

    http://www.cnblogs.com/babycool/p/3922738.html

  • 相关阅读:
    学习篇之String()
    js之Math对象
    js之date()对象
    css之描点定位方式
    js详解之作用域-实例
    js精要之构造函数
    js精要之继承
    js精要之模块模式
    js精要之对象属性
    js精要之函数
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5089810.html
Copyright © 2011-2022 走看看