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

 更新时间:2018年01月12日 09:48:45   作者:大饼酥  
这篇文章主要给大家介绍了关于.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;
}

总结

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

相关文章

  • 浅析ASP.NET路由模型工作原理

    浅析ASP.NET路由模型工作原理

    很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家吹下ASP.NET的路由模块是如何工作的
    2016-03-03
  • .net设计模式之装饰模式(Decorator)

    .net设计模式之装饰模式(Decorator)

    这篇文章主要为大家详细介绍了.net设计模式之装饰模式Decorator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 详解ASP.NET中加密和解密的方法

    详解ASP.NET中加密和解密的方法

    本文详细讲解了ASP.NET中加密和解密的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • .NET 6开发TodoList应用之实现全局异常处理

    .NET 6开发TodoList应用之实现全局异常处理

    因为在项目中,会有各种各样的领域异常或系统异常被抛出来,那么在Controller里就需要进行完整的try-catch捕获,并根据是否有异常抛出重新包装返回值。有没有办法让框架自己去做这件事呢?本文将为大家介绍如何实现全局异常处理,需要的可以参考一下
    2021-12-12
  • ASP.NET Core扩展库之Http通用扩展库的使用详解

    ASP.NET Core扩展库之Http通用扩展库的使用详解

    这篇文章主要介绍了ASP.NET Core扩展库之Http通用扩展库的使用详解,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下
    2021-04-04
  • .NET添加时间戳防止重放攻击

    .NET添加时间戳防止重放攻击

    这篇文章主要介绍了.NET添加时间戳防止重放攻击的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • asp.net音频转换之.amr转.mp3(利用七牛转换法)

    asp.net音频转换之.amr转.mp3(利用七牛转换法)

    相信很多人都遇到amr格式的音频文件不能直接在网页播放的问题,有人使用QuickTime插件的辅助,下面这篇文章主要给大家介绍了asp.net音频转换之利用七牛转换法将.amr格式转.mp3格式,需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • asp.net+Ligerui实现grid导出Excel和Word的方法

    asp.net+Ligerui实现grid导出Excel和Word的方法

    这篇文章主要介绍了asp.net+Ligerui实现grid导出Excel和Word的方法,实例分析了asp.net结合jQuery的Ligerui插件操作excel和word文件的技巧,需要的朋友可以参考下
    2016-04-04
  • 用Jquery访问WebService并返回Json的代码

    用Jquery访问WebService并返回Json的代码

    经常会用JavaScript访问asp.net的Webservice的需求,通常的方法是用asp.net ajax来解决,但asp.net ajax框架在不国内并不经常被使用。
    2008-09-09
  • .NET 6新特性试用之常量内插字符串

    .NET 6新特性试用之常量内插字符串

    这篇文章主要介绍了.NET 6新特性试用之常量内插字符串,编写代码时,我们常常需要组合字符串,下面文章对该内容进行详细介绍,需要的小伙伴可以参考一下
    2022-03-03

最新评论