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

转载  2018-01-12   作者:大饼酥   我要评论

这篇文章主要给大家介绍了关于.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 MVC异常处理模块详解

    ASP.NET MVC异常处理模块详解

    这篇文章主要为大家详细介绍了ASP.NET MVC异常处理模块,对异常处理感兴趣的小伙伴们可以参考一下
    2016-03-03
  • ASP.NET Core 1.0实现邮件发送功能

    ASP.NET Core 1.0实现邮件发送功能

    这篇文章主要为大家详细介绍了ASP.NET Core 1.0实现邮件发送功能的相关资料,需要的朋友可以参考下
    2016-07-07
  • 解析linq to xml操作XML的示例分析

    解析linq to xml操作XML的示例分析

    本篇文章是对linq to xml操作XML的示例进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • ASP.NET Core项目配置教程(6)

    ASP.NET Core项目配置教程(6)

    这篇文章主要为大家详细介绍了ASP.NET Core项目配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Asp.net静态方法之Grid转DataTable方法实现步骤

    Asp.net静态方法之Grid转DataTable方法实现步骤

    GridView绑定DataTable后,如何获取GridView绑定后显示的值,在项目需求的背景下写了一个静态方法,经过在项目中的使用,bug的修复,较为稳定
    2013-04-04
  • 封装的一个asp.net验证码类

    封装的一个asp.net验证码类

    昨天在一个Q群上面群主发了一个用ASP.NET实现验证码的demo,下载下来然后运行正常,页面上的img标签成功调用了一个一般处理程序并显示了中文的验证码图片,虽然有点模糊,但是可见上面是四个中文,图片背景为白色,背后有噪点线,边框黑色。
    2010-12-12
  • ASP.NET中日历控件和JS版日历控件的使用方法(第5节)

    ASP.NET中日历控件和JS版日历控件的使用方法(第5节)

    这篇文章主要介绍了ASP.NET中日历控件和JS版日历控件的使用方法,需要的朋友可以参考下
    2015-08-08
  • .net微信服务号发送红包

    .net微信服务号发送红包

    这篇文章主要为大家详细介绍了.net微信服务号发送红包的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • asp.net querystring乱码解决方法

    asp.net querystring乱码解决方法

    GB2312的网站如果直接用javascript进行ajax数据提交,会导致querystring乱码,下面提供一下解决方法
    2014-02-02
  • .net indexOf(String.indexOf 方法)

    .net indexOf(String.indexOf 方法)

    字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回 -1
    2012-10-10

最新评论