我正在使用ServiceStack网络服务来处理图片上传。
通过IIS
在AppHostBase
中托管此服务时,一切正常。
现在我已经切换到使用AppHostHttpListenerBase
在控制台应用中运行的自托管服务,突然间我再也无法访问上传的数据了。
我使用以下属性来访问该文件:
var uploadedFiles = base.Request.Files;
自托管时,此IHttpFile
数组为空。托管在ISS
时,它包含上传内容。
客户端发送Content-Type
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。
这是不是应该在自托管时工作,还是我必须配置一些东西才能使它工作?
答案 0 :(得分:2)
我已经测试过在新的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
标题
content-disposition:form-data; NAME = “文件1”;文件名= “somefile.jpg”