当前位置: 首页 > 编程笔记 >

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

司徒斌
2023-03-14
本文向大家介绍.Net整合Json实现REST服务客户端的方法详解,包括了.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;
}

总结

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

 类似资料:
  • 问题内容: 我是Android开发的新手,想知道是否有针对REST / JSON客户端实施的实际解决方案。似乎大多数Android开发人员都是基于Apache HTTP客户端+ GSON或org.json编写自己的实现。我不喜欢手动编写所有这些代码的想法-我有什么可以用来不重新发明自行车的? 问题答案: 在寻找答案四个小时之后,我决定使用CRest- http: //crest.codegist.

  • 本文向大家介绍Redis发布订阅和实现.NET客户端详解,包括了Redis发布订阅和实现.NET客户端详解的使用技巧和注意事项,需要的朋友参考一下 前言 发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新。 然而它也有自己的缺点,就是当主题发生一系列的变化时,观察者都要做批量的更新,如果这样的更新成本很高,那

  • 本文向大家介绍php上传图片客户端和服务器端实现方法,包括了php上传图片客户端和服务器端实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php上传图片客户端和服务器端实现方法。分享给大家供大家参考。具体如下: 前台表单代码 后端php代码 希望本文所述对大家的php程序设计有所帮助。

  • 本文向大家介绍python实现telnet客户端的方法,包括了python实现telnet客户端的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现telnet客户端的方法。分享给大家供大家参考。具体如下: python实现的telnet客户端程序,python自带一个telnetlib模块,可以通过其Telnet类实现telnet操作 希望本文所述对大家的Python程

  • 服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱。Netflix服务发现服务器和客户端是Eureka。可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器。 如何包含Eureka客户端 要在您的项目中包含Eureka客户端,请使用组org.springframework.cloud和工件ID spring-cloud-st

  • 正在编写一个服务器,使用Java套接字的客户端聊天程序。这是我的服务器套接字类的代码。 客户端能够建立连接并向服务器发送消息。服务器也可以接收客户端发送的消息。问题是当消息从服务器发送时,客户端没有收到消息。这是我的客户端套接字代码。