返回顶部
首页 > 资讯 > 服务器 >C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据
  • 223
分享到

C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据

c#服务器开发语言 2023-09-24 21:09:38 223人浏览 安东尼
摘要

C# 通过 HttpWEBRequest发送数据以及服务器通过Request请求获取数据, 后台请求的三种类型"application/x-www-fORM-urlencoded"和"multipar

C# 通过 HttpWEBRequest发送数据以及服务器通过Request请求获取数据, 后台请求的三种类型"application/x-www-fORM-urlencoded"和"multipart/form-data"以及"application/JSON",对应的服务器端应该获取数据参数的方法

C#中HttpWebRequest的用法详解 可参考:

C#中HttpWebRequest的用法详解
C# HttpWebRequest详解
C# 服务器通过Request获取参数 可参考:
C# WebService 接口 通过Request请求获取json参数

一、客户端和服务器传输数据的类

1、后台程序发送HTTP请求的Class,服务器端也要添加该类

namespace webapiInvoke{    ///     /// 后台程序发送HTTP请求数据的类    ///     class RequestDataModel    {        ///         /// 姓名        ///         public string DataName { get; set; }        ///         /// 性别        ///         public string DataSex { get; set; }        ///         /// 结果        ///         public string DataResult { get; set; }        ///         /// 年龄        ///         public int DataAge { get; set; }    }}

2、服务端返回HTTP请求的数据class,客户端也要有

namespace ServiceTest{    ///     /// WebService 服务端返回的类    ///     public class WebServiceWriteBack    {        public bool Success { get; set; } = true;        public string Data { get; set; } = string.Empty;    }}

二、“application/json”:

1、后台程序(客户端)发送HTTP请求(request.Method = “POST”、request.ContentType = “application/json”),

a.客户端代码:
namespace WebapiInvoke{    class HttpApiRequestHelper    {        ///         /// 使用HttpWebRequest发送一个POST请求         ///         /// 请求的地址        /// 发送的数据对象        ///         public static string HttpJsonPost(string url, object dto)        {            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);            request.Method = "POST";            request.KeepAlive = false;            request.AllowAutoRedirect = true;            request.Accept = "application/json";            request.ContentType = "application/json";            string strContent = JsonConvert.SerializeObject(dto); //序列化为字符串,可以使用自己项目中封装的json方法            using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))            {                dataStream.Write(strContent);            }            //  获取服务器返回的响应体            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            string encoding = response.ContentEncoding;            if (encoding == null || encoding.Length < 1)            {                encoding = "UTF-8"; //默认编码              }            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));            string retString = reader.ReadToEnd();            return retString;        }   }}

服务器端通过Request.InputStream获取json数据,并做相应的处理;
需要NuGet程序包中安装Microsoft.Aspnetcore.mvc.WebApiCompatShim,并usingSystem.Web.Http;请添加图片描述

b.服务器端对应的代码
using Newtonsoft.Json;using System;using System.IO;using System.Web;using System.Web.Http;namespace ServiceTest{    /// WebService 接口 通过Request请求获取json参数    class GetRequestDataHelper : ApiController    {        ///         /// 通过Request请求获取json参数        /// 对应request.ContentType = "application/json"        ///         ///         public WebServiceWriteBack GetRequestJsonData()        {        // 服务器端回写数据库的类            WebServiceWriteBack writeBack = new WebServiceWriteBack();            HttpContextBase context = Request.Properties["MS_HttpContext"] as HttpContextBase;            HttpRequestBase request = context.Request;            string data = string.Empty;            using (Stream stream = request.InputStream)// 读取Json数据            {                stream.Position = 0;                using (StreamReader streamReader = new StreamReader(stream))                {                    data = streamReader.ReadToEnd();                }            }            // 将Json数据转换为对象            RequestDataModel data1 = JsonConvert.DeserializeObject<RequestDataModel>(data);            #region 对传进来的 DataModel 进行处理 并对要回写的WebServiceWriteBack类进行赋值            if (string.IsNullOrEmpty(data1.DataSex))            {                writeBack.Success = true;                writeBack.Data = "成功了!";            }            #endregion            return writeBack;        }    }}

三、表单:

1、传统的表单数据是"DataName=1&DataSex=dadada&DataResult=S201FR&DataAge=1"一个字符串中间用‘&’分割;

后台程序(客户端)发送HTTP请求(request.Method = “POST”、request.ContentType = “application/x-www-form-urlencoded”),

a.客户端代码:
        ///         /// HttpWebRequest Post请求        /// application/x-www-form-urlencoded        /// "DataName=1&DataSex=dadada&DataResult=S201FR&DataAge=1"        ///         /// 请求地址        /// 请求参数(json格式请求数据时contentType必须指定为application/json)        /// 返回结果        /// 请求类型        /// 返回结果        public static bool WebHttpPost(string postUrl, string postData, out string result, string contentType = "application/x-www-form-urlencoded")        {            try            {                Encoding encoding = Encoding.GetEncoding("gb2312");                byte[] byteArray = encoding.GetBytes(postData);                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(postUrl);                httpWebRequest.Method = "POST";                httpWebRequest.ContentType = contentType;                httpWebRequest.ContentLength = byteArray.Length;                httpWebRequest.AllowAutoRedirect = true;                using (Stream stream = httpWebRequest.GetRequestStream())                {                    stream.Write(byteArray, 0, byteArray.Length); // 写入参数                                  }//  获取服务器返回的响应体                HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;                using (Stream responseStream = httpWebResponse.GetResponseStream())                {                    StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));                    result = streamReader.ReadToEnd(); // 请求返回的数据                    streamReader.Close();                }                return true;            }            catch (Exception ex)            {                result = ex.Message;                return false;            }        }
b.服务器端通过Request.Form获取表单数据,并做相应的处理;
using Newtonsoft.Json;using System;using System.IO;using System.Web;using System.Web.Http;namespace ServiceTest{        ///         /// 通过Request请求获取表单参数        /// 对应contentType = "application/x-www-form-urlencoded"和contentType =  "multipart/form-data"        ///         ///         public WebServiceWriteBack GetRequestFromData()        {            // 服务器端回写数据库的类            WebServiceWriteBack writeBack = new WebServiceWriteBack();            HttpContextBase context = Request.Properties["MS_HttpContext"] as HttpContextBase;            HttpRequestBase request = context.Request;                        RequestDataModel data1 = new RequestDataModel()            {                DataName = request.Form["DataName"]?.ToString(),                DataSex = request.Form["DataSex"]?.ToString(),                DataAge = Convert.ToInt32(request.Form["DataAge"]?.ToString()),                DataResult = request.Form["DataResult"]?.ToString()            };            #region 对传进来的 DataModel 进行处理 并对要回写的WebServiceWriteBack类进行赋值            if (string.IsNullOrEmpty(data1.DataSex))            {                writeBack.Success = true;                writeBack.Data = "成功了!";            }            #endregion            return writeBack;        }    }}

2、“multipart/form-data”

包含异步请求方法HttpPostAsync和HttpPostFromData方法

a.客户端代码,两个方法
using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;namespace WebApiInvoke{    class HttpApiRequestHelper    {        ///         /// Async异步请求 POST        ///         /// 请求的地址        /// Json字符串        ///         public static string HttpPostAsync(string urlStr, string jsonStr)        {            string content = "";            try            {                Dictionary<string, string> map = JsonStringToKeyValuePairs(jsonStr);                var mfdc = new System.Net.Http.MultipartFormDataContent();                mfdc.Headers.Add("ContentType", "multipart/form-data");//声明头部                foreach (string key in map.Keys)                {                    mfdc.Add(new System.Net.Http.StrinGContent(map[key]), key);//参数, 内容在前,参数名称在后                }                var clientTask = new System.Net.Http.HttpClient().PostAsync(urlStr, mfdc);//发起异步请求                clientTask.Wait();//等待请求结果                if (clientTask.Result.IsSuccessStatusCode)                {                    //请求正常                    var resultTask = clientTask.Result.Content.ReadAsStringAsync();//异步读取返回内容                    resultTask.Wait();//等读取返回内容                    content = resultTask.Result;//返回内容字符串                }                else                {                    //请求异常                    content = "失败";                }            }            catch (Exception ex)            {                content = ex.Message;            }            return content;        }        ///         /// multipart/form-data POST请求        ///         /// 请求的地址        /// Json字符串        ///         public static string HttpPostFromData(string url, string jsonStr)        {            string content = "";            try            {                string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");                byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");                byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);                request.ContentType = "multipart/form-data; boundary=" + boundary;                request.Method = WebRequestMethods.Http.Post;                request.KeepAlive = true;                request.Timeout = -1;                CredentialCache credentialCache = new CredentialCache();                credentialCache.Add(new Uri(url), "Basic", new NetworkCredential("user", "user"));                request.Credentials = credentialCache;                request.ServicePoint.Expect100Continue = false;                Dictionary<string, string> map = JsonStringToKeyValuePairs(jsonStr);                using (Stream stream = request.GetRequestStream())                {                    //1.1 key/value                    string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";                    if (map != null)                    {                        foreach (string key in map.Keys)                        {stream.Write(boundarybytes, 0, boundarybytes.Length);string formitem = string.Format(formdataTemplate, key, map[key]);byte[] formitembytes = Encoding.GetEncoding("UTF-8").GetBytes(formitem);stream.Write(formitembytes, 0, formitembytes.Length);                        }                    }                    stream.Write(endbytes, 0, endbytes.Length);                }                //2.WebResponse                HttpWebResponse response = request.GetResponse() as HttpWebResponse;                using (Stream responsestream = response.GetResponseStream())                {                    using (StreamReader sr = new StreamReader(responsestream))                    {                        content = sr.ReadToEnd();                    }                }            }            catch (Exception ex)            {                content = ex.Message;            }            return content;        }        ///         /// JSON格式转Dictionary        ///         ///         ///         public static Dictionary<string, string> JsonStringToKeyValuePairs(string jsonStr)        {            char jsonBeginToken = '{';            char jsonEndToken = '}';            if (string.IsNullOrEmpty(jsonStr))            {                return null;            }            //验证json字符串格式            if (jsonStr[0] != jsonBeginToken || jsonStr[jsonStr.Length - 1] != jsonEndToken)            {                throw new ArgumentException("非法的Json字符串!");            }            var resultDic = new Dictionary<string, string>();            var jobj = JObject.Parse(jsonStr);            JsonOn(jobj, resultDic);            return resultDic;        }        private static Dictionary<string, string> JsonOn(JToken jobT, Dictionary<string, string> Dic)        {            //找出包含嵌套的字段列            if (jobT is JObject jobj && jobj.Properties().Count() > 0)            {                foreach (var item in jobj.Properties())                {                    JsonProperties(item, Dic);                }            }            else            {                Dic.Add(jobT.Path, jobT.ToString());                return Dic;            }            return Dic;        }        private static Dictionary<string, string> JsonProperties(JProperty jobj, Dictionary<string, string> Dic)        {            return JsonOn(jobj.Value, Dic);        }    }}
b. 服务器方法同1.b 这里不再赘述

来源地址:https://blog.csdn.net/qq_44618510/article/details/131328581

--结束END--

本文标题: C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据

本文链接: https://lsjlt.com/news/417098.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据
    C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据, 后台请求的三种类型"application/x-www-form-urlencoded"和"multipar...
    99+
    2023-09-24
    c# 服务器 开发语言
  • SpringBoot通过请求对象获取输入流无数据
    目录请求对象获取输入流无数据问题方案一:禁用默认的过滤器方案二:使用@RequestBody注解方案三:自定义HiddenHttpMethodFilter过滤器request输入流重...
    99+
    2024-04-02
  • jQuery怎么通过Ajax向PHP服务端发送请求并返回JSON数据
    这篇文章主要介绍“jQuery怎么通过Ajax向PHP服务端发送请求并返回JSON数据”,在日常操作中,相信很多人在jQuery怎么通过Ajax向PHP服务端发送请求并返回JSON数据问题上存在疑惑,小编查...
    99+
    2024-04-02
  • 如何通过ServletInputStream读取http请求传入的数据
    目录通过ServletInputStream读取http请求传入的数据1. 使用ServletInputStream获取传入的数据2. 通过ServletInputStream获取的...
    99+
    2024-04-02
  • Express无法通过req.body获取请求传递的数据解决方法
    目录前言1、问题描述2、 解决办法2.1 解决JSON内容格式2.2、解决x-www-form-urlencoded内容格式3、附3.1、获取get请求参数3.2、封装XMLHttp...
    99+
    2022-12-08
    Express req.body请求传递 Express req.body传递数据获取
  • 如何通过jQuery获取input数据及html中name
    本篇内容主要讲解“如何通过jQuery获取input数据及html中name”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何通过jQuery获取input数据及html中name”吧!在 in...
    99+
    2023-06-27
  • 怎么通过HTML的表单向服务器发送数据
    本篇内容介绍了“怎么通过HTML的表单向服务器发送数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简单的表单实例:GET方法以下是一个通过...
    99+
    2023-06-08
  • 快速通过zabbix获取数据库连接的信息及部分扩展
    背景 随着应用系统的不断增加,原本不告警的active threads,开始频繁告警(一天2次左右)。虽然告警次数不多,而且该监控项舍得阈值不高(不超过50),但对于运维来说数据库的...
    99+
    2024-04-02
  • 如何通过zabbix获取数据库连接的信息及部分扩展
    本篇内容介绍了“如何通过zabbix获取数据库连接的信息及部分扩展”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景随着应用系统的不断增加,...
    99+
    2023-06-20
  • 服务器数据恢复过程(服务器数据恢复通用方法)
    一、服务器数据恢复背景本次需要进行数据恢复的服务器为某品牌CX4-480型号服务器,该服务器内共20块硬组成raid5磁盘阵列;两个45T的lun。机房管理员对该服务器重装系统时由于未知原因导致了服务器磁盘分区发证改变,原来的sdc3分区丢...
    99+
    2023-06-04
  • 弹性云服务器通过什么存储数据
    弹性云服务器通常支持多种类型的存储,包括本地存储、云存储、数据库、大数据等。以下是一些通用的存储选项和它们如何与您的应用程序集成的示例: 本地存储:您可以将数据存储在本地硬盘中,并使用任何存储选项存储在云端或其他地方。例如,您可以使用 ...
    99+
    2023-10-26
    弹性 服务器 数据
  • DataGrip通过ssh连接远程数据库(服务器部署数据库)
    首先创建链接配置; 先配置通过跳转的服务器ssh配置 配置ssh相关信息(服务器ip、服务器开发ssh连接端口号,Linux一般是22、服务器登录账号、服务器登录密码),测试链接成功点应用 配置要远程链接的数据库信息 (服务器...
    99+
    2023-09-14
    服务器 运维 datagrip
  • 弹性云服务器通过什么做数据存储
    弹性云服务器可以通过使用分布式存储来存储大量的数据。以下是一些常见的云服务提供商使用分布式存储的方法: HBase:HBase是一个大型的关系型数据库,它存储在多个服务器上。通过将数据分散在多个服务器上,HBase可以提高数据存储的效率...
    99+
    2023-10-26
    弹性 数据存储 服务器
  • 弹性云服务器通过什么做数据储存
    弹性云服务器可以通过使用不同类型的数据存储来存储数据。以下是一些常见的数据存储类别: 关系型数据库:可以使用MySQL、Redis等关系型数据库存储数据。这些数据库通常会提供可扩展性和可用性,使得您可以将其分布在不同的设备上。 Pyth...
    99+
    2023-10-26
    弹性 服务器 数据
  • 弹性云服务器通过什么做数据存储?
    弹性云服务器可以通过以下方法进行存储: 云存储服务:通过云存储服务进行存储数据。云存储服务通常包括磁盘阵列和服务器集群,可以用于在本地或云端上提供大量文件存储。 数据分片:将多个数据存储到单个磁盘上,以增加数据的可用性和可访问性,以便进...
    99+
    2023-10-26
    弹性 数据存储 服务器
  • 弹性云服务器通过什么做数据存储服务
    弹性云服务器通常用于为用户提供高性能、高可靠性的数据存储服务。这些服务可以是本地存储、网络存储、大数据存储等多个不同类型的数据存储服务。以下是一些可能用到的服务类型和技术: 本地存储服务:弹性云服务器通常使用云存储服务,如Dropbox...
    99+
    2023-10-26
    弹性 数据存储 服务器
  • 弹性云服务器通过什么做数据储存服务
    弹性云服务器通常被称为"虚拟数据中心",它是一种云计算服务,可以在任何计算机上提供大量的存储空间。这些存储空间通常包含大量的数据或文件,用于存储用户生成的数据、数据库、视频和音频文件等。以下是一些可能用到的功能: 文件数据存储:弹性云服...
    99+
    2023-10-26
    弹性 服务器 数据
  • Android向node.js编写的服务器发送数据并接收请求
    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下首先时node.js服务器端代码var http = require("http"); var fs = require("fs"); var queryS...
    99+
    2023-05-30
    android node.js 服务器
  • Twitter服务器的数据请求处理的过程有哪些
    本篇内容主要讲解“Twitter服务器的数据请求处理的过程有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Twitter服务器的数据请求处理的过程有哪些”吧!一、twitter的核心业务tw...
    99+
    2023-06-10
  • 通过sqlplus连接数据库服务器很慢的问题
    今天在论坛上看到一个贴子,问题是客户端sqlplus连接数据库很慢:http://www.itpub.net/thread-2090550-1-1.html,之后根据问题的描述与分析,在测试环境做了一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作