请求WebApi的几种方式

请求WebApi的几种方式

目前所了解的请求WebAPI的方式有通过后台访问api 和通过js 直接访问api接口

首先介绍下通过后台访问api的方法,可以使用HttpClient的方式也可以使用WebRequest的方式

1、HttpClient的方式

  (1)Get请求

        string url = "http://10.1.1.1:8080/";public ActionResult GetAll(){HttpClient client = new HttpClient();client.BaseAddress = new Uri(url);client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));HttpResponseMessage response = client.GetAsync("api/goods/getlist?pageindex=0&pagesize=10").Result;  // Blocking call(阻塞调用)! var result = "";if (response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}else{return Json(result);}} 
View Code

  (2)Post请求

        [HttpPost]public ActionResult AddGood(string paramObj){HttpClient client = new HttpClient();client.BaseAddress = new Uri(url);JavaScriptSerializer jss = new JavaScriptSerializer();var item = jss.Deserialize<Good>(paramObj);var content = new FormUrlEncodedContent(new Dictionary<string, string>()       {    {"Id","382accff-57b2-4d6e-ae84-a61e00a3e3b5"},{"Category","111"}});client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));HttpResponseMessage response = client.PostAsync("api/goods/add", content).Result;var result = "";if (response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}return View();}    
View Code

2、WebRequest的方式(该方式是post请求的时候传入json字符串转换成流的形式,无需再将json转换成需要的实体对象了)

所以这种方式只需写一个公共的方法,每次调用的时候传入地址和参数即可

