原生js发送post请求_javascript发送post请求

原生js发送post请求_javascript发送post请求环境:vs201916.5.1aspnetcore3.1.1fiddlerrestsharp106.10.1说明:要测试restsharp的功能,首先需要了解http传参和下载上传文件的原理,请参考:c#:从http请求报文看http协议中参数传递的几种方式c#使用Http上传下载文件一、首先准备webapi项目usingSystem;usingSystem.C……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

环境:

  • vs2019 16.5.1
  • aspnetcore 3.1.1
  • fiddler
  • restsharp 106.10.1

说明:
要测试restsharp的功能,首先需要了解http传参和下载上传文件的原理,请参考:
c#:从http请求报文看http协议中参数传递的几种方式
c#使用Http上传下载文件

.net core/.net 5/.net 6 及以上框架,建议直接使用 HttpClient,参照:《c#:HttpClient使用详解》

一、restsharp介绍

RestSharp是一个轻量的,不依赖任何第三方的组件或者类库的Http的组件。RestSharp具体以下特性:
1、支持.NET 3.5+,Silverlight 4, Windows Phone 7, Mono, MonoTouch, Mono for Android, Compact Framework 3.5,.NET Core等
  2、通过NuGet方便引入到任何项目 ( Install-Package restsharp )
  3、可以自动反序列化XML和JSON
  4、支持自定义的序列化与反序列化
  5、自动检测返回的内容类型
  6、支持HTTP的GET, POST, PUT, HEAD, OPTIONS, DELETE等操作
  7、可以上传多文件
  8、支持oAuth 1, oAuth 2, Basic, NTLM and Parameter-based Authenticators等授权验证等
  9、支持异步操作
  10、极易上手并应用到任何项目中
以上是RestSharp的主要特点,通用它你可以很容易地用程序来处理一系列的网络请求(GET, POST, PUT, HEAD, OPTIONS, DELETE),并得到返回结果。
restsharp官网:http://restsharp.org/

二、首先准备webapi项目

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace testweb.Controllers
{ 
   
    [ApiController]
    [Route("[controller]/[action]")]
    public class TestController : ControllerBase
    { 
   
        public async Task<IEnumerable<object>> TestGet()
        { 
   
            return new object[] { 
    new { 
    Name = "小明", age = 20 }, new { 
    Name = "小花", age = 18 } };
        }

        public async Task<IEnumerable<object>> TestPost()
        { 
   
            return new object[] { 
    new { 
    Name = "post小明", age = 20 }, new { 
    Name = "post小花", age = 18 } };
        }

        [HttpGet]
        [HttpPost]
        public async Task<string> TestUrlPara([FromQuery]string name, [FromQuery]int? age)
        { 
   
            return $"hello { 
     name},你{ 
     age}岁了!";
        }


        [HttpPost]
        public async Task<string> TestPostUrlFormUrlencoded([FromForm]string name, [FromForm]int? age)
        { 
   
            return $"hello { 
     name},你{ 
     age}岁了!";
        }

        [HttpPost]
        public async Task<string> TestPostUrlFormData([FromForm]string name, [FromForm]int? age)
        { 
   
            return $"hello { 
     name},你{ 
     age}岁了,你上传了{ 
     Request.Form.Files.Count}个文件!";
        }

        [HttpPost]
        public string TestBodyJson([FromBody]User user)
        { 
   
            if (user == null) return "user is null.";
            return Newtonsoft.Json.JsonConvert.SerializeObject(user);
        }

        [HttpGet]
        public IActionResult TestDownLoad()
        { 
   
            var filepath = @"C:\Users\AUAS\Pictures\百度下载图片\timg.jpg";
            FileStream fs = new FileStream(filepath, FileMode.Open);
            return File(fs, "application/octet-stream", "test.png");
        }
    }
    public class User
    { 
   
        public string name { 
    get; set; }
        public int? id { 
    get; set; }
    }
}

三、开始测试restsharp发送各种类型http请求和下载文件

3.1 首先nuget包引入restsharp

在这里插入图片描述

3.2 直接看测试代码

using RestSharp;
using System;
using System.IO;

namespace restsharpdemo
{ 
   
    class Program
    { 
   
        private static RestClient client = new RestClient("http://localhost:5000/");
        static void Main(string[] args)
        { 
   
            //TestGet();
            //TestPost();
            //TestUrlPara();
            //TestPostUrlFormUrlencoded();
            //TestPostUrlFormData();
            //TestBodyJson();
            //TestDownLoad();
            Console.WriteLine("Hello World!");
            Console.ReadLine();
        }

        /// <summary>
        /// 测试下载文件
        /// </summary>
        private static void TestDownLoad()
        { 
   
            string tempFile = Path.GetTempFileName();
            using (var writer = File.OpenWrite(tempFile))
            { 
   
                var req = new RestRequest("test/TestDownLoad", Method.GET);
                req.ResponseWriter = responseStream =>
                { 
   
                    using (responseStream)
                    { 
   
                        responseStream.CopyTo(writer);
                    }
                };
                var response = client.DownloadData(req);
            }
        }

        /// <summary>
        /// 测试传递application/json类型参数
        /// </summary>
        private static void TestBodyJson()
        { 
   
            var req = new RestRequest("test/TestBodyJson", Method.POST);
            req.AddJsonBody(new { 
    name = "小花", id = 23 });
            var res = client.Execute(req);
            if (res.IsSuccessful)
            { 
   
                Console.WriteLine($"成功:{ 
     res.Content}");
            }
            else
            { 
   
                if (res.StatusCode == 0)
                { 
   
                    Console.WriteLine($"失败:网络错误:{ 
     res.ErrorMessage}");
                }
                else
                { 
   
                    Console.WriteLine($"失败:{ 
     (int)res.StatusCode}-{ 
     res.StatusDescription}");
                }
            }
        }

        /// <summary>
        /// 测试传递post multipart/form-data参数
        /// </summary>
        private static void TestPostUrlFormData()
        { 
   
            var req = new RestRequest("test/TestPostUrlFormData", Method.POST);
            req.AlwaysMultipartFormData = true;
            req.AddParameter("name", "小明");
            req.AddParameter("age", "20");
            req.AddFile("file1", @"C:\Users\AUAS\Pictures\百度下载图片\timg.jpg");
            var res = client.Execute(req);
            if (res.IsSuccessful)
            { 
   
                Console.WriteLine($"成功:{ 
     res.Content}");
            }
            else
            { 
   
                if (res.StatusCode == 0)
                { 
   
                    Console.WriteLine($"失败:网络错误:{ 
     res.ErrorMessage}");
                }
                else
                { 
   
                    Console.WriteLine($"失败:{ 
     (int)res.StatusCode}-{ 
     res.StatusDescription}");
                }
            }
        }

        /// <summary>
        /// 测试传递post application/x-www-form-urlencoded参数
        /// </summary>
        private static void TestPostUrlFormUrlencoded()
        { 
   
            var req = new RestRequest("test/TestPostUrlFormUrlencoded", Method.POST);
            //将参数编码后加到url上
            req.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            req.AddParameter("name", "小明");
            req.AddParameter("age", "20");
            var res = client.Execute(req);
            if (res.IsSuccessful)
            { 
   
                Console.WriteLine($"成功:{ 
     res.Content}");
            }
            else
            { 
   
                if (res.StatusCode == 0)
                { 
   
                    Console.WriteLine($"失败:网络错误:{ 
     res.ErrorMessage}");
                }
                else
                { 
   
                    Console.WriteLine($"失败:{ 
     (int)res.StatusCode}-{ 
     res.StatusDescription}");
                }
            }
        }

        /// <summary>
        /// 测试传递url参数
        /// </summary>
        private static void TestUrlPara()
        { 
   
            var req = new RestRequest("test/TestUrlPara", Method.GET);
            req = new RestRequest("test/TestUrlPara", Method.POST);
            //将参数编码后加到url上
            req.AddParameter("name", "小明");
            req.AddParameter("age", "18");
            var res = client.Get(req);
            if (res.IsSuccessful)
            { 
   
                Console.WriteLine($"成功:{ 
     res.Content}");
            }
            else
            { 
   
                if (res.StatusCode == 0)
                { 
   
                    Console.WriteLine($"失败:网络错误:{ 
     res.ErrorMessage}");
                }
                else
                { 
   
                    Console.WriteLine($"失败:{ 
     (int)res.StatusCode}-{ 
     res.StatusDescription}");
                }
            }
        }

