.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<T>
  public static T doGetMethodToObj<T>(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<T>(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<T>(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<T>(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<T>(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<T>(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作为数据格式

/// <summary>
/// 取得升级服务端的url地址
/// </summary>
/// <returns></returns>
private String getServerUrl()
{
 String result = "";
 UpgraderClient upgraderClient = getUpgraderClient();
 if (upgraderClient != null)
 {
  result += "http://" + upgraderClient.serverIP +
   ":" + upgraderClient.serverPort +
   "/upgraderServer/service/upgrade.do";
 }
 return result;
}

/// <summary>
/// 测试与升级服务端的连接
/// </summary>
/// <returns></returns>
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<FileResponse>(getServerUrl(), jsonData);
 } catch
 {
  throw new Exception("连接远程服务端失败!");
 }
 return rep.status == 200;
}

总结

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

(0)

相关推荐

  • asp.net MVC下使用rest的方法

    前言 最近做了下个MVC的项目,需要用到rest接口,与java写的应用程序通信,包括数据的接收和发送,那么我将用实用的角度来全面的讲解一下它的使用方法 一.创建rest服务 首先创建一个Asp.Net Web应用程序(我这里用的是Visual Studio 2013,它已经内置了Web API2). 在出来的模板中选择Empty(空项目),并勾选WebAPI.点击确定后,就创建了一个空的WebAPI服务. 此时只有一个空项目,还没有任何功能,在进行下一步之前,首先我们来看一下REST的基本操作

  • asp.net中各种类型的JSON格式化

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Reflection; using System.Collections; using System.Data.Common; public class ConvertJson { #region 私有方法 /// <summary> /// 过滤特殊字符 /// </s

  • asp.net(C#)解析Json的类代码

    本次工作内容是要将以下数据解析成.Net可以使用的数据,返回的数据除了header,其他的都是可变的,也就是说结构不是固定的.完全由用户选择,所以选择了生成DataTable. Json数据格式如下: 复制代码 代码如下: {"dataSet":{ "header":{ "returnCode":"0", "errorInfo":"HTTP请求错误", "version&quo

  • 浅析ASP.NET万能JSON解析器

    概念介绍还是先简单说说Json的一些例子吧.注意,以下概念是我自己定义的,可以参考.net里面的TYPE的模型设计如果有争议,欢迎提出来探讨! 1.最简单:{"total":0} total就是值,值是数值,等于0 2. 复杂点{"total":0,"data":{"377149574" : 1}}total是值,data是对象,这个对象包含了"377149574"这个值,等于1 3. 最复杂{"

  • .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

  • SpringBoot整合MinIO实现文件上传的方法详解

    目录 前言 1. MinIO 简介 2. MinIO 安装 3. 整合 Spring Boot 4. 配置nginx 5. 小结 前言 现在 OSS 服务算是一个基础服务了,很多云服务厂商都有提供这样的服务,价格也不贵,松哥自己的网站用的就是类似的服务. 不过对于中小公司来说,除了购买 OSS 服务之外,也可以自己搭建专业的文件服务器,自己搭建专门的文件服务器的话,曾经比较专业的做法是 FastDFS,松哥之前也专门为之录过视频发在 B 站上,感兴趣的小伙伴可以自行查看.不过 FastDFS 搭

  • json跨域调用python的方法详解

    本文实例讲述了json跨域调用python的方法.分享给大家供大家参考,具体如下: 客户端: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

  • python实现TCP服务器端与客户端的方法详解

    本文实例讲述了python实现TCP服务器端与客户端的方法.分享给大家供大家参考.具体如下: TCP服务器程序(tsTserv.py): from socket import * from time import ctime HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.liste

  • C#实现json格式数据解析功能的方法详解

    本文实例讲述了C#实现json格式数据解析功能的方法.分享给大家供大家参考,具体如下: 来写写json的解析吧 首先添加web引用 System.Web.Extensions 路径 c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll 接下来就是两个函数了,一个是根据key来获取,一个是根据index来获取 public static bool GetValue

  • Spring Boot整合ElasticSearch实现多版本兼容的方法详解

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和SpringBoot进行结合使用. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行封装,提供了 REST API 的操作接口 ElasticSearch作为一个高度可拓展的开源全文搜索和分析引擎,可用于快速地对大数据进行存储,搜索和分析.

  • Spring Cloud实现提供API给客户端的方法详解

    前言 现在越来越多的公司开始拥抱Spring Cloud了,Spring Boot做为下一代 web 框架,Spring Cloud 作为最新最火的微服务的翘楚,你还有什么理由拒绝.很多Java方向的同学也开始积极的学习Spring Cloud,其实这边还有一个问题就是说:虽然大家学了Eureka,Ribbon,Hystrix,Zuul,Feign等等,但是要运用到实际的项目中去还是有些难度的. 微服务难就难在服务的拆分上,框架只是工具,很多人都会用,服务拆分,服务之间的关系这些都是在拆分时候需

  • Zabbix监控SQL Server服务状态的方法详解

    SQL Server数据库的服务(SQL Server (MSSQLSERVER).SQL Server Agent (MSSQLSERVER)等服务)一般配置成自动启动,但是有时候有些服务组件也会突然停止.有些是因为异常或Bug,有些是因为配置缘故.有些是因为非规范操作(例如重启SQL Server (MSSQLSERVER)时关闭了SQL Server Agnt服务,但是没有检查或重启这个服务).那么监控SQL Server的服务状态也是数据库监控里面的一项常规工作. 以前我们用Solarw

  • SpringBoot实现整合微信支付方法详解

    目录 1.准备工作 1.1 数据库表 1.2 实体类 1.3 导入依赖 1.4 配置文件 1.5 创建读取微信支付相关信息的工具类 1.6 其他工具类 2.生成订单 2.1 远程调用用户模块和课程模块 2.2 远程调用方法的实现 2.3 根据课程id和用户id生成订单 3.查询订单信息 3.1 controller层 3.2 service层 4.生成微信支付的二维码 4.1 controller层 4.2 service层 5.查询订单支付状态 5.1 controller层 5.2 serv

  • flutter消息推送客户端集成方案详解

    目录 一.背景 二.第三方消息推送——个推 1.简介 2.注册开通 3.自定义消息推送——透传 三.项目集成 1.个推客户端flutter插件 2.Android和IOS配置 1)Android 2) iOS 3.通知栏插件flutter_local_notifications 4.个推消息与通知栏整合 最后 一.背景 公司一个CRM APP项目是用Flutter写的,根据业务要求,需要集成消息推送功能.所谓的消息推送就是系统会根据某些行为自动推送信息,手机的通知栏会接收到信息,点击可以打开ap

随机推荐