开发手册 欢迎您!
软件开发者资料库

.NET Core(C#) RestSharp GET和POST请求、下载大文件及cookie管理

.NET Core(C#)使用RestSharp可以实现一些后台Http请求相关操作,本文主要介绍通过RestSharp执行GET和POST请求,在下载很大文件时需要大量内存时通过文件流优化,以请求时自动管理cookie。

1、使用Nuget安装引用RestSharp

1)使用Nuget界面管理器

相关文档VS(Visual Studio)中Nuget的使用

2)使用Package Manager命令安装

PM> Install-Package RestSharp -Version 106.6.10

3)使用.NET CLI命令安装

> dotnet add package RestSharp --version 106.6.10

4) 支持的平台

.NET Framework 4.5.2
.NET Standard 2.0
Windows 可使用 .NET Framework
Windows 可使用 .NET Core
Linux 或 Mac 可使用 Mono
Linux 或 Mac 可使用 .NET Core

2、RestSharp执行GET和POST请求

RestSharp包括用于基本HTTP(Authorization header),NTLM和基于参数的系统的身份验证器。您可以通过实现IAuthenticator并将其注册到RestClient来编写自己的实现:

using RestSharp;using RestSharp.Authenticators;var client = new RestClient("https://api.twitter.com/1.1");client.Authenticator = new HttpBasicAuthenticator("username", "password");var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json);var response = client.Get(request);//get请求var client = new RestClient("http://example.com");client.Authenticator = new SimpleAuthenticator("username", "foo", "password", "bar");var request = new RestRequest("resource", Method.GET);client.Execute(request);//post请求var client = new RestClient("http://example.com");// client.Authenticator = new HttpBasicAuthenticator(username, password);var request = new RestRequest("resource/{id}", Method.POST);request.AddParameter("name", "value"); // adds to POST or URL querystring based on Methodrequest.AddUrlSegment("id", "123"); // replaces matching token in request.Resource// easily add HTTP Headersrequest.AddHeader("header", "value");// add files to upload (works with compatible verbs)request.AddFile(path);// 执行请求IRestResponse response = client.Execute(request);var content = response.Content; // raw content as string// 或自动反序列化结果// return content type is sniffed but can be explicitly set via RestClient.AddHandler();RestResponse response2 = client.Execute(request);var name = response2.Data.Name;// 简单的异步支持client.ExecuteAsync(request, response => {    Console.WriteLine(response.Content);});// 异步与反序列化var asyncHandle = client.ExecuteAsync(request, response => {    Console.WriteLine(response.Data.Name);});// 根据需要中止请求asyncHandle.Abort();

3、下载大文件

使用Stream来避免请求内容的内存缓冲。在检索将立即写入磁盘的大量数据时很有用。

string tempFile = Path.GetTempFileName();using (var writer = File.OpenWrite(tempFile)){    var client = new RestClient(baseUrl);    var request = new RestRequest("Assets/LargeFile.7z");    request.ResponseWriter = responseStream =>    {        using (responseStream)        {            responseStream.CopyTo(writer);        }    };    var response = client.DownloadData(request);}

4、自动Cookie管理

RestSharp 102.4+支持System.Net.CookieContainer对任何IRestClient实例的所有请求使用共享。这样,在响应中设置或未设置的任何cookie都将在后续请求中使用。为了使用shared CookieContainer,只需RestClient在使用实例之前在实例上设置属性:

var client = new RestClient("http://server/");client.CookieContainer = new System.Net.CookieContainer();

相关文档

https://github.com/restsharp/RestSharp

.NET(C#) Fluent HTTP (Flurl Get和Post请求)使用方法及示例代码

.Net(C#) 后台使用WebClient(客户端控制台程序)执行Get和Post请求的方法

.Net(C#)后台发送Get和Post请求的几种方法总结