C# 请求第三方接口方式

方式1

curl

string postData = JsonConvert.SerializeObject(requestData);

// 定义curl命令及其参数

string curlPath = "curl"; // 假设curl命令在系统的PATH环境变量中

string path = "-X POST -H "Content-Type: application/json;charset=UTF-8" -H "Accept-Charset: UTF-8" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh;q=0.9" -d " + Regex.Replace(postData, @"""|\", "\$&") + " " + GlobalInfo.BaseUrl + "/weightCheck/submitSpc"; // curl的参数,即你想要执行的HTTP请求

// 创建ProcessStartInfo对象来配置进程启动信息

ProcessStartInfo startInfo = new ProcessStartInfo

{

FileName = curlPath, // 命令行程序的名称或路径

Arguments = path, // 传递给命令行程序的参数

UseShellExecute = false, // 是否使用操作系统shell启动进程

RedirectStandardOutput = true, // 是否将输出重定向到Process.StandardOutput流

CreateNoWindow = true // 不创建新窗口

};

string output;

// 启动进程并执行命令

using (Process process = new Process { StartInfo = startInfo })

{

process.Start();

复制代码
// 使用 UTF-8 编码的 StreamReader 异步读取进程的标准输出  
using (StreamReader reader = new StreamReader(process.StandardOutput.BaseStream, Encoding.UTF8))
{
    output = await reader.ReadToEndAsync(); // 异步读取所有输出
    Console.WriteLine(output); // 打印输出到控制台  
}

await process.WaitForExitAsync(); // 异步等待进程完成
process.Close();

}

var json = JsonConvert.DeserializeObject(output);

if (json.code.Equals(20000) && json.data != null)

{

Growl.Success(new GrowlInfo() { Message = "提交成功!", WaitTime = 1 });

return JsonConvert.DeserializeObject<List>(json.data.ToString());

}

else

{

throw new Exception($"请确认网络连接是否正常!! - 错误码: {json.code}");

}

方式2

HttpClient

using (var httpClient = new HttpClient())

{

httpClient.Timeout = TimeSpan.FromSeconds(20);

复制代码
 var content = new StringContent(postData, Encoding.UTF8, "application/json");

 using (var response = await httpClient.PostAsync(GlobalInfo.BaseUrl + "/weightCheck/submitSpc", content))
 {
     if (response.IsSuccessStatusCode)
     {
         string responseBody = await response.Content.ReadAsStringAsync();
         var json = JsonConvert.DeserializeObject<ResponseDto>(responseBody);

         if (json.code == 20000 && json.data != null)
         {
             XTrace.WriteLine($"提交成功!");
             return JsonConvert.DeserializeObject<List<SpcLimitDto>>(json.data.ToString());
         }
     }
     else
     {
         // Handle unsuccessful response
         Console.WriteLine($"HTTP request failed with status code {response.StatusCode}");
     }
 }

}

方式3

RestSharp

try

{

var client = new RestClient(GlobalInfo.BaseUrl);

var request = new RestRequest("/weightCheck/submitSpc", Method.Post);

request.AddHeader("Content-Type", "application/json");

request.AddHeader("Accept", "application/json");

request.AddParameter("application/json", postData, ParameterType.RequestBody);

复制代码
 RestResponse response = client.Execute(request);
 var content = response.Content;

 if (response.StatusCode == HttpStatusCode.OK)
 {
     var json = JsonConvert.DeserializeObject<ResponseDto>(content);

     if (json.code.Equals(20000) && json.data != null)
     {
         Growl.Success(new GrowlInfo() { Message = "提交成功!", WaitTime = 1 });
         spcDataList = JsonConvert.DeserializeObject<List<SpcLimitDto>>(json.data.ToString());
         return spcDataList;
     }
     else
     {
         throw new Exception($"请确认网络连接是否正常!! - 错误码: {json.code}");
     }
 }
 else
 {
     throw new Exception($"请求失败: {response.StatusCode}");
 }

}

catch (Exception ex)

{

Growl.Error(new GrowlInfo() { Message = $"提交失败! -{ex.Message}", WaitTime = 2 });

throw; // 抛出异常以供调用者处理

}

相关推荐
熊猫钓鱼>_>17 分钟前
三方库 NDK 原生模块跨平台适配与调试【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙心迹
步步为营DotNet18 分钟前
.NET 可观测性选型:Metrics、ActivitySource、EventSource 到底该用哪个
c#·.net·metrics·可观测性
HANDY0920023 分钟前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
1024奇点9 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch10 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
Knight_AL11 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing0312 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
吃一碗粉只付一碗钱12 小时前
16-SqlSugar多库ConfigId与按实体选连接
sqlserver·c#
by2099912 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河12 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融