Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
Streamsend API与C#_C#_Api_Streamreader - Fatal编程技术网

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协议的情况,它也会报告。