我在ServiceStack中编写了一个接受文件上传的Web服务。 为了测试它,我使用了以下代码:
string filePath = @"C:\myFile.pdf";
string webApi = @"http://localhost:20938/upload/myFile.pdf";
HttpWebRequest client = (HttpWebRequest)WebRequest.Create(webApi);
client.Method = WebRequestMethods.Http.Post;
client.AllowWriteStreamBuffering = false;
client.SendChunked = true;
client.ContentType = "multipart/form-data;";
client.Timeout = int.MaxValue;
using (FileStream fileStream = File.OpenRead(filePath))
{
fileStream.Copy(client.GetRequestStream());
}
var response = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd();
这适用于localhost,但是当我将其部署到远程服务器时,它不起作用。我收到500内部错误。 (其他返回JSON数据的Web API调用在本地和远程完美地工作)。
如何修复/调试此操作?
答案 0 :(得分:1)
下面的代码对我有用。 唯一的区别,我可以看到AllowWriteStreamBuffering = true;
string requestUri = Path.Combine(serverIP + @"/upload/", filename);
HttpWebRequest client = (HttpWebRequest)WebRequest.Create(requestUri);
client.Method = WebRequestMethods.Http.Post;
client.AllowWriteStreamBuffering = true;
client.SendChunked = true;
client.ContentType = "multipart/form-data;";
client.Timeout = int.MaxValue;
using (FileStream fileStream = File.OpenRead(filePath))
{
fileStream.Copy(client.GetRequestStream());
}
var response = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd();
你有防火墙,阻止端口吗?
答案 1 :(得分:1)
修正了问题。问题在于代码的另一部分。 我设法通过服务堆栈日志找到。
答案 2 :(得分:1)
注意:ServiceStack C# ServiceClients和HttpUtils都支持上传文件 - 有关示例,请参阅FileUploadTests.cs。