c# - ServiceStack 客户端添加附件

标签 c# soap servicestack

我正在使用 ServiceStack.ServiceClient.Web.XmlServiceClient 连接到网络服务。有没有办法在请求中添加附件?

更多信息:

我想做的是避免使用 Microsoft.Web.Services2,因为我使用的是 Mono。我正在尝试上传 XML 数据文件以及 XML 请求。就像这个问题: Upload report unit via webservice in C# .net to jasperserver

最佳答案

要上传文件,最好(也是最快)的方法是将其编码为普通的请求变量,而只是将其作为普通的 HTTP 上传上传到 Web 服务,ContentType multipart/表单数据,即 HTML 表单当前如何将文件发送到 url。

ServiceStack内置支持以这种方式处理上传的文件,在 ServiceStack's RestFiles example project 中提供了如何执行此操作的完整示例。 .

要使用 ServiceClient 上传文件,您可以使用 .PostFile() 方法 seen in this example :

var fileToUpload = new FileInfo(FilesRootDir + "TESTUPLOAD.txt");

var response = restClient.PostFile<FilesResponse>(WebServiceHostUrl + "files/README.txt",
    fileToUpload, MimeTypes.GetMimeType(fileToUpload.Name));

所有上传的文件都通过 base.RequestContext.Files 集合可用,您可以 easily process with the SaveTo() method (作为流或文件)。

foreach (var uploadedFile in base.RequestContext.Files)
{
    var newFilePath = Path.Combine(targetDir.FullName, uploadedFile.FileName);
    uploadedFile.SaveTo(newFilePath);
}

与返回文件响应(作为附件或直接)类似,您只需要 return the FileInfo in a HttpResult like :

return new HttpResult(FileInfo, asAttachment:true);

多个文件上传

您还可以使用所有 .NET 服务客户端中可用的 PostFilesWithRequest API 在单个 HTTP 请求中上传多个流。它支持使用 QueryString 的任意组合填充 Request DTO 和 POST 的 FormData 以及多个文件上传数据流,例如:

using (var stream1 = uploadFile1.OpenRead())
using (var stream2 = uploadFile2.OpenRead())
{
    var client = new JsonServiceClient(baseUrl);
    var response = client.PostFilesWithRequest<MultipleFileUploadResponse>(
        "/multi-fileuploads?CustomerId=123",
        new MultipleFileUpload { CustomerName = "Foo,Bar" },
        new[] {
            new UploadFile("upload1.png", stream1),
            new UploadFile("upload2.png", stream2),
        });
}

仅使用类型化请求 DTO 的示例。 JsonHttpClient 还包括每个 PostFilesWithRequest API 的异步等价物:

using (var stream1 = uploadFile1.OpenRead())
using (var stream2 = uploadFile2.OpenRead())
{
    var client = new JsonHttpClient(baseUrl);
    var response = await client.PostFilesWithRequestAsync<MultipleFileUploadResponse>(
        new MultipleFileUpload { CustomerId = 123, CustomerName = "Foo,Bar" },
        new[] {
            new UploadFile("upload1.png", stream1),
            new UploadFile("upload2.png", stream2),
        });
}

关于c# - ServiceStack 客户端添加附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8296867/

相关文章:

web-services - 使用 fiddler 捕获 Web 服务 xml 请求

servicestack - TableAlias 不适用于多个联接

c# - 无法安装包 ServiceStack.Interfaces

c# - 以编程方式隐藏重复表

c# - 复杂的 LINQ 查询

c# - 生成的 LINQ 类的动态属性访问

c# - 如何从另一个方法调用按钮单击事件

c# - 如何反序列化 SOAP 响应?

php - PHP NuSoap 中的复杂类型

redis - 使用 ServiceStack 将 System.Data.Dataset 存储和检索到 Redis