Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#上载文件错误-表单数据损坏:无前导边界_C#_Httpwebrequest_Webclient_Multipartform Data_Httpwebresponse - Fatal编程技术网

C#上载文件错误-表单数据损坏:无前导边界

C#上载文件错误-表单数据损坏:无前导边界,c#,httpwebrequest,webclient,multipartform-data,httpwebresponse,C#,Httpwebrequest,Webclient,Multipartform Data,Httpwebresponse,我正在使用下面的代码进行身份验证并将文件上载到网站,但我收到一个错误“损坏的表单数据:无前导边界” 在Fiddler中,我看到了这一点(当我使用浏览器上传文件时,我看到了完全相同的事情),不知道为什么我在使用C#HttpWebRequest/WebClient时会出错 小提琴手信息: ------WebKitFormBoundary9ewWOMyBmk0YAhTL Content-Disposition: form-data; name="FileSubmitted"; filename="SA

我正在使用下面的代码进行身份验证并将文件上载到网站,但我收到一个错误“损坏的表单数据:无前导边界”

在Fiddler中,我看到了这一点(当我使用浏览器上传文件时,我看到了完全相同的事情),不知道为什么我在使用C#HttpWebRequest/WebClient时会出错

小提琴手信息:

------WebKitFormBoundary9ewWOMyBmk0YAhTL
Content-Disposition: form-data; name="FileSubmitted"; filename="SAMPLE_0001.xls"
Content-Type: application/vnd.ms-excel

------WebKitFormBoundary9ewWOMyBmk0YAhTL
Content-Disposition: form-data; name="FileSubmittedValue" 

C:\path\SAMPLE_0001.xls
------WebKitFormBoundary9ewWOMyBmk0YAhTL--
假设:

硬编码了“边界”值,因为我不确定登录后如何获取“边界”值

代码:从Stackoverflow复制

