当前位置: 首页 > 编程语言 > C#

既然WebClient的uploadData没有对数据进行编码,那给它加上“Content-Type”、“multipart-form-data”headers有什么作用呢?分享

时间:2023-04-11 10:41:10 C#

由于WebClient的uploadData没有对数据进行编码,那么在其中添加“Content-Type”、“multipart/form-data”headers有什么效果呢?C#的uploadData方法不对发送的数据进行编码。因此,如果我使用这种方法发送文件(在将其转换为字节后),并且接收方正在寻找multiform/form-datapost,它显然不起作用。将像这样添加标题:WebClientc=newWebClient();c.Headers.Add("Content-Type","multipart/form-data");让它发送加密为多部分的数据,或者如果数据仍然没有加密(所以服务器需要无法解析的多个数据)?请注意,我不能使用WebClient的uploadFile,因为我没有在客户端获取文件路径位置的权限(我只有一个可以转换为字节的流)如果你希望它安全,为什么不使用WebClient的UploadFile而不是https?这将自动处理添加多部分/表单数据。使用UploadFile示例http://msdn.microsoft.com/en-us/library/36s52zhs.aspx还有一件事,编码和加密是两个不同的东西。编辑:如果您在WebClient项目中使用WebClient,则应将问题标记为Silverlight。无论如何,SL中的WebClient类没有任何UploadData方法。有关详细信息,请参阅此http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.95%29.aspx无论如何,这是解决您的问题的有效方法:当您单击按钮,输入以下代码:OpenFileDialogdialog=newOpenFileDialog();布尔?retVal=dialog.ShowDialog();如果(retVal.HasValue&&retVal==true){使用(Streamstream=dialog.File.OpenRead()){MemoryStreammemoryStream=newMemoryStream();stream.CopyTo(内存流);WebClientwebClient=newWebClient();webClient.Headers["Content-type"]="multipart/form-data;boundary=-----------------------"+_boundaryNo;webClient.OpenWriteAsync(newUri("http://localhost:1463/Home/File",UriKind.Absolute),"POST",new{Stream=memoryStream,FileName=dialog.File.Name});webClient.OpenWriteCompleted+=newOpenWriteCompletedEventHandler(webClient_OpenWriteCompleted);}}和事件本身:voidwebClient_OpenWriteArvriteCompleted(OpenWriteCompleted,objectsitee){if(e.Error==null){动力cobj=e.UserState;MemoryStreammemoryStream=obj.StreamasMemoryStream;字符串文件名=obj.文件名;if(responseStream!=null&&memoryStream!=null){stringheaderTemplate=string.Format("----------------------------{0}rn",_boundaryNo);内存流.Position=0;byte[]byteArr=memoryStream.ToArray();stringdata=headerTemplate+string.Format("Content-Disposition:form-data;name="pic";filename="{0}"rnContent-Type:application/octet-streamrnrn",fileName);byte[]header=Encoding.UTF8.GetBytes(数据);responseStream.Write(header,0,header.Length);responseStream.Write(byteArr,0,byteArr.Length);header=Encoding.UTF8.GetBytes("rn");responseStream.Write(byteArr,0,byteArr.Length);byte[]trailer=System.Text.Encoding.UTF8.GetBytes(string.Format("----------------------------{0}--rn",_boundaryNo));responseStream.Write(trailer,0,trailer.Length);}memoryStream.Close();responseStream.Close();}}其中_boundaryNo是p私有字符串_boundaryNo=DateTime.Now.Ticks.ToString("x");我用过Asp.NetMVC4和Silverlight5。祝你好运:)以上是C#学习教程:由于WebClient的uploadData没有对数据进行编码,所以给它加上“Content-Type”有什么效果,“多部分/表单数据”标题?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: