说明:一个用C#编写的WebAPI操作类,只写了Get Post 部分。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks; namespace Assets.Scripts.Models
{
class WebAPIOperator
{
static string ip = ConfigMan.ReadNode("ServerSet", "ip");
static string port = ConfigMan.ReadNode("ServerSet", "port");
static string baseUri = "http://" + ip + ":" + port;
/// <summary>
/// 服务器通信状态
/// </summary>
public static bool NetState = true; public static HttpClient httpClient; #region CTOR
private WebAPIOperator()
{
httpClient.BaseAddress = new Uri(baseUri);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("Application/json"));
}
#endregion #region Async Task
public static async Task RunAsync()
{
httpClient.BaseAddress = new Uri(baseUri);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("Application/json")); try
{
//执行API任务
}
catch (Exception)
{
throw;
}
}
#endregion #region init
public static void initAPI()
{
ip = ConfigMan.ReadNode("ServerSet", "ip");
port = ConfigMan.ReadNode("ServerSet", "port");
baseUri = "http://" + ip + ":" + port;
httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(baseUri);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("Application/json"));
//系统默认超时100s
//https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient.timeout?view=netframework-4.8#System_Net_Http_HttpClient_Timeout
//httpClient.Timeout = TimeSpan.FromMinutes(1);//超时60s
}
#endregion #region Get
/// <summary>
/// WebAPI Get方法,返回JObject
/// </summary>
/// <param name="uri">带参数的uri</param>
/// <returns></returns>
public static async Task<JObject> GetAsync(string uri)
{
JObject o = null;
try
{
HttpResponseMessage response = new HttpResponseMessage();
response = await httpClient.GetAsync(uri);
if (response != null && response.IsSuccessStatusCode)
{
string jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
JObject jobj = JObject.Parse(jsonStr);//转换为JObject
//o=...
//保存数据到文件等
//List_Screen.Items.Add(jsonStr);
o = jobj;
NetState = true;
}
else
{
NetState = false;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//更新网络状态
NetState = false;
//Log4NetHelper.Error("网络掉线", ex);
}
return o;
}
/// <summary>
/// WebAPI GET方法,返回string json,用于反序列化
/// </summary>
/// <param name="uri"></param>
/// <returns></returns>
public static async Task<string> GetAsync_uri(string uri)
{
string jsonStr = "";
try
{
HttpResponseMessage response = await httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
//JObject jobj = JObject.Parse(jsonStr);//转换为JObject
//o=...
//保存数据到文件等
//List_Screen.Items.Add(jsonStr);
//o = jobj;
}
NetState = true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//更新网络状态
NetState = false;
//RoutedEventArgs args = new RoutedEventArgs(UpdateNetStateEvent);
//new ImageButton().RaiseEvent(args);
//Log4NetHelper.Error("网络掉线", ex);
} return jsonStr;
}
#endregion #region POST
public static async Task<string> PostAsync(string uri, Object obj)
{
string o = "";
string jsonStr = JsonConvert.SerializeObject(obj);
HttpResponseMessage response = await httpClient.PostAsJsonAsync<Object>(uri, obj);
//response.EnsureSuccessStatusCode();//响应失败时,用于触发异常
//return response.Headers.Location;
if (response.IsSuccessStatusCode)
{
//string jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
//JObject jobj = JObject.Parse(jsonStr);
//o = jobj;
//o = await response.Content.ReadAsAsync<object>();
o = await response.Content.ReadAsStringAsync();
}
return o;
}
public static async Task<object> PostAsync(string uri, string userName, string password)
{
Object o = null;
HttpContent httpContent = new StringContent("loginName=" + userName + "&password=" + password);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response = await httpClient.PostAsync(uri, httpContent);
if (response.IsSuccessStatusCode)
{
string jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
JObject jobj = JObject.Parse(jsonStr);
o = jobj;
}
return o;
}
#endregion #region PUT
//static async Task<Object> PutAsync(string uri, Object o)
//{
// HttpResponseMessage response = await httpClient.PutAsJsonAsync<Object>(uri + "//id=" + 123, o);
// response.EnsureSuccessStatusCode();
// o = await response.Content.ReadAsAsync<Object>();
// return o;
}
#endregion #region Delete
//static async Task<HttpStatusCode> DeleteAsync(string uri, string id)
//{
// HttpResponseMessage response = await httpClient.DeleteAsync(uri + "//" + id);
// return response.StatusCode;
//}
#endregion }

