C# 使用多部分/表单数据上传-Can';t在自托管服务中检索文件
我正在使用ServiceStack Web服务来处理图像上载 通过C# 使用多部分/表单数据上传-Can';t在自托管服务中检索文件,c#,web-services,http,
servicestack,C#,Web Services,Http,
servicestack,我正在使用ServiceStack Web服务来处理图像上载 通过AppHostBase在IIS中托管此服务时,一切正常 现在,我使用AppHostHttpListenerBase切换到一个在控制台应用程序中运行的自托管服务,突然间我无法访问上传的数据 我正在使用以下属性访问该文件: var uploadedFiles = base.Request.Files; 自托管时,此IHttpFile数组为空。当托管在ISS中时,它包含上载 客户端正在发送一个内容类型为multipart/form d
AppHostBase
在IIS
中托管此服务时,一切正常
现在,我使用AppHostHttpListenerBase切换到一个在控制台应用程序中运行的自托管服务,突然间我无法访问上传的数据
我正在使用以下属性访问该文件:
var uploadedFiles = base.Request.Files;
自托管时,此IHttpFile
数组为空。当托管在ISS
中时,它包含上载
客户端正在发送一个内容类型为multipart/form data
的请求,如下所示:
POST http://localhost:8081/upload/aaa HTTP/1.1
Accept: application/json
Content-Type: multipart/form-data; boundary="607a4dcf-585a-483b-b7dd-9f30d902e4a8"
Host: localhost:8081
Content-Length: 69553
--607a4dcf-585a-483b-b7dd-9f30d902e4a8
Content-Type: application/octet-stream
Content-Disposition: form-data; name=file; filename=file; filename*=utf-8''file
**** IMAGE DATA ****
--607a4dcf-585a-483b-b7dd-9f30d902e4a8--
我使用的是NuGet的ServiceStack版本4.0.5。宿主项目正在运行.NET 4.5
这在自托管时不应该工作,还是我必须配置一些东西才能工作?我已经在一个全新的v4项目中测试过使用ServiceStack上传文件
Program.cs
using System;
using ServiceStack;
namespace Testv4
{
class MainClass
{
public static void Main()
{
var appHost = new AppHost(500);
appHost.Init();
appHost.Start("http://*:8082/");
Console.ReadKey();
}
}
public class TestApp
{
[Route("/upload", "POST")]
public class UploadFileRequest {}
public class TestController : Service
{
public void Any(UploadFileRequest request)
{
Console.WriteLine(Request.Files.Length);
}
}
}
public class AppHost : AppHostHttpListenerPoolBase
{
public AppHost(int poolSize) : base("Test Service", poolSize, typeof(TestApp).Assembly)
{
}
public override void Configure(Funq.Container container)
{
}
}
}
index.html
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<form action="/upload" method="POST" enctype="multipart/form-data">
<h1>Upload File</h1>
<input type="file" name="File1" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
试验
上载文件
HttpListener
要求在文件名周围引用Content-Disposition
标题
内容配置:表单数据;name=“File1”;filename=“somefile.jpg”
彼得,应该有用。我刚刚在v4中设置了一个新项目,在查看文件时没有任何问题。我的工作代码。你能发布你的配置文件吗,这样我就能理解你的不同做法了吗?@Scott谢谢你的帮助。你的回答使我走上了正确的道路。似乎HttpListener
对Content-Disposition
头非常严格。filename
值必须用双引号括起来才能工作。当我添加这些时,我可以看到文件。如果你添加一个答案,我将接受它。很高兴你得到它的工作。我补充了答案。