热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

.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 
  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;
}

总结

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


推荐阅读
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
author-avatar
书友31443126_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有