C# -WebAPIOperator.cs的更多相关文章

  1. [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  2. Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结

    Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结 1.1. 软件体系架构是沿着单机到 CS 架构,再到 BS 的三层架构甚至多层架构逐步发展过来的,关于 ...

  3. 从java文件和CS文件里查询方法使用次数工具

    前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了 ...

  4. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  5. .net 用户控件ascx.cs注册js脚本代码无效果

    在.net web项目中碰到一个比较奇怪的问题,网上没找到解决方案,先自己mark一下 问题描述: 添加一个用户控件ascx,在后端.cs添加js注册脚本,执行后没有弹出框 注册脚本为: this.P ...

  6. DateHelper.cs日期时间操作辅助类C#

    //==================================================================== //** Copyright © classbao.com ...

  7. 仅用aspx文件实现Ajax调用后台cs程序。(实例)

    仅用aspx文件实现Ajax调用后台cs无刷新程序.(实例) 两个文件:aaa.aspx 和aaa.aspx.cs 一.aaa.aspx <script type="text/java ...

  8. Etw EventSourceProvider_EventsProducer.cs OopConsoleTraceEventListenerMonitor_TraceControllerEventsConsumer.cs

    // EventSourceProvider_EventsProducer.cs /* /r:"D:\Microshaoft.Nuget.Packages\Microsoft.Diagnos ...

  9. WPF根据Oracle数据库的表,生成CS文件小工具

    开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...

  10. 用CS的思维可以指导BS的项目吗?

    最近项目上线,越来越觉的让人不爽.1.在录数据的界面领导要求用Enter键一路打下来,用户不用操作鼠标数据就可以录完. 2.CS的项目中用快捷键的确很方便,但是大家在BS的项目中也用快捷键吗? 反正我 ...

随机推荐

  1. 【Shell】数组

    数组 bash 只支持一维数组. 数组下标从 0 开始,下标可以是整数或算术表达式,其值应大于或等于 0. 创建数组 # 创建数组的不同方式 nums=([2]=2 [0]=0 [1]=1) colo ...

  2. Python根目录中没有Scripts文件夹问题

    电脑版本是win10,配置好python的环境变量,确保可以运行python命令. 1.打开cmd命令行输入 python -m ensurepip 2.查看Python根目录下,有没有新生成Scri ...

  3. Redis的设计与实现(5)-整数集合

    整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现. 整数集合 (intset) 是 Re ...

  4. [kubernetes]二进制部署k8s集群-基于containerd

    0. 前言 k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker.其实docker自身也是调用containerd,与其k8s通过d ...

  5. 移动优先与响应式Web设计

    1.加速度计-设备置向 2.下拉更新-Iscroll 3.滑动以得到更多选项-panel 4.Sketch a Search 雅虎 画圈搜索 5.<Tapeworthy> 移动用户的行为特 ...

  6. 深入了解Elasticsearch搜索引擎篇:倒排索引、架构设计与优化策略

    什么是倒排索引?有什么好处? 倒排索引是一种用于快速检索的数据结构,常用于搜索引擎和数据库中.与传统的正排索引不同,倒排索引是根据关键词来建立索引,而不是根据文档ID. 倒排索引的建立过程如下:首先, ...

  7. vue2原理初探-数据代理和数据劫持

    本篇文章主要想简单聊聊vue如何实现数据修改,页面联动的底层原理. 当然,篇幅有限,只是自己一些浅显的认知而已,我会从一下几个方面去聊,希望对你有所帮助. 几个基础知识点 数据代理 数据劫持 完整de ...

  8. EtherCAT转Modbus网关用Modbus Slave模拟从站配置案例

    EtherCAT转Modbus网关用Modbus Slave模拟从站配置案例 兴达易控EtherCAT到Modbus网关可以用作Modbus从站的配置.EtherCAT到Modbus网关允许Modbu ...

  9. Hadoop - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...

    Hadoop - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 配置完ha ...

  10. gitbook生成静态页面不跳转

    gitbook页面不跳转 现在可以在localhost:4000/查看自己的网页了.而且生成的网页存在_book文件夹中,下次点击 _book文件夹中的index.html就能打开网页,内容无更新,就 ...