C# 正在将文件上载到Box.net

C# 正在将文件上载到Box.net,c#,box-api,C#,Box Api,我正在尝试使用rest api将文件上载到box.net。但我每次都会遇到404错误。 这里是请求头(来自fiddler)。我犯了什么错误 POST https://api.box.com/2.0/files/content HTTP/1.1 Authorization: BoxAuth api_key={key}&auth_token={tokem} Content-Type: multipart/form-data; boundary="13afaf22-f210-464b-b

我正在尝试使用rest api将文件上载到box.net。但我每次都会遇到404错误。 这里是请求头(来自fiddler)。我犯了什么错误

 POST https://api.box.com/2.0/files/content HTTP/1.1
 Authorization: BoxAuth api_key={key}&auth_token={tokem}
 Content-Type: multipart/form-data; boundary="13afaf22-f210-464b-bcc3-3cd3e4ed1617"
 Host: api.box.com
 Content-Length: 166
 Expect: 100-continue

 --13afaf22-f210-464b-bcc3-3cd3e4ed1617
 Content-Disposition: form-data; filename=test.zip; folder_id=0
 {empty line - I don't know why it here} 
 {bytes starting here}
 --13afaf22-f210-464b-bcc3-3cd3e4ed1617--
注意,我使用c#及其HttpClient类和MultiPartFormDataContent作为内容源

已解决:

问题解决了。请求头和正文应如下所示:

POST https://api.box.com/2.0/files/content HTTP/1.1
Authorization: BoxAuth api_key={key}&auth_token={token}
Content-Type: multipart/form-data; boundary="d174f29b-6def-47db-8519-3da38b21b398"
Host: api.box.com
Content-Length: 314
Expect: 100-continue

--d174f29b-6def-47db-8519-3da38b21b398
Content-Disposition: form-data; filename="hello.txt"; name="filename"
Content-Type: application/octet-stream

{Bytes}
--d174f29b-6def-47db-8519-3da38b21b398
Content-Disposition: form-data; name="folder_id"

0 
--d174f29b-6def-47db-8519-3da38b21b398--

谢谢

好的,如果有人感兴趣,这里有一种方法可以将文件上传到Box.com

我正在使用.NET4.5中的类

   public async Task Upload(string authorization, string filename, string parentID)
    {
        HttpRequestMessage message = new HttpRequestMessage();
        message.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("BoxAuth", authorization);


        MultipartFormDataContent content = new MultipartFormDataContent();
        StreamContent streamContent = null;

        streamContent = new StreamContent(new FileStream(localURI, FileMode.Open));

        streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
        {
            FileName = "\"" + filename + "\"",
            Name = "\"filename\""
        };
        streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        content.Add(streamContent);

        ByteArrayContent byteContent = new ByteArrayContent(parentID.ToByteArray());
        byteContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
        {
            Name = "\"folder_id\""
        };

        content.Add(byteContent);
        message.Method = HttpMethod.Post;
        message.Content = content;

        message.RequestUri = new Uri("https://api.box.com/2.0/files/content");

        HttpResponseMessage response = null;

        Task<HttpResponseMessage> t = httpClient.SendAsync(message, cancelationToken);
        response = await t;

        if (t.IsCompleted)
        {
            if (!response.IsSuccessStatusCode)
            {
                if (response.Content != null)
                    Logger.Error(await response.Content.ReadAsStringAsync(), "Box Upload");
                else
                    Logger.Error("Error", "Box Upload");
            }
        }
    }
公共异步任务上载(字符串授权、字符串文件名、字符串父ID)
{
HttpRequestMessage=新的HttpRequestMessage();
message.Headers.Authorization=new System.Net.Http.Headers.AuthenticationHeaderValue(“BoxAuth”,Authorization);
MultipartFormDataContent内容=新的MultipartFormDataContent();
StreamContent-StreamContent=null;
streamContent=newstreamcontent(newfilestream(localURI,FileMode.Open));
streamContent.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“表单数据”)
{
FileName=“\”+FileName+“\”,
Name=“\”文件名“”
};
streamContent.Headers.ContentType=新的MediaTypeHeaderValue(“应用程序/八位字节流”);
content.Add(streamContent);
ByteArrayContent byteContent=新的ByteArrayContent(parentID.ToByteArray());
byteContent.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“表单数据”)
{
Name=“\”文件夹\u id“”
};
content.Add(字节内容);
message.Method=HttpMethod.Post;
message.Content=内容;
message.RequestUri=新Uri(“https://api.box.com/2.0/files/content");
HttpResponseMessage响应=null;
Task t=httpClient.SendAsync(消息,cancelationToken);
响应=等待t;
如果(t.已完成)
{
如果(!response.issucessStatusCode)
{
if(response.Content!=null)
Logger.Error(wait response.Content.ReadAsStringAsync(),“Box Upload”);
其他的
Logger.Error(“Error”,“Box Upload”);
}
}
}

您可以发布您的解决方案作为此问题的答案吗?感谢您回来回答您自己的问题,它确实有助于不太流行的标记。当我尝试上载一个大文件(>25MB)时,这对我来说是失败的,我正在Windows Mobile 8开发中使用此代码,请告诉我可能的原因。这可能是由HttpClient的小写入超时引起的。