说明:一个用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. Struts2 小知识点

    配置struts.xml文件,选择开发模式 在实际应用开发或者是产品部署的时候,对应着两种模式: 开发模式(devMode):此时 DevMode=ture: 产品模式(proMode):此时 Dev ...

  2. PDF书签的编辑器,基于(python、Tkinter)

    使用 脚本 在github下载源码. 安装python3 安装必要的python包 pip install numpy pip install pandas pip install PyMuPDF p ...

  3. 行行AI人才直播第13期:刘红林律师《AIGC创业者4大法律问题需注意》

    行行AI人才(海南行行智能科技有限公司)是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. AIGC爆火至今,商业落地已成为各行各业焦点的问题.它的广泛应用也带来了一系列的法律风险和挑战.一 ...

  4. 什么是PMP?

    PMP(Project Management Professional)中文名称叫项目管理专业人士资格认证.它是由美国项目管理协会(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...

  5. VS Code 有哪些好用的插件呢?【持续更新】

    一.画图工具:vscode-drawio   功能:在 VSCode 中画流程图.数据流图等等.        使用方法:     创建一个后缀名为 .drawio 的文件,然后用 VSCode 打开 ...

  6. Hugging Face 的文本生成和大语言模型的开源生态

    [更新于 2023 年 7 月 23 日: 添加 Llama 2.] 文本生成和对话技术已经出现多年了.早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性.更忠实的输出一般更缺少创造性 ...

  7. [ABC132D] Blue and Red Balls

    2023-01-16 题目 题目传送门 翻译 翻译 难度&重要性(1~10):3 题目来源 AtCoder 题目算法 dp 解题思路 因为蓝球的数量是固定的,题目让我们求,在取 \(i\) 次 ...

  8. 【Windows】KMS 激活命令记录

    目录 KMS 服务器激活 Office.Visio 推荐使用 office tool plus 部署并配置 KMS 激活 什么是 KMS? KMS 正版与否的区别 总结 KMS 服务器激活 利用 KM ...

  9. Web通用漏洞--sql注入

    SQL注入 mysql注入目的:获取当前web权限 mysql注入--常规查询&union联合查询 MYSQL--Web组成架构 服务器搭建web服务可能存在多个站点搭建在一台服务器中,数据集 ...

  10. Jmeter关联之正则表达式提取器

    正则表达式简介 摘自网上的说法,正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种 逻辑公式,就是用事先定义好的一些特定字符 ...