restclient发送json_.Net整合Json实现REST服务客户端的方法详解

前言

本文主要给大家介绍了关于.Net整合Json实现REST服务客户端的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一. 准备工作

1. 点击官网 或 本地 下载支持.Net4.0 的Json插件 Newtonsoft.Json

2. 找到 %压缩包%\Bin\net40\Newtonsoft.Json.dll ,在工程中引用

二. 相关代码介绍

1. HttpClientUtil.cs  封装REST方法

using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Net;

using System.Text;

namespace psi.Common

{

public class HttpClientUtil

{

// REST @GET 方法,根据泛型自动转换成实体,支持List

public static T doGetMethodToObj(string url)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "get";

request.ContentType = "application/json;charset=UTF-8";

HttpWebResponse response = null;

try

{

response = (HttpWebResponse)request.GetResponse();

}

catch (WebException e)

{

response = (HttpWebResponse)e.Response;

return default(T);

}

string json = getResponseString(response);

return JsonConvert.DeserializeObject(json);

}

// 将 HttpWebResponse 返回结果转换成 string

private static string getResponseString(HttpWebResponse response)

{

string json = null;

using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")))

{

json = reader.ReadToEnd();

}

return json;

}

// 获取异常信息

private static string getRestErrorMessage(HttpWebResponse errorResponse)

{

string errorhtml = getResponseString(errorResponse);

string errorkey = "UnhandledException:";

errorhtml = errorhtml.Substring(errorhtml.IndexOf(errorkey) + errorkey.Length);

errorhtml = errorhtml.Substring(0, errorhtml.IndexOf("\n"));

return errorhtml;

}

// REST @POST 方法

public static T doPostMethodToObj(string url, string jsonBody)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "post";

request.ContentType = "application/json;charset=UTF-8";

var stream = request.GetRequestStream();

using (var writer = new StreamWriter(stream))

{

writer.Write(jsonBody);

writer.Flush();

}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

string json = getResponseString(response);

return JsonConvert.DeserializeObject(json);

}

// REST @PUT 方法

public static string doPutMethod(string url)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "put";

request.ContentType = "application/json;charset=UTF-8";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")))

{

return reader.ReadToEnd();

}

}

// REST @PUT 方法,带发送内容主体

public static T doPutMethodToObj(string url, string jsonBody)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "put";

request.ContentType = "application/json;charset=UTF-8";

request.Timeout = 30 * 1000;

var stream = request.GetRequestStream();

using (var writer = new StreamWriter(stream))

{

writer.Write(jsonBody);

writer.Flush();

}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

string json = getResponseString(response);

return JsonConvert.DeserializeObject(json);

}

// REST @DELETE 方法

public static bool doDeleteMethod(string url)

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "delete";

request.ContentType = "application/json;charset=UTF-8";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")))

{

string responseString = reader.ReadToEnd();

if (responseString.Equals("1"))

{

return true;

}

return false;

}

}

}

}

2. 调用REST服务端方法,以Json作为数据格式

///

/// 取得升级服务端的url地址

///

///

private String getServerUrl()

{

String result = "";

UpgraderClient upgraderClient = getUpgraderClient();

if (upgraderClient != null)

{

result += "http://" + upgraderClient.serverIP +

":" + upgraderClient.serverPort +

"/upgraderServer/service/upgrade.do";

}

return result;

}

///

/// 测试与升级服务端的连接

///

///

public bool testConnect()

{

FileRequest fileReq = new FileRequest();

fileReq.type = (int)RequestType.TEST_CONNECT;

string jsonData = JsonConvert.SerializeObject(fileReq);

FileResponse rep = null;

try

{

rep = HttpClientUtil.doPostMethodToObj(getServerUrl(), jsonData);

} catch

{

throw new Exception("连接远程服务端失败!");

}

return rep.status == 200;

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值