说明:一个用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. Git插件报错,Appears to be a git repo or submodule

    Hexo博客需要引入第三方插件,不少包作者误把包项目得.git文件上传到github,或者在插件的github路径下直接下载插件文件夹,结果是插件内含有.git文件,导致下载别的npm包时报错npm ...

  2. 【转载】Linux虚拟化KVM-Qemu分析(一)

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...

  3. Linux 压缩文件用法

    # tar 命令:可以用来压缩或解压缩文件: # 压缩 tar -czvf filename.tar.gz files # 解压缩 tar -xzvf filename.tar.gz # gzip 命 ...

  4. disk test use sysbench and fio

    sysbench 进入到测试目录 prepare.sh sysbench --test=fileio --file-test-mode=$1 --file-num=100 --file-total-s ...

  5. 绕过PHP执行命令的函数执行系统cmd命令

    <?php $evil=`set`; echo '<pre>'.$evil.'</pre>'; ?> 成功执行set命令,你懂的! 顺手写了个php执行cmd命令的 ...

  6. 通过Proxy和Reflect实现vue的响应式原理

    vue3通过Proxy+Reflect实现响应式,vue2通过defineProperty来实现 Proxy Proxy是什么 Proxy是ES6中增加的类,表示代理. 如果我们想要监听对象的操作过程 ...

  7. JDV背后的技术-助力618

    一.项目介绍 JDV(可视化大屏)是京东内部搭建可视化大屏的数据工具平台,内置10+种模版特效,40+种风格各异的图表.导航等组件.与集团其他数据工具打通,支持一站式.自助化.拖拽式搭建大屏,实现数据 ...

  8. 一种基于ChatGPT的高效吃瓜方式的探索和研究。

    你好呀,我是歪歪. 最近掌握了一个新的吃瓜方式,我觉得还行,给大家简单分享一下. 事情说来就话长了,还得从最近的一次"工业革命"开始,也就是从超导材料说起. 8 月 1 日的时候 ...

  9. Linux下后台运行Java程序

    1.背景描述 用Java编写了一个程序(可执行的jar),需要在Linux中启动并持续运行 1.1.直接执行程序 直接执行程序后,在程序执行期间,无法在当前会话中再执行其他操作 1.2.直接执行程序后 ...

  10. TIDB - 分布式数据库

    TIDB(一) 重点 TIDB核心 数据存储-RocksDB Raft 协议 选举 数据同步 MVCC 表数据与kv映射关系 索引数据与kv 映射关系 元数据和sql 层计算 PD调度 HTAP 特性 ...