我正在使用 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
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/