• webapi简介及参数绑定


    介绍:
    WebAPI用来开发系统间接口的技术,基于HTTP协议,返回默认是json格式。比wcf简单 更通用,更轻量级,更省流量(json格式);
    WebAPI尽可能复用MVC路由、ModelBinder、Filter等知识,但只是模仿
    webapi默认路由机制是通过http请求类型匹配Action(REST风格),而MVC的默认路由机制是通过url匹配Action。
    可以修改webapi默认路由机制,通过url匹配action

    Restfull风格:
    就是基于谓词语义进行通讯协议的设计(利用get、post、put、delete请求接口,并通过http状态码返回结果,但是太多不好用)

    webapi参数绑定:
    get请求:

    可以有多个重载、多个参数
    如果使用实体参数,实体参数需要加[FromUri]

    post请求:

    所以只能有一个参数,如果有多个参数,需要以对象的方式传递、或者JObject参数

    单个参数,需要加[FromBody],键名称必须是空字符串
    实体参数,不需要加[FromBody]
    实体参数也可以使用JObject参数接收
    可以传json格式字符串,自动绑定实体(请求类型需要设置为json格式 contentType:json)

    put请求:

    只能有两个参数,一个通过querystring方式传递,作为要更新对象的主键,另一个是[FromBody]字段,如果是多个字段需要封装成实体

        public class ValuesController : ApiController
        {
            [HttpGet]
            public string Index([FromUri]User user)
            {
                return "index1";
            }
            [HttpGet]
            public string Index33(string name, int id)
            {
                return "index33";
            }
            [HttpGet]
            public string Index2(int id)
            {
                return "index2";
            }
            [HttpPost]
            public string PIndex1(int id)
            {
                return "pindex1";
            }
            [HttpPost]
            public string PIndex2([FromBody]int id)
            {
                return "pindex2";
            }
            [HttpPost]
            public string PIndex3(User user)
            {
                return "pindex3";
            }
            [HttpPost]
            public string PIndex5(JObject jobj)
            {
               var user1 = jobj["UserInfo"].ToObject<User>();
                var dog1 = jobj["DogInfo"].ToObject<Dog>();
                return "pindex5";
            }[HttpPost]
            public string PIndex6(JObject jobj)
            {
               var usider1 = jobj["id"].ToObject<int>();
                var name = jobj["name"].ToObject<string>();
                return "pindex6";
            }
        }
        public class User
        {
            public int ID { get; set; }
            public string Name { get; set; }
        }
        public class Dog
        {
            public string DogName { get; set; }
        }
  • 相关阅读:
    笔试:一个逻辑题
    jmeter,学这些重点就可以了
    性能测试:通过一个案例(等待锁超时)告诉你,性能到底要不要熟悉业务逻辑?
    源码解读:webdriver client的原理 (面试自动化:如果你认为知道18种定位方式就算会自动化,那就太low了)
    测试必备:jmeter测试http协议接口的各种传参方式
    Vue笔记:封装 axios 为插件使用
    Vue笔记:使用 axios 发送请求
    Tomcat笔记:Tomcat的执行流程解析
    Git笔记:Git介绍和常用命令汇总
    Spring Boot使用Shiro实现登录授权认证
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12041806.html
Copyright © 2020-2023  润新知