我在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();
这适用于本地主机,但是当我将其部署到远程服务器时,它不起作用。我收到 500 内部错误。(返回 JSON 数据的其他 Web API 调用在本地和远程完美运行)。
如何修复/调试此问题?
下面的
代码对我有用。我能看到的唯一区别是 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();
你有防火墙,阻止端口吗?
修复了此问题。问题出在代码的另一部分。我设法通过服务堆栈日志记录找到。
注意:ServiceStack C# ServiceClients 和 HttpUtils 都支持上传文件 - 有关示例,请参阅 FileUploadTests.cs。