static void Main()
{
NameValueCollection nvCollection=新的NameValueCollection();
CookieAwareWebClient webClient=新CookieAwareWebClient();
nvCollection.Clear();
nvCollection[“名称”]=“ABC”;
nvCollection[“密码”]=“XYZ”;
//登录到该站点
字节[]响应字节=webClient.UploadValues(“https://www.somesite.com/login.cfm“,”邮政“,”收集);
string resultuthtticket=Encoding.UTF8.GetString(responseBytes);
//吃饼干
CookieCollection cookies=webClient.CookieContainer.GetCookies(新Uri(“https://www.somesite.com/login.cfm"));
//
字符串URL=”https://www.somesite.com/app/request.cfm";
字符串边界=“----WebKitFormBoundary9EWMYBMK0YAHTL”;
string FilePath=“C:\\Users\\user.name\\Desktop\\SAMPLE\u 0001.xls”;
byte[]fileData=GetMultipartFormData(新字典(){{“FileSubmitted”,FilePath},边界);
PostForm(URL、“、”、文件数据、边界、cookies);
}
私有静态字节[]GetMultipartFormData(字典后参数,字符串边界)
{
编码=Encoding.UTF8;
Stream formDataStream=new System.IO.MemoryStream();
bool needsCLRF=假;
foreach(后参数中的var参数)
{
//感谢评论者的反馈,添加一个CRLF以允许添加多个参数。
//跳过第一个参数,将其添加到后续参数。
如果(需要SCLRF)
formDataStream.Write(encoding.GetBytes(“\r\n”)、0、encoding.GetByteCount(“\r\n”);
needsCLRF=true;
{
string postData=string.Format(“--{0}\r\n内容配置:表单数据;名称=\“{1}\”;文件名=\“{2}\”\r\n内容类型:{3}\r\n\r\n”,
边界,
参数键,
参数值,
“应用程序/vnd.ms excel”);
Write(encoding.GetBytes(postData),0,encoding.GetByteCount(postData));
string postData2=string.Format(“--{0}\r\n内容配置:表单数据;名称=\“{1}\”\r\n\r\n{2}”,
边界,
“文件提交值”,
“C:\\path\\SAMPLE_0001.xls”);
Write(encoding.GetBytes(postData2),0,encoding.GetByteCount(postData2));
}
}
//添加请求的结尾。以换行符开头
string footer=“\r\n-->+boundary+”-->\r\n”;
Write(encoding.GetBytes(footer),0,encoding.GetByteCount(footer));
//将流转储到一个字节[]
formDataStream.Position=0;
byte[]formData=新字节[formDataStream.Length];
读取(formData,0,formData.Length);
formDataStream.Close();
返回表单数据;
}   
私有静态HttpWebResponse PostForm(字符串postrl、字符串userAgent、字符串contentType、字节[]formData、字符串边界、CookieCollection cookies)
{
HttpWebRequest-request=WebRequest.Create(postrl)为HttpWebRequest;
if(请求==null)
{
抛出新的NullReferenceException(“请求不是http请求”);
}
//设置请求属性。
request.UserAgent=UserAgent;
request.ContentLength=formData.Length;
request.ContentType=“多部分/表单数据;boundary=“+boundary;
request.Method=“POST”;
request.KeepAlive=true;
request.Accept=“text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8”;
request.CookieContainer=新的CookieContainer();
request.CookieContainer.Add(cookies);
request.Host=“secure.somesite.com”;
request.Referer=String.Format(“https://secure.somesite.com/app/request.cfm?CFID={0}&CFTOKEN={1},cookies[0]。值,cookies[1]。值);
request.UserAgent=“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/31.0.1650.63 Safari/537.36”;
//将表单数据发送到请求。
使用(Stream requestStream=request.GetRequestStream())
{
Write(formData,0,formData.Length);
requestStream.Close();
}
尝试
{
将request.GetResponse()作为HttpWebResponse返回;
}
捕获(WebException wex)
{
var pageContent=newstreamreader(wex.Response.GetResponseStream())
.ReadToEnd();
返回null;
}
返回null;
}
错误:

<head><title>JRun Servlet Error</title></head><h1>500 </h1><body>
<pre>
Corrupt form data: no leading boundary:  != ------WebKitFormBoundary9ewWOMyBmk0YAhTL</pre><br><pre>
java.io.IOException: Corrupt form data: no leading boundary:  != ------WebKitFormBoundary9ewWOMyBmk0YAhTL
    at com.oreilly.servlet.multipart.MultipartParser.&lt;init&gt;(MultipartParser.java:176)
    at com.oreilly.servlet.multipart.MultipartParser.&lt;init&gt;(MultipartParser.java:95)
    at coldfusion.filter.FormScope.fillMultipart(FormScope.java:170)
    at coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:435)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)
    at coldfusion.CfmServlet.service(CfmServlet.java:175)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
    at jrun.servlet.FilterChain.service(FilterChain.java:101)
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
</pre></body>
jrunservlet错误500
损坏的表单数据:无前导边界:!=------WebKitFormBoundary9EWMYBMK0YAHTL
java.io.IOException:损坏的表单数据:无前导边界:!=------WebKitFormBoundary9EWMYBMK0YAHTL 位于com.oreilly.servlet.multipart.MultipartParser.init(MultipartParser.java:176) 位于com.oreilly.servlet.multipart.MultipartParser.init(MultipartParser.java:95) 在coldfusion.filter.FormScope.fillMultipart(FormScope.java:170)中 在coldfusion.filter.FusionContext.SymTab_initForRequest处(FusionContext.java:435) 位于coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33) 位于coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 在coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)中 位于coldfusion.CfmServlet.service(CfmServlet.java:175) 位于coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 在jrun.servlet.FilterCh
<head><title>JRun Servlet Error</title></head><h1>500 </h1><body>
<pre>
Corrupt form data: no leading boundary:  != ------WebKitFormBoundary9ewWOMyBmk0YAhTL</pre><br><pre>
java.io.IOException: Corrupt form data: no leading boundary:  != ------WebKitFormBoundary9ewWOMyBmk0YAhTL
    at com.oreilly.servlet.multipart.MultipartParser.&lt;init&gt;(MultipartParser.java:176)
    at com.oreilly.servlet.multipart.MultipartParser.&lt;init&gt;(MultipartParser.java:95)
    at coldfusion.filter.FormScope.fillMultipart(FormScope.java:170)
    at coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:435)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)
    at coldfusion.CfmServlet.service(CfmServlet.java:175)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
    at jrun.servlet.FilterChain.service(FilterChain.java:101)
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
</pre></body>
formDataStream.Write(fileToUpload.File, 0, fileToUpload.File.Length);