本篇文章主要介绍了详解c# .net core 下的网络请求,大致介绍下在.net core 下如何进行http请求,主要仍然是GET和POST方法,有兴趣的可以了解下
本文章是在VS2017的环境下,.net core 1.1版本以上。
在这期间,由于.net core 并不基于IIS,我们的过去的网络请求代码在.net core框架下,有可能会出现不兼容,报错的现象。这里大致介绍下在.net core 下如何进行http请求,主要仍然是GET和POST方法,有错误的地方,欢迎指正!
先来说POST,POST我实现了三种方法,前两种基于的原理是完全一致的,后面的有些小小的差异,但他们的本质都是http请求,本质上是无区别的,只是实现方法有所不同。
废话不多说,上代码:
POST异步方法:
/// <summary> /// 异步请求post(键值对形式,可等待的) /// </summary> /// <param name="uri">网络基址("http://localhost:59315")</param> /// <param name="url">网络的地址("/api/UMeng")</param> /// <param name="formData">键值对List<KeyValuePair<string, string>> formData = new List<KeyValuePair<string, string>>();formData.Add(new KeyValuePair<string, string>("userid", "29122"));formData.Add(new KeyValuePair<string, string>("umengids", "29122"));</param> /// <param name="charset">编码格式</param> /// <param name="mediaType">头媒体类型</param> /// <returns></returns> public async Task<string> HttpPostAsync(string uri, string url, List<KeyValuePair<string, string>> formData = null, string charset = "UTF-8", string mediaType = "application/x-www-form-urlencoded") { string tokenUri = url; var client = new HttpClient(); client.BaseAddress = new Uri(uri); HttpContent content = new FormUrlEncodedContent(formData); content.Headers.ContentType = new MediaTypeHeaderValue(mediaType); content.Headers.ContentType.CharSet = charset; for (int i = 0; i < formData.Count; i++) { content.Headers.Add(formData[i].Key, formData[i].Value); } HttpResponseMessage resp = await client.PostAsync(tokenUri, content); resp.EnsureSuccessStatusCode(); string token = await resp.Content.ReadAsStringAsync(); return token; }
POST同步方法:
/// <summary> /// 同步请求post(键值对形式) /// </summary> /// <param name="uri">网络基址("http://localhost:59315")</param> /// <param name="url">网络的地址("/api/UMeng")</param> /// <param name="formData">键值对List<KeyValuePair<string, string>> formData = new List<KeyValuePair<string, string>>();formData.Add(new KeyValuePair<string, string>("userid", "29122"));formData.Add(new KeyValuePair<string, string>("umengids", "29122"));</param> /// <param name="charset">编码格式</param> /// <param name="mediaType">头媒体类型</param> /// <returns></returns> public string HttpPost(string uri, string url, List<KeyValuePair<string, string>> formData = null, string charset = "UTF-8", string mediaType = "application/x-www-form-urlencoded") { string tokenUri = url; var client = new HttpClient(); client.BaseAddress = new Uri(uri); HttpContent content = new FormUrlEncodedContent(formData); content.Headers.ContentType = new MediaTypeHeaderValue(mediaType); content.Headers.ContentType.CharSet = charset; for (int i = 0; i < formData.Count; i++) { content.Headers.Add(formData[i].Key, formData[i].Value); } var res = client.PostAsync(tokenUri, content); res.Wait(); HttpResponseMessage resp = res.Result; var res2 = resp.Content.ReadAsStringAsync(); res2.Wait(); string token = res2.Result; return token; }
遗憾的是,同步方法也是基于异步实现的,个人认为这样做会加大系统开销。如果各位有其他的高效实现,请不吝赐教!
接下来是通过流的方式进行POST:
public string Post(string url, string data, Encoding encoding, int type) { try { HttpWebRequest req = WebRequest.CreateHttp(new Uri(url)); if (type == 1) { req.ContentType = "application/json;charset=utf-8"; } else if (type == 2) { req.ContentType = "application/xml;charset=utf-8"; } else { req.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; } req.Method = "POST"; //req.Accept = "text/xml,text/javascript"; req.ContinueTimeout = 60000; byte[] postData = encoding.GetBytes(data); Stream reqStream = req.GetRequestStreamAsync().Result; reqStream.Write(postData, 0, postData.Length); reqStream.Dispose(); var rsp = (HttpWebResponse)req.GetResponseAsync().Result; var result = GetResponseAsString(rsp, encoding); return result; } catch (Exception ex) { throw; } }
private string GetResponseAsString(HttpWebResponse rsp, Encoding encoding) { Stream stream = null; StreamReader reader = null; try { // 以字符流的方式读取HTTP响应 stream = rsp.GetResponseStream(); reader = new StreamReader(stream, encoding); return reader.ReadToEnd(); } finally { // 释放资源 if (reader != null) reader.Dispose(); if (stream != null) stream.Dispose(); if (rsp != null) rsp.Dispose(); } }
这种方式的POST还是将数据写入到流里面,进行POST,之所以写前两个key-value的形式,是为了符合java或者oc的风格,在c#书写的webapi中,由于接收形式是{=value}而不是{key=value}(由webapi的性质决定),后续我会说如何在webapi中接收(key-value)的形式,适当避免.net后台人员与android和ios的矛盾,从而达到社会主义民主社会的长治久安。
接下来是get,同样同步异步都是由异步实现的,还请各位看官轻喷。
GET:
/// <summary> /// 异步请求get(UTF-8) /// </summary> /// <param name="url">链接地址</param> /// <param name="formData">写在header中的内容</param> /// <returns></returns> public static async Task<string> HttpGetAsync(string url, List<KeyValuePair<string, string>> formData = null) { HttpClient httpClient = new HttpClient(); HttpContent content = new FormUrlEncodedContent(formData); if (formData != null) { content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); content.Headers.ContentType.CharSet = "UTF-8"; for (int i = 0; i < formData.Count; i++) { content.Headers.Add(formData[i].Key, formData[i].Value); } } var request = new HttpRequestMessage() { RequestUri = new Uri(url), Method = HttpMethod.Get, }; for (int i = 0; i < formData.Count; i++) { request.Headers.Add(formData[i].Key, formData[i].Value); } var resp = await httpClient.SendAsync(request); resp.EnsureSuccessStatusCode(); string token = await resp.Content.ReadAsStringAsync(); return token; }
/// <summary> /// 同步get请求 /// </summary> /// <param name="url">链接地址</param> /// <param name="formData">写在header中的键值对</param> /// <returns></returns> public string HttpGet(string url, List<KeyValuePair<string, string>> formData = null) { HttpClient httpClient = new HttpClient(); HttpContent content = new FormUrlEncodedContent(formData); if (formData != null) { content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); content.Headers.ContentType.CharSet = "UTF-8"; for (int i = 0; i < formData.Count; i++) { content.Headers.Add(formData[i].Key, formData[i].Value); } } var request = new HttpRequestMessage() { RequestUri = new Uri(url), Method = HttpMethod.Get, }; for (int i = 0; i < formData.Count; i++) { request.Headers.Add(formData[i].Key, formData[i].Value); } var res = httpClient.SendAsync(request); res.Wait(); var resp = res.Result; Task<string> temp = resp.Content.ReadAsStringAsync(); temp.Wait(); return temp.Result; }
Atas ialah kandungan terperinci 具体介绍在C# .net core下网络请求的实例代码分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

C# adalah bahasa pengaturcaraan yang berorientasikan objek moden yang dibangunkan oleh Microsoft dan sebagai sebahagian daripada Rangka Kerja .NET. 1.C# menyokong pengaturcaraan berorientasikan objek (OOP), termasuk enkapsulasi, warisan dan polimorfisme. 2. Pengaturcaraan Asynchronous dalam C# dilaksanakan melalui Async dan menunggu kata kunci untuk meningkatkan respons aplikasi. 3. Gunakan LINQ untuk memproses koleksi data dengan ringkas. 4. Kesilapan umum termasuk pengecualian rujukan null dan pengecualian indeks luar. Kemahiran penyahpepijatan termasuk menggunakan debugger dan pengendalian pengecualian. 5. Pengoptimuman Prestasi termasuk menggunakan StringBuilder dan mengelakkan pembungkusan yang tidak perlu dan unboxing.

Strategi ujian untuk aplikasi C#. NET termasuk ujian unit, ujian integrasi, dan ujian akhir-ke-akhir. 1. Ujian unit memastikan bahawa unit minimum kod berfungsi secara bebas, menggunakan rangka kerja MSTest, Nunit atau Xunit. 2. Ujian Bersepadu Mengesahkan fungsi pelbagai unit yang digabungkan, data simulasi yang biasa digunakan dan perkhidmatan luaran. 3. Ujian akhir-ke-akhir mensimulasikan proses operasi lengkap pengguna, dan selenium biasanya digunakan untuk ujian automatik.

Temu bual dengan pemaju kanan C# memerlukan menguasai pengetahuan teras seperti pengaturcaraan asynchronous, LINQ, dan prinsip kerja dalaman Rangka .NET. 1. Pengaturcaraan Asynchronous memudahkan operasi melalui async dan menunggu untuk meningkatkan respons aplikasi. 2.Linq mengendalikan data dalam gaya SQL dan perhatikan prestasi. 3. CLR kerangka bersih menguruskan ingatan, dan pengumpulan sampah perlu digunakan dengan berhati -hati.

C#.NET Soalan dan jawapan wawancara termasuk pengetahuan asas, konsep teras, dan penggunaan lanjutan. 1) Pengetahuan asas: C# adalah bahasa berorientasikan objek yang dibangunkan oleh Microsoft dan digunakan terutamanya dalam rangka .NET. 2) Konsep teras: Delegasi dan peristiwa membolehkan kaedah mengikat dinamik, dan LINQ menyediakan fungsi pertanyaan yang kuat. 3) Penggunaan Lanjutan: Pengaturcaraan Asynchronous meningkatkan respons, dan pokok ekspresi digunakan untuk pembinaan kod dinamik.

C#.NET adalah pilihan yang popular untuk membina microservices kerana ekosistem yang kuat dan sokongan yang kaya. 1) Buat RestfulAPi menggunakan ASP.Netcore untuk memproses penciptaan pesanan dan pertanyaan. 2) Gunakan GRPC untuk mencapai komunikasi yang cekap antara microservices, menentukan dan melaksanakan perkhidmatan pesanan. 3) Memudahkan penggunaan dan pengurusan melalui microservices kontena Docker.

Amalan terbaik keselamatan untuk C# dan .NET termasuk pengesahan input, pengekodan output, pengendalian pengecualian, serta pengesahan dan kebenaran. 1) Gunakan ungkapan biasa atau kaedah terbina dalam untuk mengesahkan input untuk mengelakkan data berniat jahat memasuki sistem. 2) Pengekodan output Untuk mencegah serangan XSS, gunakan kaedah httputility.htmlencode. 3) Pengendalian Pengecualian Menghindari kebocoran maklumat, ralat rekod tetapi tidak mengembalikan maklumat terperinci kepada pengguna. 4) Gunakan Asp.Netidentity dan kebenaran berasaskan tuntutan untuk melindungi aplikasi daripada akses yang tidak dibenarkan.

Makna kolon (':') dalam bahasa C: Penyataan bersyarat: Memisahkan ekspresi bersyarat dan pernyataan blok pernyataan pernyataan: Memisahkan permulaan, bersyarat dan tambahan ekspresi makro Definisi: Memisahkan nama makro dan nilai makro Single Line Comment: Mewakili kandungan dari kolon hingga akhir garis sebagai dimensi array komen: Tentukan dimensi array

A dalam bahasa C adalah pengendali pasca kenaikan, dan mekanisme operasinya termasuk: pertama memperoleh nilai pembolehubah a. Meningkatkan nilai A dengan 1. Mengembalikan nilai A selepas meningkat.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.