公共方法如下:

    public class WebRequestHelper{public static string GetRequest(string url){string responseStr = string.Empty;WebRequest request = WebRequest.Create(url);request.Method = "Get";var response = request.GetResponse();Stream ReceiveStream = response.GetResponseStream();using (StreamReader stream = new StreamReader(ReceiveStream, Encoding.UTF8)){responseStr = stream.ReadToEnd();}return responseStr;}public static string PostRequest(string url, string postParameter){string responseStr = string.Empty;WebRequest request = WebRequest.Create(url);request.Method = "Post";request.ContentType = "application/json";byte[] requestData = System.Text.Encoding.UTF8.GetBytes(postParameter);request.ContentLength = requestData.Length;Stream newStream = request.GetRequestStream();newStream.Write(requestData, 0, requestData.Length);newStream.Close();var response = request.GetResponse();Stream ReceiveStream = response.GetResponseStream();using (StreamReader stream = new StreamReader(ReceiveStream, Encoding.UTF8)){responseStr = stream.ReadToEnd();}return responseStr;}/// <summary>/// Http的 WebRequest的特定实现/// </summary>/// <param name="Url"></param>/// <param name="JSONData"></param>/// <returns></returns>public static string GetResponseData(string Url, string JSONData){byte[] bytes = Encoding.UTF8.GetBytes(JSONData);HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);request.Method = "POST";request.ContentLength = bytes.Length;request.ContentType = "application/json";Stream reqstream = request.GetRequestStream();reqstream.Write(bytes, 0, bytes.Length);//声明一个HttpWebRequest请求  request.Timeout = 90000;//设置连接超时时间  request.Headers.Set("Pragma", "no-cache");HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream streamReceive = response.GetResponseStream();Encoding encoding = Encoding.UTF8;StreamReader streamReader = new StreamReader(streamReceive, encoding);string strResult = streamReader.ReadToEnd();streamReceive.Dispose();streamReader.Dispose();return strResult;}}
View Code

调用的使用方法

  (1)Get请求

        public ActionResult GetAll(){string result = WebRequestHelper.GetRequest(url + "api/goods/getlist?pageindex=0&pagesize=10");JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}
View Code

  (2)Post请求

        [HttpPost]public ActionResult AddGood(string paramObj){string result = WebRequestHelper.PostRequest(url + "api/goods/add", paramObj);JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}
View Code

页面通过jquery调用

代码如下:

        $.ajax({type: "get",url: "/goods/getall",dataType: "json",data: null,//data: JSON.stringify({//    id: "382accff-57b2-4d6e-ae84-a61e00a3e3b6"//}),contentType: "application/json;charset-utf-8",success: function (data) {console.log(data);}});var paramObj = { Id: "382accff-57b2-4d6e-ae84-a61e00a3e3b8",Category:111};$.ajax({type: "post",url: "/goods/AddGood",dataType: "json",//data: null,
            data: JSON.stringify({paramObj: JSON.stringify(paramObj)}),contentType: "application/json;charset-utf-8",success: function (data) {console.log(data);}});
View Code

 

转载于:https://www.cnblogs.com/xdot/p/6640182.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django第三篇

前端反向解析 应用场景&#xff1a;通过访问a路由&#xff0c;到达a的对应视图函数&#xff0c;函数到达对应的前端a标签 a标签的路径是b路由&#xff0c;如果我们在后端改变b路由的路径&#xff0c;那么a标签便无法访问 到b路由&#xff0c;只能手动在前端改变a标签的路径&…

leetcode792. 匹配子序列的单词数

给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数。 示例: 输入: S “abcde” words [“a”, “bb”, “acd”, “ace”] 输出: 3 解释: 有三个是 S 的子序列的单词: “a”, “acd”, “ace”。 class Solution {public int numMatchingSubseq(Strin…

react context_使用React Context API-入门

react contextLets use the React Context API to change theme in an app!让我们使用React Context API更改应用程序中的主题&#xff01; 但是首先&#xff0c;一些背景 &#xff01; &#xff1f; (But first, some context! ?) Ok terrible puns aside lets have a look …

redis本地及远程登录

redis默认只能localhost登录&#xff0c;所以需要开启远程登录。解决方法如下&#xff1a;一、在redis的配置文件redis.conf中&#xff0c;找到bind 127.0.0.11、去掉 #bind 127.0.0.1前面的#号注释&#xff0c;将bind 127.0.0.1 改成了bind 0.0.0.0&#xff08;这样不限制连接…

java初始化变量n_java中预构造函数初始化变量的属性

在Java中,可以在调用构造函数之前初始化编程变量.public class StockGraph extends JPanel {public boolean runUpdates true;double TickMarks 18;double MiddleTick TickMarks / 2;double PriceInterval 5;double StockMaximum;double StockMinimum;Random testStockValu…

烦了

桃花飞绿水 一庭芳草围新绿 有情芍药含春泪 野竹上青霄 十亩藤花落古香 无力蔷薇卧晓枝 我愿暂求造化力 减却牡丹妖艳色 花非花 梦非梦 花如梦 梦似花 梦里有花 花开如梦 心非心 镜非镜 心如镜 镜似心 镜中有心 心如明镜 ​​转载于:https://www.cnblogs.com/langdao/p/1099281…

js图片库 案例

事件处理函数&#xff1a;事件处理函数的作用是&#xff0c;在特定事件发生时调用特定的JavaScript代码。本例中想要在用户点击某个链接的时候触发一个动作&#xff0c;所以需要使用onclick事件处理函数。 添加事件处理函数的语法&#xff1a; event"JavaScript statement…

hitchhiker部署_《 Hitchhiker的React Router v4指南》:路由配置的隐藏值

hitchhiker部署Welcome to the Hitchhiker’s Guide to React Router v4, Part IV!欢迎来到《 React Router v4旅行者指南》&#xff0c;第四部分&#xff01; Now that we’ve learned about recursive routes, let’s get back to our initial boilerplate, to avoid mixing…

亮剑:PHP,我的未来不是梦(11)

2. 再说说“必备能力”说道能力&#xff0c;很多应届毕业生都愿意给自己的点评是“我的学习能力很强”或者是“具有良好的学习意识”等。这里存在着这样一个误区&#xff01;把企业当成了学校&#xff01;当成了试验室&#xff01;把老板当成了老师&#xff01;作为用人单位&am…

leetcode457. 环形数组循环

给定一个含有正整数和负整数的环形数组 nums。 如果某个索引中的数 k 为正数&#xff0c;则向前移动 k 个索引。相反&#xff0c;如果是负数 (-k)&#xff0c;则向后移动 k 个索引。因为数组是环形的&#xff0c;所以可以假设最后一个元素的下一个元素是第一个元素&#xff0c;…

Jquery的ajax提交成功后刷新页面

转载于:https://www.cnblogs.com/huoxiansudi/p/6646855.html

程序员编程经验_在没有实际编程的情况下成为更好的程序员

程序员编程经验In this talk, Ryan Johnson explains what was for him the invisible step to becoming a better developer.在演讲中&#xff0c;瑞安约翰逊(Ryan Johnson)解释了对他来说&#xff0c;成为更好的开发人员这一无形的步骤。 You can watch the full video on t…

粘贴复制

方法1: 方法二: 方法三: // 第三种 ios 设备和 android设备均正常,但是pc端没有//定义函数window.Clipboard (function(window, document, navigator) { var textArea, copy; // 判断是不是ios端 function isOS() { return navigator.userAgent.mat…

leetcode109. 有序链表转换二叉搜索树(递归)

给定一个单链表&#xff0c;其中的元素按升序排序&#xff0c;将其转换为高度平衡的二叉搜索树。本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表&#xff1a; [-10, -3, 0, 5, 9],一个可能的答案是…

mxnet教程

官方教程&#xff0c;讲的还行&#xff0c;我用自己的实例讲解。自己如何设计网络&#xff0c;自己的迭代器 1&#xff1a;引入module&#xff1a; import mxnet as mx import numpy as np import cv2 import matplotlib.pyplot as plt import logginglogger logging.getLogge…

web动画_Web动画简介

web动画by CodeDraken由CodeDraken Web动画简介 (An Introduction to Web Animations) In this introduction to web animations article, we will cover basic CSS animations using pseudo-classes, transitions, and transformations.在此Web动画简介中&#xff0c;我们将介…

java统计空间占用_JVM —— Java 对象占用空间大小计算

引用类型(reference type&#xff1a; Integer)在 32 位系统上每一个占用 4bytes(即32bit&#xff0c; 才干管理 2^324G 的内存), 在 64 位系统上每一个占用 8bytes(开启压缩为 4 bytes)。四. 对齐填充HotSpot 的对齐方式为 8 字节对齐。不足的须要 Padding 填充对齐&#xff0…

源于十年来的点滴积累——《变革中的思索》印行出版

源于归国十年来的点滴积累, 集结成书的《变革中的思索》&#xff0c;日前由电子工业出版社刊印出版。 这本书共有五个章节&#xff0c;分别是解码创新、中国智造、管理心得、我和微软、心灵记忆——前三章偏重技术&#xff0c;更多理性的思考; 后两章则工作生活中的所见所闻&am…

SpringBoot声明式事务

目录 事务的基本特征隔离级别传播行为Transcation事务的基本特征&#xff08;ACID&#xff09; Atomic&#xff08;原子性&#xff09; 事务中包含的操作被看作一个整体的业务单元&#xff0c;这个业务单元中的操作要么全部成功&#xff0c;要么全部失败&#xff0c;不会出现部…

leetcode1437. 是否所有 1 都至少相隔 k 个元素

给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素&#xff0c;则返回 True &#xff1b;否则&#xff0c;返回 False 。 示例 1&#xff1a; 输入&#xff1a;nums [1,0,0,0,1,0,0,1], k 2 输出&#xff1a;true 解释&#xff1a;每个 1 …