C#中HttpWebRequest上传文件请求转发与WebResponse响应解析

C#上传文件到服务器 c#上传文件到服务器本文主要介绍如何以文件流的方式上传本地文件到服务端:环境介绍 所用语言:客户端C#,服务端Java+Spring框架 客户端代码说明: 通过网页端调试可以发现,上传文件流时候,请求信息里面有 ContentType = "multipart/form-data;charset=utf-8;boundary=----WebKitFormBoundary" + boundary;上述 阅读详情

对外暴露一个上传文件的WebAPI给第三方使用,实现层面上,本质上是将请求转发到另外一个WebService,并处理它返回的结果,构造成指定的格式返回给第三方。

看代码:

       /// <summary>
        /// 测试:文件上传
        /// </summary>
        /// <returns></returns>
        [System.Web.Mvc.HttpPost]
        public IHttpActionResult Send()
        {
            //处理接收到的请求,解析请求内容与大小
            var curRequest = HttpContext.Current.Request;
            byte[] inputBytes;
            int inputStreamLength;
            using (var inputStream = curRequest.InputStream)
            {
                inputStreamLength = Convert.ToInt32(inputStream.Length);
                inputBytes = new byte[inputStreamLength + 1];
                inputStream.Read(inputBytes, 0, inputStreamLength);
                inputStream.Close();
            }

            //构造真正的请求
            //请求方式为POST,请求内容格式、内容与接收到的请求保持一致
            var request = (HttpWebRequest)WebRequest.Create("http://172.16.50.135:8888/Projects/Common/Mobile/ReceiveUploadFile.aspx");
            request.Method = "POST";
            request.ContentType = curRequest.ContentType;
            request.ContentLength = curRequest.ContentLength;
            using (var requestStream = request.GetRequestStream())
            {
                requestStream.Write(inputBytes, 0, inputStreamLength);
                requestStream.Close();
            }
            //获取请求返回响应结果
            var response = request.GetResponse();
            
            //处理返回结果
            var sResult = "";
            var responseStreamLength = Convert.ToInt32(response.ContentLength);
            //返回结果为空时,构造提示失败
            if (responseStreamLength <= 0)
                return Json(new { code = 400, desc = "失败", data = sResult });
            //返回结果不为空时,解析结果
            using (var responseStream = response.GetResponseStream())
            {
                var responseBytes = new byte[responseStreamLength];
                if (responseStream != null)
                {
                    responseStream.Read(responseBytes, 0, responseStreamLength);
                    responseStream.Close();
                }
                //请字节数组转为字符串
                sResult = Encoding.ASCII.GetString(responseBytes);
            }
            //返回成功消息
            return Json(new {code = 200, desc = "成功", data = sResult.Replace(" ", "")});
        }

技术关键点:

1.从调用我们真正对外暴露的接口中获取请求上下文,包括请求内容、格式、大小等

2.构造实际的请求,包括请求地址、方式等,且请求格式、内容、大小均从对外暴露的接口中解析获得并赋值

3.获取实际请求结果时,能将有价值的内容从ANSI数组转换成字符串格式

测试:

1.我们在Fiddler中构造请求,调用我们对外暴露的接口

2.执行请求,正常返回结果

3.其中,内部实际调用接口返回的结果为

 

C# HttpWebRequest详解 一.前言 HttpWebRequest是C#原生语法提供的实现了Http协议完整封装的类,可以实现任意类型的Http请求。但是也因为参数众多,导致很多人不容易掌握它。 今天我们来尝试从简入繁的给大家介绍下HttpWebRequest 二.常用属性 AllowAutoRedirect:获取或设置一个值,该值指示请求是否应跟随重定向响应。 CookieContainer:获取或设置与此请求关联的cookie。 Credentials:获取或设置请求的身份验证信息。 KeepAlive:获取或设置 阅读详情

相关推荐

C# HttpWebRequest上传文件示例

这个东东有两个用处 1.这是一个用HttpWebRequest类构建完整Http多部请求上传文件的示例 2.上传地址是金山文档预览的地址,所以,只要上传的是word、pdf、excel一类的文档,可以通过返回的地址直接在线预览,是一种偷懒的文档在线浏览解决方案。

