zoukankan      html  css  js  c++  java
  • Asp.Net WebApi Post请求整理(一)

    Asp.Net WebApi+JQuery Ajax的Post请求整理


    一、总结

    1.WebApi 默认支持Post提交处理,返回的结果为json对象,前台不需要手动反序列化处理。
    2.WebApi 接收Post提交参数需要指定([FromBody] string name)
    3.WebApi 中如果只接收一个基础类型参数,不能指定key的名称
    4.WebApi Post请求Action只能接收一个参数,也就是说一个Action中[FromBody]仅可指定一次
    5.WebApi Post请求处理多个参数可以使用类对象方式接收参数例如:Student
    6.在接收Post参数时,如果不想定义类,可以使用Newtonsoft.Json.Linq的JObject json对象容器接收参数
    7.(不推荐使用)此接收参数可以使用dynamic本质是使用的JObject,但是提交参数需要指定字符串类型,contentType: 'application/json',类似WebServer中的指定方式
    8.在WebApi的Post请求处理中,后台的Action名称不能使用“GetXXX”方式命名

    二、验证代码

    1.单个参数传递

    Post获取请求参数需要指定参数来源 [FromBody],

    Post方式提交时,Action的名称不能使用'Get'名称开头,

    如果只接收一个基础类型参数,不能指定key的名称

    后台:

    /// <summary>
    /// Post获取请求参数需要指定参数来源 [FromBody]
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public string ShowName([FromBody] string name)
    {
        return $"您传入的名字:‘{name}’";
    }
    public Dictionary<string, string> FindList([FromBody] bool IsShow)
    {
        Dictionary<string, string> dict = new Dictionary<string, string>();
        if (IsShow)
        {
            dict.Add("name1", "张三");
            dict.Add("name2", "李四");
        }
        return dict;
    }

    JavaScript:

    $.post('/api/postuser/showname', {
        '': '张三丰'
    }, function (data) {
        console.info(data);
        alert(data);
    });
    $.post('/api/postuser/FindList', {
        '': true
    }, function (data) {
        console.info(data);
        alert(data);
    });

    二、多个参数传递

    1.指定类类型 Student

    后台:

    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    /// <summary>
    /// Post获取参数可以接收对象类型,接收多个参数
    /// </summary>
    /// <param name="stu"></param>
    /// <returns></returns>
    public string ShowName2([FromBody] Student stu)
    {
        return $"'{stu.Name}'的年龄为:{stu.Age}";
    }

    javascript:

    $.post('/api/postuser/showname2', {
        name: '张三丰',
        age: 19
    }, function (data) {
        console.info(data);
        alert(data);
    });

    2.使用JObject

    后台:

    /// <summary>
    /// 在接收Post参数时,如果不想定义类,可以使用Newtonsoft.Json.Linq的JObject json对象容器接收参数
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public object ShowName3([FromBody] JObject obj)
    {
        return new { name = obj["name"], age = obj["age"], success = true };
    }

    javascript:

    //如果使用JObject,使用对象提交或者使用字符串提交后台都能获取成功
    $.post('/api/postuser/showname3', {
        name: '张三丰',
        age: 19
    }, function (data) {
        console.info(data);
        alert(data);
    });

    3.使用dynamic(不推荐)

    后台:

    /// <summary>
    /// 在接收Post参数时,如果前台传入参数为一个字符串,可以使用dynamic类型接收,不需要指定[FromBody]
    /// 此处obj的真正类型:FullName = "Newtonsoft.Json.Linq.JObject"
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public object ShowName3(dynamic obj)
    {
        return new { name = obj["name"], age = obj["age"], success = true };
    }

    javascript:

    //需要指定参数类型:contentType: 'application/json',类似WebServer中的指定方式
    $.ajax({
        url: '/api/postuser/showname3',
        type:'post',
        contentType: 'application/json',
        data: JSON.stringify({ name: '张三丰', age: 19 }),
        success: function (data) {
            console.info(data);
            alert(data);
        }
    });

     

     Asp.Net WebApi+AngularJs $http的Post请求整理


    一、总结

    1.后台使用如上相同

    2.$http服务的post在单个参数提交后台接收失败

    3.$http的post提交后台要么使用类类型接收,要么使用JObject接收(包含单个或多个参数)

    二、代码示例

    1.单个参数

    //单个参数提交,后台接收失败
    $http.post('/api/postuser/showname', {
        '': '张三'
    }).then(function (result) {
        console.info(result);
        alert(result.data);
    }).catch(function (err) {
        console.info(err);
        alert(err.data.Message);
    });
    
    //单个参数提交,后台使用JObject接收成功
    $http.post('/api/postuser/showlist', {
        isshow: false
    }).then(function (result) {
        console.info(result);
        alert(result.data);
    }).catch(function (err) {
        console.info(err);
        alert(err.data.Message);
    });

    2.多个参数

    //多个参数提交,Student类型接收参数
    $http.post('/api/postuser/showname2', {
        name: '张三',
        age: '15'
    }).then(function (result) {  //正确请求成功时处理
        console.info(result);
        alert(result.data);
    }).catch(function (result) { //捕捉错误处理
        console.info(result);
        alert(result.data.Message);
    });
    //多个参数提交,JObject接收参数
    //WebApi,相应结果为json对象,不需要手动发序列化处理
    $http.post('/api/postuser/showname3', {
        name: '张三',
        age: '15'
    }).then(function (result) {  //正确请求成功时处理
        console.info(result);
        alert(result.data.name);
    }).catch(function (result) { //捕捉错误处理
        console.info(result);
        alert(result.data.Message);
    });

    更多参考:

    Asp.Net WebApi Get请求整理(一)

    Asp.Net WebAPI Get提交、Post提交处理

    Asp.Net WebApi Action命名中已‘Get’开头问题

  • 相关阅读:
    wtl 支持托拽文件并在ListBox框中显示文件路径的方法
    提升本程序进程优先级和权限(VC++源代码)
    Win7下运行VC程序UAC权限问题
    Flex中带for的循环
    Flex注释
    Flex建立编译环境
    Flex事件驱动机制
    Flex应用程序的系统开发周期
    Linux下c开发 之 线程通信
    将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务
  • 原文地址:https://www.cnblogs.com/tianma3798/p/6362896.html
Copyright © 2011-2022 走看看