Streamsend API与C#
我似乎无法使此代码与Streamsend API与C#,c#,api,streamreader,C#,Api,Streamreader,我似乎无法使此代码与streamsendsapi一起使用。我已经在互联网上找到了很多关于我要做什么的信息。我正试图上传一个文件到他们的服务器。谁能看看这个,帮我一下吗 我不断从Streamsend服务器收到500个错误,他们说这是Streamsend应用程序本身的错误。有趣的是,如果我在靠近底部的一行被注释掉了 (//request.ContentType=“多部分/表单数据”) 取消注释后,我得到一个422错误,表示数据无效。似乎边界有问题 我是C#的新手,这是我第一次使用Streamsend
streamsendsapi
一起使用。我已经在互联网上找到了很多关于我要做什么的信息。我正试图上传一个文件到他们的服务器。谁能看看这个,帮我一下吗
我不断从Streamsend服务器收到500个错误,他们说这是Streamsend应用程序本身的错误。有趣的是,如果我在靠近底部的一行被注释掉了
(//request.ContentType=“多部分/表单数据”
)
取消注释后,我得到一个422错误,表示数据无效。似乎边界有问题
我是C#的新手,这是我第一次使用Streamsends API,因此非常感谢您的帮助
m_Method = "POST"
m_Action = "uploads"
private string StreamSendResponse(string Path, string FileName)
{
string sReturn = String.Empty;
string sLocation = String.Empty;
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = Encoding.ASCII.GetBytes(Environment.NewLine + "--" + boundary + Environment.NewLine);
Uri addy = new Uri(m_URI + m_Action);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(addy);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = m_Method;
request.KeepAlive = true;
request.Headers.Add("Authorization", "Basic " + Merv.base64Encode(m_ID + ":" + m_Key));
Stream rs = request.GetRequestStream();
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n{1}";
NameValueCollection nvc = new NameValueCollection();
foreach (string key in nvc.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n";
string header = string.Format(headerTemplate, "data", FileName);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(Path + FileName, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
rs.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] trailer = System.Text.Encoding.ASCII.GetBytes(Environment.NewLine + "--" + boundary + "--" + Environment.NewLine);
rs.Write(trailer, 0, trailer.Length);
rs.Close();
request.Accept = "application/xml";
//request.ContentType = "multipart/form-data";
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader srResponse = new StreamReader(response.GetResponseStream());
sLocation = response.Headers["Location"];
sReturn = srResponse.ReadToEnd().Trim();
}
catch (WebException exc)
{
StreamReader srResponse = new StreamReader(response.GetResponseStream());
sReturn = srResponse.ReadToEnd().Trim();
sLocation = exc.Message;
}
if (sReturn == String.Empty)
{
sReturn = sLocation;
}
return sReturn;
}
您已经在方法顶部附近设置了请求的
ContentType
,包括边界。取消注释注释注释后的like可能会用一个没有边界的值覆盖ContentType
。也许这就是422响应的原因。我理解,这就是为什么我觉得我的边界有问题。啊,对不起,我以为你不知道你已经设置好了:)你可以使用Fiddler查看你实际发送的数据。如果检测到任何违反HTTP协议的情况,它也会报告。