c#使用HttpWebRequest上传文件

使用c#的HttpRequest上传文件需要注意文件头部的的格式,以流的形式将数据传递到服务器那边但是post的格式要正确,不然服务器那边无法解析所需要的数据总是返回错误。上传的代码全都在这里测试也通过了,要仔细看哦,在这里首先在本地将文件压缩,然后实现上传,花了很长时间问题才解决总算松了口气啊,呵呵。namespace WebInterface.FileOperation {

mig3719的专栏 4486

绿联UGOS Pro系统虚拟机部署Windows 11详细教程(跳账户登录,安装内存驱动)

总的来说,此次的虚拟机部署Windows 11出现的问题应该是目前几乎所有虚拟机都可能出现的问题,和绿联是没有关系的。所以说如果你在其它NAS上虚拟机部署Windows 11系统如果出现同样的问题,那么今天教程的方案也同样适用于你。

qq_63499861的博客 1万+

C# 文件上传(HttpWebRequest) 文件下载

【代码】C# 文件上传(HttpWebRequest) 文件下载。

weixin_39667153的博客 865

现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

建立直线一级倒立摆系统的动力学模型,推导该系统的运动方程,求出直线一级倒立摆系统传递函数模型及空间状态方程模型。接着描述了PID控制系统设计原理及PID控制器各校正环节的作用,简要叙述了参数的整定方法。设计了直线一级倒立摆摆杆摆角及小车位置常规单回路控制器,通过Simulink仿真知道常规单回路控制器能控制摆杆摆角,不能控制小车位置。于是设计出了直线一级倒立摆双闭环控制器及基于倒立摆系统的状态空间方程控制器,利用软件进行仿真,仿真结果表明,常规双闭环控制方案和基于状态空间方程加控制方案均能对摆杆摆角及小车位

mengshenglo的博客 4万+

CCS8.1 导入CCS3.3工程方法

    CCS3.3作为开发人员使用最广开发工具,研究人员手上存在不少该版本的建立的程序版本,然而随着TI公司推出高级版本的CCS平台,在新的平台上集成了更加丰富的功能和优点。利用新版本的平台在开发和编译旧版本工程上可以节省大量时间和精力。在使用新版本开发3.3版本工程时,首要解决的就是加载3.3的工程文件,现将加载过程记录如下: 第一步:Project-&gt;Import Legacy CC...

1万+

C# HttpWebRequest上传文件到服务器(multipart/form-data)

