Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多部分/表单数据上传-Can';t在自托管服务中检索文件_C#_Web Services_Http_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Web Services,Http,servicestack" /> servicestack,C#,Web Services,Http,servicestack" />

C# 使用多部分/表单数据上传-Can';t在自托管服务中检索文件

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

我正在使用ServiceStack Web服务来处理图像上载

通过
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
值必须用双引号括起来才能工作。当我添加这些时,我可以看到文件。如果你添加一个答案,我将接受它。很高兴你得到它的工作。我补充了答案。