        /// <summary>
        /// 测试简单post
        /// </summary>
        private static void TestPost()
        { 
   
            var req = new RestRequest("test/testpost", Method.POST);
            var res = client.Post(req);
            if (res.IsSuccessful)
            { 
   
                Console.WriteLine($"成功:{ 
     res.Content}");
            }
            else
            { 
   
                if (res.StatusCode == 0)
                { 
   
                    Console.WriteLine($"失败:网络错误:{ 
     res.ErrorMessage}");
                }
                else
                { 
   
                    Console.WriteLine($"失败:{ 
     (int)res.StatusCode}-{ 
     res.StatusDescription}");
                }

            }
        }

        /// <summary>
        /// 测试简单get
        /// </summary>
        private static void TestGet()
        { 
   
            var req = new RestRequest("test/testget", Method.GET);
            var res = client.Get(req);
            if (res.IsSuccessful)
            { 
   
                Console.WriteLine($"成功:{ 
     res.Content}");
            }
            else
            { 
   
                if (res.StatusCode == 0)
                { 
   
                    Console.WriteLine($"失败:网络错误:{ 
     res.ErrorMessage}");
                }
                else
                { 
   
                    Console.WriteLine($"失败:{ 
     (int)res.StatusCode}-{ 
     res.StatusDescription}");
                }

            }
        }
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196157.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 自带的word2vec讲解_word2vec训练

    python 自带的word2vec讲解_word2vec训练word2vec理解学习nlp最先了解的概念应该就是词嵌入(wordembedding)吧,Word2vec是谷歌于2013年提出的一种有效的词嵌入的方法,采用了两种模型(CBOW与skip-gram模型)与两种优化方法(负采样与层次softmax方法)的组合。现在使用Word2vec获得词的向量表达,并将其应用于各种nlp任务中已经非常常见。由于我们要用计算机来完成各种自然语言理解的任务,而…

    2025年9月28日
    3
  • Promise面试题_研究生英语面试常见问题及回答技巧

    Promise面试题_研究生英语面试常见问题及回答技巧Promise回顾Promise基础Promise的catch、then、finallyPromise的all和raceAsync、await其他题目

    2022年8月28日
    2
  • 六、小程序|App抓包-移动端抓包app-抓包「建议收藏」

    六、小程序|App抓包-移动端抓包app-抓包「建议收藏」小程序|App抓包移动端抓包app-抓包 ———-IOS设备系统———一、IOS抓包IOS(thor+anubis)app应用市场下载即可:首次安装需要配置证书:抓包:简单测试抓取部分数据包:查看详细数据包内容:点击数据包查看详情:一直摁着,选择重放可进行重放测试thor跳转anubisanubis相关功能点和界面:重放记录:可修改重放:也可进行其他的导出操作:可以将数据包导出联合burp重放———-Android设备系统———二、android移动

    2022年5月27日
    42
  • 八路抢答器一个数码管C语言,八路抢答器设计 – 八路抢答器电路设计方案汇总(五款模拟电路设计原理及工作原理详细)…「建议收藏」

    八路抢答器一个数码管C语言,八路抢答器设计 – 八路抢答器电路设计方案汇总(五款模拟电路设计原理及工作原理详细)…「建议收藏」八路抢答器电路设计方案四:一个简单的的八路抢答器电路详细电路设计方案:八路抢答器电路图八路抢答器电路设计方案五:基于74LS148和74LS297的八路抢答器设计要求与内容在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光或音响等多种手段指示出第一抢答者。(1)设计制作一个可容纳8组参赛的数字式抢答器,每组设置一个抢答按钮供抢答者使用。(2)电路具有第一抢…

    2022年10月20日
    1
  • 【云原生 • Kubernetes】搭建 k8s 集群(Kubeadm 方式)[通俗易懂]

    【云原生 • Kubernetes】搭建 k8s 集群(Kubeadm 方式)[通俗易懂]kubeadm方式搭建k8s集群,包含详细步骤及解析。

    2022年10月15日
    2
  • linux怎么查看root权限,linux 查看当前用户是否有root权限490

    linux怎么查看root权限,linux 查看当前用户是否有root权限490匿名用户1级2016-08-13回答ssh远程控制程序。sudo提权命令。你要不会用请不要尝试。配置sudo的配置文件在/etc/sudoers里面,一般通过visudo命令来安全打开编辑。查看/etc/sudoers的用法可以使用命令:man5sudoers。在/etc/sudoers文件里面主要包括这两部分:1.别名设置别名主要包括这几种:User_Alias,Host_Alia…

    2022年5月23日
    617

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号