public bool Add(IList&lt;Sim_FilterParam&gt; entity) { if (entity == null) { return false; } // 分段内容 string reqUrl = JsonrpcHttpClient.MakeRpcUrl(typeof(Sim_FilterParam)....

ZHENG 1万+

Abaqus 2023 保姆级安装避坑指南:从环境变量到许可证配置,一次搞定

本文提供Abaqus 2023的详细安装指南,涵盖环境变量设置、许可证配置等关键步骤,帮助用户避开常见安装陷阱。通过系统环境检查、目录结构规划、许可证服务器安装及Java环境配置等实用技巧,确保顺利完成安装并优化软件性能。

weixin_42524276的博客 425

C# HttpWebRequest 后台调用接口上传大文件以及其他参数(使用postFormData传输方式)

截图: 截图抓包: 其特征则是 使用formdata的方式: 首先请求参数的封装 /// <summary> /// 上传文件 - 请求参数类 /// </summary> public class UploadParameterType { public UploadParameterType() { FileNameKey = "fileName"; Encodin

weixin_40029679的博客 4780

Win10安装Nek5000

1 安装wsl 2 2 安装Nek5000 3 安装依赖项 4 安装openmpi 5 配置Nek5000 6 编译Nek5000 7 运行Nek5000算例 8 安装paraview并查看结果

weixin_43176703的博客 3451

【暂时完结】Prescan学习笔记

Prescan学习记录1. Prescan基础知识1.1 Conventions·坐标1.2 Road segment·道路片段1.2.1 让一个路段连接其他两个路段1.2.2 配置车道线1.2.3 Road marking·道路标志1.3 Trajectory·轨迹1.3.1 建立一个Path·路径1.3.2 配置Speedprofile1.3.3 Synchronization of Trajectories·轨迹同步1.3.4 Multiple trajectories · 多轨迹分配 1. Pres

dreautumn的博客 1万+

使用HTTPWebrequest上传文件(多部分/表单数据)

Is there any class, library or some piece of code which will help me to upload files with HTTPWebre

xfxf996的博客 2035

Python面试题及详细答案150道(126-135) -- 数据库交互篇

本文介绍了Python中操作MySQL、SQLite数据库及ORM框架的核心技术。主要内容包括:1. 使用pymysql连接MySQL数据库,演示了连接配置、SQL执行和事务管理;2. ORM原理及主流框架SQLAlchemy和Django ORM的示例;3. 通过sqlite3模块操作轻量级SQLite数据库;4. 数据库事务的ACID特性解析。这些内容涵盖了Python数据库开发的关键知识点,适合准备前后端面试的开发者复习核心概念和实际应用。

大剑师兰特的GIS世界 1729

C#上传文档

1.HttpHelper类: 复制内容到剪贴板 using System; using System.Collections.Specialized; using System.IO; using System.Net; using System.Text; namespace ConsoleApplication1 {     public static c

踏上青云路的博客 433

【算法】克里金kriging参数值预测模型

模型中特征值2个,目标值1个,data数据集如图所示。搭建kriging参数值预测模型。

weixin_48618536的博客 5059

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c# 通过HttpWebRequest上传txt文件

c# 通过HttpWebRequest上传txt文件 HttpWebRequest,它是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过HTTP协议和服务器交互 这是我后台方法,实测上传txt文件可用 源码: /// <summary> /// /// </summary> /// <param name="file">上传文件地址</param>

SQW_Lemon的博客 1163

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#模拟HTTP请求并发送二进制

public static String Submit(String methodName) { string postData = "this is post data";//请求的数据,后面转换成二进制请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(URL)); ...

weixin_34072458的博客 824

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从HTTP的multipart/form-data分析看C#后台 HttpWebRequest文件上传

在web请求中ContentType一直没有过多关注,也知道ContentType设置为application/x-www-from-urlencoded或multipart/form-data 后和接口层后台获取参数值有重要关系。但都没有稍深入研究,这次研究了一番,记录于此!首先为何常见的web前端文件上传使用的是multipart/form-data 而非x-www-from-urlencod...

elie_yang的博客 3万+

C#HTTP文件上传和参数

C# HTTP文件上传和参数

eleganthua的博客 3299

如何通过 HttpWebRequest 上传文件?

咨询区 dr. evil我不希望通过 WebDAV 文件夹的方式上传文件,我想通过相关的 HttpWebRequest 类,类库或者代码片段来帮我模拟浏览器行为来上传文件,请问是否有好的解...

dotNET跨平台 1716

C#实现HTTP上传文件的方法

C#实现HTTP上传文件的方法

cangqiongxiaoye的博客 1177

C#实现HTTP服务器:(10)处理文件上传

主要实现对HTTP文件上传的协议分析、请求实体编码分析和请求实体的解析,同时把文件保存到临时目录。

艾恩 5135

接收端通过Request.InputStream读取

接收端通过Request.InputStream读取

wjbaiverson的专栏 2万+

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

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

qq_44618510的博客 7849

C# Request.InputStream 读取输入流为空的原因处理

今天在手机App测试接口的时候发现一个通过POST方式的接口 获取body中的参数一直为空,但是在数据量小的时候却可以获取到数据,开始怀疑是不是POST的长度有限制,然后在web.config中修改了一下maxRequestLength,如下 <system.web> <httpRuntime targetFramework="4.5" maxRequestLen...

weixin_33769125的博客 2852
上一篇: Oracle导入dmp文件提示标头验证失败
下一篇: C#中模型字段取值的字段计算
acngiser
博客等级 码龄15年 118粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值