说明:一个用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. 为什么 kubelet 不使用容器化部署?

    每日一问系列 为什么 kubelet 不使用容器化部署? 通过脚本(shell/ansible 等)在节点上部署 kubelet 服务时,涉及 kubelet 进程 service 启动配置.证书等, ...

  2. 【Docker】部署Tomcat

    搜索镜像 $ docker search 镜像名称:镜像TAG # 如: 没有加TAG,表示默认搜索的是最新版本的tomcat镜像 $ docker search tomcat # 如:搜索 tomc ...

  3. 分享我的 Shell 环境,git 操作效率提升 100% !

    每当我换到一个新的开发环境,蛮多东西要折腾的.比如 git.golang.环境变量等等.所以特地整理了一下,下次换新电脑也方便. ​ 本文分享我在工作中常用的环境变量 + Shell alias:比如 ...

  4. Redis从入门到放弃(6):持久化

    1.引言 Redis作为一种高性能的内存数据存储系统,常被用作缓存.会话存储.消息队列等多种应用场景.然而,由于其数据存储在内存中,一旦发生意外或服务器重启,数据就会丢失.为了保障数据的持久性和安全性 ...

  5. 其实webpack编译"模块化"的源码没那么难

    我们在 webpack初体验 这篇文章中演示到,浏览器不支持 CommonJS ,在特定场景下才支持 Es Module ,而 webpack 可以将这些模块化的代码解析成浏览器可识别的语法. 那么 ...

  6. [minio]挂载minio到本地

    前言 将minio的bucket挂载到本地文件系统 环境 客户端系统版本:centos 7 MinIO节点IP:192.168.0.20 s3fs方式步骤 安装s3fs客户端(可能需要先安装epel- ...

  7. 详细讲解原生js拖拽

    场景描述 今天遇见一个问题,那就是产品希望在弹出来的窗口. 可以移动这个弹窗的位置 增加用户体验,我们直接使用的element-ui中的 Dialog 对话框 我们现在需要拖拽标题,移动元素位置 元素 ...

  8. 通过商品API接口获取到数据后的分析和应用

    一.如果你想要分析商品API接口获取到的数据,可以按照如下的步骤进行: 了解API接口返回值的格式,如JSON格式.XML格式.CSV格式等,选择适合你的数据分析方式. 使用API请求工具(如Post ...

  9. iFiles浏览iphone文件

    我们希望能在iphone中浏览文件系统的目录

  10. 拓展kmp

    Smiling & Weeping ---- 我从不觉得暗恋是苦涩的, 对一个人的喜欢藏在眼睛里, 透过它, 世界都变得更好看了. 题目:P5410 [模板]扩展 KMP(Z 函数) - 洛谷 ...