请求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);
} }
(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",""}
}); 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();
}
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, , 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, , bytes.Length); //声明一个HttpWebRequest请求
request.Timeout = ;
//设置连接超时时间
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;
}
}
调用的使用方法
(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);
}
(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);
}
页面通过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);
}
});
请求WebApi的几种方式的更多相关文章
- Android请求服务器的两种方式--post, get的区别
android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...
- struts2 添加请求后缀的3种方式
第一种方式在struts.xml文件中添加 <constant name="struts.action.extension" value="">&l ...
- django中csrftoken跨站请求伪造的几种方式
1.介绍 我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击.但是这样直接注释掉并不是理智型 ...
- jmeter请求参数的两种方式
Jmeter做接口测试,Body与Parameters的选取 1.普通的post请求和上传接口,选择Parameters. 2.json和xml请求接口,选择Body. 注意: 在做接口测试时注意下请 ...
- Ajax请求数据的两种方式
ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...
- jquery 请求返回的几种方式
页面代码 <form id="form1" runat="server"> <div> <p> Ajax请求ashx返回js ...
- Spring接收web请求参数的几种方式
1 查询参数 请求格式:url?参数1=值1&参数2=值2...同时适用于GET和POST方式spring处理查询参数的方法又有几种写法: 方法一:方法参数名即为请求参数名 // 查询参数1 ...
- ASP.NET Core中如何调整HTTP请求大小的几种方式
一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...
- php手记之02-tp5请求参数读取三种方式
01-[推荐方式] 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息.在Thinkphp5.1中,获取请求对象数据,是由think\Request类负责,在很多场合下并不需 ...
随机推荐
- Qt图形视图框架公开课资料
接受CSDN学院的邀请,讲一次公开课,主题是Qt图形视图框架,报名链接在这里:http://edu.csdn.net/huiyiCourse/detail/228. 内容有两部分:自定义Item和拖放 ...
- PHP 记录日志
public function writelog($message) { $logFileDir = LOG_PATH; $logFile = 'monitor' . date('Y-m-d') . ...
- nodejs+express安装
1.安装nodejs http://www.nodejs.org/下载或直接安装nodejs. 安装默认会勾选加入环境变量. 打开cmd,输入node -v.测试是否成功. 2.安装express 命 ...
- C++类成员布局
在C++中对象的内存布局与类成员声明的顺序一致,静态成员放在数据区(Data Section)而非对象内存中,若多个类静态成员名称相同,C++则按照name mangling技术进行重命名保证名称的唯 ...
- 【视频演示】FireBase链接已有应用&实时数据库的配置与使用
全程无编辑,一镜到底,一帧未减,带上犯傻的时间全部不到31分钟:Firebase链接与基础功能使用如此之简单,跟我一起动手,从零开始链接Firebase吧~注意: 输入声源为笔记本自带麦克风,所以风扇 ...
- li标签的点击范围
<div class="login_menu_choose"> <ul class="cursor"> & ...
- 我对git认识
Git --- The stupid content tracker, 傻瓜内容跟踪器.Linus Torvalds 是这样给我们介绍 Git 的. Git 是用于 Linux内核开发的版本控 ...
- akka各模块
Akka的模块化做得非常好,它为不同的功能提供了不同的Jar包. akka-actor-2.0.jar – 标准Actor, 有类型Actor,等等 akka-remote-2.0.jar – 远程A ...
- MyEclipse优化-六步攻略
1.首先是jsp的可视化页面 windows -> preferences->General-> Editors -> File Associations 在上方框内选择*. ...
- 入门级 mongodb
谢谢 转载的.. (1)下载mongodb window版本:http://www.mongodb.org/dr/downloads.mongodb.org/win32/mongodb-win32 ...