C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式

简介: C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式

前言

当下编写应用程序都流行前后端分离,后端提供对应服务接口给前端或跨应用程序调用,如WebAPI等。在调用这些服务接口发送HTTP请求,而.NET为我们提供了HttpWebRequest、HttpClient几个类库来实现。下面对C#使用HttpClient类发送HTTP请求数据的几种格式。

HttpClient

HttpClient是.NET 4.5以上版提供的类(System.Net.Http),编写的应用程序可以通过此类发送HTTP请求并从WEB服务公开的资源接收HTTP响应。HTTP请求包含了请求报文与响应报文。下面先简单的了解它的一些属性与方法。

属性:

属性

描述

BaseAddress

获取或设置发送请求时地址。

DefaultProxy

获取或设置全局HTTP请求代理。

DefaultRequestHeaders

获取请求发送的标题。

DefaultRequestVersion

获取或设置请求使用的默认HTTP版本。

MaxResponseContentBufferSize

获取或设置读取响应内容时要缓冲的最大字节数。

Timeout

获取或设置请求超时等待的时间。

方法:

方法

描述

GetAsync

异步请求获取指定URI。

GetByteArrayAsync

异步请求获取指定URI并以字节数组的形式返回响应。

GetStreamAsync

异步请求获取指定URI并以流的形式返回响应。

GetStringAsync

异步请求获取指定URI并以字符串的形式返回响应正文。

PostAsync

异步将POST请求发送给指定URI。

Send

发送带有指定请求的 HTTP 请求。

SendAsync

以异步操作发送 HTTP 请求。

数据格式

在向HTTP发起请求时,将以什么样的数据格式发送数据,这取决于URI服务资源。而常用的类型可分为application/json、application/x-www-form-urlencoded, multipart/form-data, text/xml,其中application/json 是近年来最常用的一种。下面简单介绍每种格式。

JSON数据格式

application/json 通常是HttpClient发送JSON格式的数据,通过使用HttpContent的StringContent并设置其MediaType为"application/json"。

示例:

using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Fountain.WinConsole.HttpDemo
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    User user = new User();
                    user.username = "test";
                    user.password = "123456";
                    string jsonData = JsonConvert.SerializeObject(user);
                    // 发送请求数据包
                    StringContent content = new StringContent(jsonData, Encoding.UTF8);
                    // 设置HTTP 响应上的ContentType --application/json
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    // 请求访问地址
                    string url = "https://127.0.0.1/api/user/login";
                    // 发出HTTP的Post请求
                    HttpResponseMessage response = await httpClient.PostAsync(url, content);
                    // 读取返回结果
                    string responseContent = await response.Content.ReadAsStringAsync();
                    // 将字符转对象
                    Result result = JsonConvert.DeserializeObject<Result>(responseContent);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
            Console.ReadLine();
        }
    }
}

表单数据格式

application/x-www-form-urlencoded 这种格式通常用于表单数据的提交,通过使用HttpContent的FormUrlEncodedContent 类定义实现。

示例:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Fountain.WinConsole.HttpDemo
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    Dictionary<string,string> user = new Dictionary<string, string>
                    {
                        { "username", "test" },
                        { "password", "123456" }
                    };
                    // 发送请求数据包
                    FormUrlEncodedContent content = new FormUrlEncodedContent(user);
                    // 请求访问地址
                    string url = "https://127.0.0.1/api/user/login";
                    // 发出HTTP的Post请求
                    HttpResponseMessage response = await httpClient.PostAsync(url, content);
                    // 读取返回结果
                    string responseContent = await response.Content.ReadAsStringAsync();
                    // 将字符转对象
                    Result result = JsonConvert.DeserializeObject<Result>(responseContent);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
            Console.ReadLine();
        }
    }
}

文件上传格式

multipart/form-data 常用于文件上传的数据格式,通过用MultipartFormDataContent类定义实现。

示例:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Fountain.WinConsole.HttpDemo
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    MultipartFormDataContent multipartContent = new MultipartFormDataContent();
                    multipartContent.Add(new StringContent("user"), "test");
                    multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "test.jpg"))), "image", "test.jpg");
                    // 请求访问地址
                    string url = "https://127.0.0.1/api/user/upload";
                    // 发出HTTP的Post请求
                    HttpResponseMessage response = await httpClient.PostAsync(url, multipartContent);
                    // 读取返回结果
                    string responseContent = await response.Content.ReadAsStringAsync();
                    // 将字符转对象
                    Result result = JsonConvert.DeserializeObject<Result>(responseContent);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
            Console.ReadLine();
        }
    }
}

XML数据格式

text/xml 主要用于传输XML格式的数据,通过使用HttpContent 中的StringContent并设置其MediaType为"text/xml"。

示例:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Fountain.WinConsole.HttpDemo
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    StringBuilder user = new StringBuilder();
                    user.AppendLine("<usrname>test</usrname>");
                    user.AppendLine("<password>test123456</password>");
                    string xmlData = user.ToString();
                    // 发送请求数据包
                    StringContent content = new StringContent(xmlData, Encoding.UTF8);
                    // 设置HTTP 响应上的ContentType --text/xml
                    content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
                    // 请求访问地址
                    string url = "https://127.0.0.1/api/user/login";
                    // 发出HTTP的Post请求
                    HttpResponseMessage response = await httpClient.PostAsync(url, content);
                    // 读取返回结果
                    string responseContent = await response.Content.ReadAsStringAsync();
                    // 将字符转对象
                    Result result = JsonConvert.DeserializeObject<Result>(responseContent);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
            Console.ReadLine();
        }
    }
}


目录
相关文章
|
16天前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
159 61
C# 中的 XML 与 JSON 数据处理
|
28天前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
26 8
|
2天前
|
安全 内存技术
【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传
【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传
|
2月前
|
开发框架 前端开发 .NET
C# Newtonsoft.Json.Formatting DateTime 日期格式化
C# Newtonsoft.Json.Formatting DateTime 日期格式化
33 0
|
2月前
|
开发框架 .NET C#
WPF/C#:显示分组数据的两种方式
WPF/C#:显示分组数据的两种方式
44 0
|
2月前
|
XML C# 数据格式
WPF/C#:如何将数据分组显示
WPF/C#:如何将数据分组显示
33 0
|
2月前
|
C# Windows
WPF/C#:如何显示具有层级关系的数据
WPF/C#:如何显示具有层级关系的数据
40 0
|
5月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
171 3
|
5月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
182 3
|
16天前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
28 2

热门文章

最新文章