C#请求接口

发布于 2020-03-10  300 次阅读



WebApi 接口 跨域 → 配置服务端的web.config

//在Web.config中进行配置

           <system.webServer>

                     <httpProtocol>

                           <customHeaders>

                                       <add name="Access-Control-Allow-Origin" value="*" />

                                       <add name="Access-Control-Allow-Methods" value="HEAD, GET, POST, PUT, PATCH, DELETE,                                                  OPTIONS" />

                                       <add name="Access-Control-Allow-Headers" value="*" />

                          </customHeaders>

                   </httpProtocol>

        </system.webServer>


重点:调用接口
Ajax 调用接口 (html 页面中通过js/jquery中的Ajax) 重点

代码实例 --- 一般来说后端使用JQ是最多的ajax

    <script src="jquery-3.2.1.min.js"></script> //引入JQ
    <script>
        $(function () {
            $("#btnAdd").click(function () {
                var name = $("#name").val();
                var fenlei = $("#fenlei").val();
                $.ajax({
                    url:"http://localhost:3183/api/Default", //api/{控制器名称}/{id}
                    type: "post",
                    data: { "nName": name, "nfl": fenlei },
                    success: function (data) {
                        if (data=="成功") {
                            alert("添加成功")
                            window.location.href = 'ListPage.html';
                        }
                        console.log(data);
                    }
                })
            })
        })
    </script>
//这里是整理比较详细的一套
$.ajax({
           // #这里填写你在服务器上面的IP/域名
            url:"http://www.xxx.xxx:xxxx/api/findActivity",
            //#请求方式
            method: "post",
            //#请求参数的格式
            data: JSON.stringify(data),
            //#内容结构
            contentType: "application/json;charset=UTF-8",
            //#请求数的类型
            dataType: "json",
            //#返回值
            success: function (data) {
                if (data) {
                    console.log(data)
                }
            },
            error: function () {
                
            }

注意:JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串,如果指定了 replacer 是一个函数,则可以选择性地替换值,或者如果指定了 replacer 是一个数组,则可选择性地仅包含数组指定的属性。

具体语法  JSON.stringify(value[, replacer [, space]])

更多JSON.stringify ( ) 方法参考

  • 1:type 表示请求的方式
  • 2:url 请求的url,这里必须要注意的是,ajax如果跨域的话,还需要我们在做处理。
  • 3:datatype 数据的格式
  • 4:data 请求的数据
  • 5:success 如果请求成功的回调函数

WebAPI中的请求动词:get,post,put,delete 遵循的RestFul风格

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。

options请求属于浏览器的预检请求,查看服务器是否接受请求,预检通过后,浏览器才回去发现get,post,put,delete等请求。至于什么情况下浏览器会发预检请求,浏览器会将请求分为两类,简单请求和非简单请求,非简单请求会产生预检options请求

Options 请求方式 预检测 服务器请求是否安全--》delete put

关于options请求具体详细的可以观看另一位作者的这篇文章

api的访问路由规则是什么:

api/{控制器名称}/{id}

假如url前缀一样的话可以使用 [RoutePrefix] (公共部分)

  • HttpWebRequest 请求
  • HttpWebResponse 接收响应的时候用(返回值)
  • 数据的传输 是通过流(Stream==>system.IO)
  • Stream 流 可以通过对象来进行调用write read函数

StreamReader 读取数据

StreamWriter 写入数据

常用请求:
webAPI中 请求的方法 可能带参数也可能不带参数
参数(基本数据类型参数 int/double 复杂类型 类 对象)
HttpWebRequest 在请求的时候,需要把参数写入文件流中访问对应的方法 write Stream

通过c#请求完api之后,通过流的读取,是一个json字符串

C#中json字符串的序列化和反序列化

使用开放工具Visual Studio 内的工具

Newtonsoft.Json , 是.Net中开源的Json 序列化和反序列化工具,官网地址 http://www.newtonsoft.com/json

具体使用

1、右键项目 =>点击Nuget包管理=>浏览中添加 Newtonsoft.Json

添加完毕后引入命名空间

using Newtonsoft.Json

 //自定义Student类     
public class Student
     {  
        public int ID { get; set; }
 
        public string Name { get; set; }

        public int Age { get; set; }

        public string Sex { get; set; }
     }

对象转json字符串

string jsStr=Newtonsoft.Json.JsonConvert.SerializeObject(对象)

json字符串转对象

User user=JsonConvert.DeserializeObject("json字符串");

下篇是引用他人讲解的关于使用Newtonsoft的序列化和反序列化代码 -----链接

/** 使用 Newtonsoft.Json 序列化对象 **/
[WebMethod]
public String getPersonInfos() {
    // 初始化数据
    List < Pserson > mlist = new List < Pserson > ();
    for (int i = 0; i < 5; i++)
    {
        Pserson mpersopn = new Pserson();
        mpersopn.name = "张三";
        mpersopn.sex = i % 2 == 0 ? "男" : "女";
        mpersopn.age = 20 + i;
        mlist.Add(mpersopn);
    }
    CallbackObject mcallback = new CallbackObject();
    mcallback.falg = "200";
    mcallback.message = "请求成功";
    mcallback.result = mlist;
    String str = JsonConvert.SerializeObject(mcallback);
    return str;
}