• Asp.Net MVC part6 WebAPI


    两种web服务
    SOAP风格:基于方法,产品是WebService
    REST风格:基于资源,产品是WebAPI
    可以返回json、xml类型的数据
    对于数据的增、删、改、查,提供相对的资源操作,按照请求的类型进行相应处理,主要包括Get(查)、Post(增)、Put(改)、Delete(删),这些都是http协议支持的请求方式
    请求方式:根据路由规则请求

    在APIController中定义crud的方法,名称可以自定义,如果对应相应的资源操作,可以使用特性约束
    主要的特性包括
    HttpGet
    HttpPost
    HttpPut
    HttpDelete

    使用方式1:jquery的ajax
    指定请求的数据类型: contentType: "application/json; charset=utf-8",//数据类型
    主要的属性:
    type:请求方式,包括Get、Post、Put、Delete
    url:请求资源,根据路由规则编写
    data:请求数据,为json格式
    contentType:请求数据的类型及编码
    dataType:返回的数据类型,可以是text、json
    success:成功处理的回调函数
    备注中为修改请求的示例
    注意:使用js的异步操作,不可以跨域访问

    var data = '{"UserId":"' + $('#userId').val() +'","UserName":"' + $('#userName').val() + '"}';
    
    
                    $.ajax({
                        type: 'PUT',//请求类型。get,post,put,delete
                        url: 'api/UserInfo/' + $('#userId').val(),//请求地址
                        data: data,//参数
                        contentType: "application/json; charset=utf-8",//数据类型
                        dataType: 'text',//返回数据类型
                        success: function (msg) {
                            if (eval(msg) == '1') {
                                InitData();
                            }
                        }
                    }); 

    使用方式2:HttpClient对象  Crud操作的API

    创建并初始化对象:
        client.BaseAddress = new Uri(url);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
    读集合:
        HttpResponseMessage response = client.GetAsync(url).Result;
         var userList = response.Content.ReadAsAsync<IEnumerable<数据类型>>().Result;
    
    根据编号读对象
        HttpResponseMessage response1 = client.GetAsync(url).Result;
        var userInfo = response1.Content.ReadAsAsync<数据类型>().Result;
    
    增加:
        HttpResponseMessage response = client.PostAsJsonAsync("api/userinfo", userInfo).Result;
        使用response.IsSuccessStatusCode判断是否成功
        使用response.Content.ToString()获取返回值
    
    修改:
         HttpResponseMessage response = client.PutAsJsonAsync("api/userinfo/"+userInfo.UserId, userInfo).Result;
        使用response.IsSuccessStatusCode判断是否成功
        使用response.Content.ToString()获取返回值
    
    删除:
        HttpResponseMessage response = client.DeleteAsync("api/userinfo/" + uid).Result;
        使用response.IsSuccessStatusCode判断是否成功
        使用response.Content.ToString()获取返回值

    原理(管道执行过程)

    获取ControllerFactory,根据上下文反射Controller对象
    在MvcHandler的PR方法中
    调用controller.Execute方法
    在MvcHandler的PR方法中
    调用ActionInvoker.InvokeAction方法
    当前Controller类-》ControllerBase类的Execute方法-》Controller类的ExecuteCore方法
    调用InvokeActionResultWithFilter
    ActionInvoker对象为ControllerActionInvoker类的实例
    调用actionResult.ExecuteResult
    调用View.Render方法,将页面渲染到输出流中
    ViewResult类-》ViewResultBase类
  • 相关阅读:
    useCallback优化React Hooks程序性能
    useMemo优化React Hooks程序性能,解决子组件重复执行问题
    使用 useReducer 和 useCallback 解决 useEffect 依赖诚实与方法内置&外置问题
    createContext 和 useContext 结合使用实现方法共享(React Hook跨组件透传上下文与性能优化)
    浅谈开发变量作用域---小坑
    优雅的在React项目中使用Redux
    浅谈react无状态组件(哑组件)和有状态组件(智能组件)的区别
    浅谈react-router和react-router-dom、react-router-native的区别
    windows系列CMD替换品Terminal控制台推荐——ConsoleZ
    struts——文件上传
  • 原文地址:https://www.cnblogs.com/CSharpLover/p/6115581.html
Copyright © 2020-2023  润新知