首页 > 编程语言 >csharp c# http request get post put delete header respons json 网络请求

csharp c# http request get post put delete header respons json 网络请求

时间:2024-01-15 22:14:17浏览次数:35  
标签:http string get c# await System client response HttpClient

C#中如何模拟一个post请求

使用HttpClient代替。以下是修改后的代码示例:

using System;
using System.Net.Http;
using System.Text.Json;

class HttpPostExample
{
    private async Task<string> HttpPost(string Url, object postData)
    {
        string postDataStr = JsonSerializer.Serialize(postData);
        HttpClient client = new HttpClient();
        StringContent content = new StringContent(postDataStr, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await client.PostAsync(Url, content);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    public async void CallHttpPostMethod()
    {
        string url = "http://www.example.com";
        object postData = new { param1 = "value1", param2 = "value2" };
        string response = await HttpPost(url, postData);
        Console.WriteLine(response);
    }
}

在上面的代码中,我们使用HttpClient类来发送POST请求。我们创建了一个名为HttpPostExample的类,并在其中定义了一个名为CallHttpPostMethod的方法。该方法调用了HttpPost方法,并将其结果打印到控制台。
请注意,我们将HttpPost方法的返回类型更改为Task,并使用await关键字异步调用client.PostAsync方法。我们还使用StringContent类将postData对象序列化为JSON字符串,并将其传递给HttpClient对象。

GET,PUT,DELETE的请求

要扩展GET、PUT和DELETE请求,您可以使用C#中的HttpClient类。以下是一个示例代码,它演示了如何使用HttpClient类来模拟GET、PUT和DELETE请求:

using System;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

class HttpExample
{
    private async Task<string> HttpGet(string Url)
    {
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync(Url);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    private async Task<string> HttpPut(string Url, object postData)
    {
        string postDataStr = JsonSerializer.Serialize(postData);
        HttpClient client = new HttpClient();
        StringContent content = new StringContent(postDataStr, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await client.PutAsync(Url, content);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    private async Task<string> HttpDelete(string Url)
    {
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.DeleteAsync(Url);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    public async void CallHttpMethods()
    {
        string getUrl = "http://www.example.com";
        string putUrl = "http://www.example.com";
        string deleteUrl = "http://www.example.com";

        string getResponse = await HttpGet(getUrl);
        Console.WriteLine(getResponse);

        object putData = new { param1 = "value1", param2 = "value2" };
        string putResponse = await HttpPut(putUrl, putData);
        Console.WriteLine(putResponse);

        string deleteResponse = await HttpDelete(deleteUrl);
        Console.WriteLine(deleteResponse);
    }
}

在上面的代码中,我们使用HttpClient类来发送GET、PUT和DELETE请求。我们创建了一个名为HttpExample的类,并在其中定义了一个名为CallHttpMethods的方法。该方法调用了HttpGet、HttpPut和HttpDelete方法,并将其结果打印到控制台。
请注意,我们使用await关键字异步调用client.GetAsync、client.PutAsync和client.DeleteAsync方法。我们还使用StringContent类将postData对象序列化为JSON字符串,并将其传递给HttpClient对象。
希望这可以帮助您!

GET请求如何传递参数-查询参数

要在GET请求中传递参数,您可以使用HttpClient类。以下是修改后的代码示例,它演示了如何使用HttpClient类来模拟带有参数的GET请求:

using System;
using System.Net.Http;
using System.Threading.Tasks;

class HttpExample
{
    private async Task<string> HttpGet(string Url, object parameters)
    {
        HttpClient client = new HttpClient();
        string queryString = "";
        if (parameters != null)
        {
            foreach (var property in parameters.GetType().GetProperties())
            {
                if (queryString.Length > 0)
                {
                    queryString += "&";
                }
                queryString += $"{property.Name}={property.GetValue(parameters)}";
            }
        }
        HttpResponseMessage response = await client.GetAsync($"{Url}?{queryString}");
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    public async void CallHttpGetMethod()
    {
        string url = "http://www.example.com";
        object parameters = new { param1 = "value1", param2 = "value2" };
        string response = await HttpGet(url, parameters);
        Console.WriteLine(response);
    }
}

在上面的代码中,我们使用HttpClient类来发送GET请求。我们创建了一个名为HttpExample的类,并在其中定义了一个名为CallHttpGetMethod的方法。该方法调用了HttpGet方法,并将其结果打印到控制台。
请注意,我们将HttpGet方法的第二个参数类型更改为object,这样就可以接受任何类型的数据。然后,我们使用反射来获取参数对象的属性,并将其转换为查询字符串,然后将其附加到URL中。

get请求,传递restful类型的参数

要在GET请求中传递RESTful类型的参数,您可以使用HttpClient类。以下是修改后的代码示例,它演示了如何使用HttpClient类来模拟带有RESTful类型参数的GET请求:

using System;
using System.Net.Http;
using System.Threading.Tasks;

class HttpExample
{
    private async Task<string> HttpGet(string Url, object parameters)
    {
        HttpClient client = new HttpClient();
        string queryString = "";
        if (parameters != null)
        {
            foreach (var property in parameters.GetType().GetProperties())
            {
                if (queryString.Length > 0)
                {
                    queryString += "/";
                }
                queryString += $"{property.GetValue(parameters)}";
            }
        }
        HttpResponseMessage response = await client.GetAsync($"{Url}/{queryString}");
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    public async void CallHttpGetMethod()
    {
        string url = "http://www.example.com";
        object parameters = new { id = 1, firstName = "John", lastName = "Doe" };
        string response = await HttpGet(url, parameters);
        Console.WriteLine(response);
    }
}

在上面的代码中,我们使用HttpClient类来发送GET请求。我们创建了一个名为HttpExample的类,并在其中定义了一个名为CallHttpGetMethod的方法。该方法调用了HttpGet方法,并将其结果打印到控制台。
请注意,我们将HttpGet方法的第二个参数类型更改为object,这样就可以接受任何类型的数据。然后,我们使用反射来获取参数对象的属性,并将其转换为RESTful类型的参数,然后将其附加到URL中。

设置请求头,模拟chrome浏览器发出的请求

要在类里面设置请求头,您可以使用HttpClient类。以下是修改后的代码示例,它演示了如何在类中设置请求头:

using System;
using System.Net.Http;
using System.Text.Json;

namespace HttpReq
{
    public class Http
    {
        private readonly string url;
        private readonly HttpClient client;

        public Http(string url)
        {
            this.url = url;
            this.client = new HttpClient();
            this.client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
        }

        public async Task<string> HttpGet()
        {
            HttpResponseMessage response = await this.client.GetAsync(this.url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            return responseBody;
        }
    }
}

在上面的代码中,我们使用HttpClient类来发送GET请求。我们创建了一个名为Http的类,并在其中定义了一个名为HttpGet的方法。该方法调用了HttpClient.GetAsync方法,并将其结果返回。
请注意,我们在类的构造函数中设置了请求头。我们使用HttpClient.DefaultRequestHeaders.Add方法将User-Agent请求头添加到HttpClient对象中。
希望这可以帮助您!

返回的内容解析成json格式

要将HttpGet返回的内容解析为JSON格式,您可以使用System.Text.Json命名空间中的JsonSerializer.Deserialize方法。以下是修改后的代码示例:

using System;
using System.Net.Http;
using System.Text.Json;

namespace HttpReq
{
    public class Http
    {
        private readonly string url;
        private readonly HttpClient client;

        public Http(string url)
        {
            this.url = url;
            this.client = new HttpClient();
            this.client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
        }

        public async Task<JsonElement> HttpGet()
        {
            HttpResponseMessage response = await this.client.GetAsync(this.url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            JsonDocument document = JsonDocument.Parse(responseBody);
            return document.RootElement;
        }
    }
}

在上面的代码中,我们使用HttpClient类来发送GET请求。我们创建了一个名为Http的类,并在其中定义了一个名为HttpGet的方法。该方法调用了HttpClient.GetAsync方法,并将其结果解析为JSON格式。
请注意,我们将HttpGet方法的返回类型更改为JsonElement,并使用JsonDocument.Parse方法将HTTP响应解析为JSON格式。然后,我们返回根元素。

获取返回的json中的字段

要获取JSON对象中的title字段,您可以使用JsonElement.GetProperty方法。以下是修改后的代码示例:

var res4=await http.HttpPost(new { title = "name 3",id=3 });
var res4Json = JsonDocument.Parse(res4).RootElement;

string title = res4Json.GetProperty("title").GetString();
System.Console.WriteLine(title);

在上面的代码中,我们使用JsonDocument.Parse方法将HTTP响应解析为JSON格式。然后,我们使用JsonElement.GetProperty方法获取title属性,并使用GetString方法将其转换为字符串。
希望这可以帮助您!

遍历JSON数组

要遍历JSON数组,您可以使用JsonElement.EnumerateArray方法。以下是修改后的代码示例:

var vehicleHttp = new Http("http://localhost:3000/verhicles",token);
var res2 =await vehicleHttp.HttpGet();

var resJson2 = JsonDocument.Parse(res2).RootElement;
var vehicles = resJson2.GetProperty("vehicles");


foreach (JsonElement vehicle in vehicles.EnumerateArray())
{
    string make = vehicle.GetProperty("make").GetString();
    string model = vehicle.GetProperty("model").GetString();
    int year = vehicle.GetProperty("year").GetInt32();
    System.Console.WriteLine($"{year} {make} {model}");
}

在上面的代码中,我们使用JsonDocument.Parse方法将HTTP响应解析为JSON格式。然后,我们使用JsonElement.GetProperty方法获取vehicles属性,并使用JsonElement.EnumerateArray方法遍历所有元素。
在循环中,我们使用JsonElement.GetProperty方法获取每个车辆的属性,并使用GetString和GetInt32方法将其转换为字符串和整数。

header里面动态添加一个token字段

要在HTTP请求的头部中动态添加一个token字段,您可以使用HttpClient类。以下是修改后的代码示例:

using System;
using System.Net.Http;
using System.Text.Json;

namespace HttpReq
{
    public class Http
    {
        private readonly string url;
        private readonly HttpClient client;

        public Http(string url, string token)
        {
            this.url = url;
            this.client = new HttpClient();
            this.client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
            this.client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
        }

        public async Task<JsonElement> HttpGet()
        {
            HttpResponseMessage response = await this.client.GetAsync(this.url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            JsonDocument document = JsonDocument.Parse(responseBody);
            return document.RootElement;
        }
    }
}

在上面的代码中,我们使用HttpClient类来发送GET请求。我们创建了一个名为Http的类,并在其中定义了一个名为HttpGet的方法。该方法调用了HttpClient.GetAsync方法,并将其结果解析为JSON格式。
请注意,我们将Http类的构造函数中添加了一个token参数,用于动态设置请求头中的Authorization字段。我们使用HttpClient.DefaultRequestHeaders.Add方法将Authorization请求头添加到HttpClient对象中。

打印header

上面的代码定义了一个名为Http的类,该类包含一个构造函数,用于初始化HttpClient对象。在构造函数中,我们使用HttpClient.DefaultRequestHeaders.Add方法将User-Agent和token请求头添加到HttpClient对象中。
要打印请求头,请使用以下代码:

using System;
using System.Net.Http;
using System.Text.Json;

namespace HttpReq
{
    public class Http
    {
        private readonly string url;
        private readonly HttpClient client;

        public Http(string url, string token = "")
        {
            this.url = url;
            this.client = new HttpClient();
            this.client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
            this.client.DefaultRequestHeaders.Add("token", token);
        }

        public async Task<JsonElement> HttpGet()
        {
            HttpResponseMessage response = await this.client.GetAsync(this.url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            JsonDocument document = JsonDocument.Parse(responseBody);
            return document.RootElement;
        }

        public void PrintHeaders()
        {
            foreach (var header in this.client.DefaultRequestHeaders)
            {
                Console.WriteLine($"{header.Key}: {string.Join(",", header.Value)}");
            }
        }
    }
}

在上面的代码中,我们添加了一个名为PrintHeaders的方法,该方法用于打印请求头。我们使用HttpClient.DefaultRequestHeaders属性获取请求头,并使用foreach循环遍历所有请求头。
希望这可以帮助您!

标签:http,string,get,c#,await,System,client,response,HttpClient
From: https://www.cnblogs.com/zhuoss/p/17966488

相关文章

  • 一、windows安装opencv,并使用pycharm开发
    OpenCV入门毕设需要用到人脸识别,利用寒假学习下opencv的基本操作,希望可以有所收获安装python环境官网,下载安装exe文件,运行后选择添加path,安装成功结果如下:安装pycharm下载地址安装opencv命令行下运行:pipinstallopencv-python成功安装结果如下:无任何报错即为安装成功......
  • 监控复制:PG_STAT_REPLICATION
    PostgreSQL复制(同步和异步复制)是数据库社区中最广泛使用的功能之一。如今,人们正在构建高可用性集群或使用复制来创建只读副本来分散工作负载。这里需要注意的是,如果您使用复制,则必须确保您的集群受到正确监控。这篇文章的目的是解释一些基础知识,以确保您的PostgreSQL集群保持......
  • 【App Service】遇见本地访问Azure App Service应用慢或者是调用第三方接口慢的调试小
    问题描述当应用部署到微软云Azure后,如果遇见本地访问AzureAppService应用慢或者是调用第三方接口慢的时候,有什么好的调试方法呢?来判断具体时那一段请求耗时呢?问题解答当然浏览器本身的开发者工具(F12)就是一种非常好的工具。当时,当安装浏览器不方便时,curl就是一个非常好......
  • VACUUM和ANALYZE最佳实践技巧
    概要VACUUM和ANALYZE是PostgreSQL数据库两个最重要的维护操作。VACUUM用于回收表中“死元组”占用的空间。当删除或更新记录(先删除后插入)时,会生成死元组。PostgreSQL不会从表中物理删除旧行,而是在其上放置一个“标记”,以便查询不会返回该行。当vacuum进程运行时,这些死元......
  • Redis - Sorted Set Use Cases
         ......
  • spring Cloud 有哪些组件?
    Eureka:服务注册与发现,每个服务都向eureka提供自己的ip地址,端口号,协议,通信协议,eureka将各个服务维护到一个服务清单中(双层map,第一层key为服务名,第二层key为实例名),同时对服务维持心跳,剔除不可用的服务。发现:eurkeka注册的服务之间不用指定服务的地址,而是通过服务名向注册中心咨询,......
  • 读后笔记 -- Pytest框架与自动化应用 Chapter4:DDT 和 参数传递
    4.2参数化应用1.单一参数化/多参数化#contentoftest_mark_parametrize.pymportpytest@pytest.mark.parametrize("test_case",[1,2,3,'orange','apple'])deftest_string(test_case):#单一参数化print(f"\n我们的测试数据:{test_case}&q......
  • 【C系列综合1】游戏达人I
    #include<stdio.h>#include<stdlib.h>#include<math.h>typedefstructa{ inttime[1000]; intjoy[1000];}fin;intmain(){ intN,T,n; finx; intall; inti,j; intaa[101][2002]={{0}};//aa则为在背包还有j容积时,前i个数所可容纳的最大愉悦度 while(1){ all=0; ......
  • CodeForces 1500C Matrix Sorting
    洛谷传送门CF传送门做了好久。怎么会是呢。题目的操作可以看成,求出一些关键字,使得\(B\)矩阵的行是由\(A\)按照这些第\(1\)关键字、第\(2\)关键字一直到第\(k\)关键字,最后还有一个原来所在行下标的关键字,从小到大排序。肯定是从排好序的\(B\)矩阵入手。首先任意找......
  • Zynq7020 使用 Video Processing Subsystem 实现图像缩放
    1、前言没玩过图像缩放都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下:1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致......