使用 Rest Sharp 将多个文件传递到 Service Stack Windows 服务






1.80/5 (2投票s)
使用 Rest Sharp 将多个文件传递到 Service Stack Windows 服务
引言
最近,我正在处理一个功能,即使用 REST API 将多个文件传递到 Service Stack Windows 服务。没有找到太多关于如何实现此功能的有用信息,所以我想分享我的经验。
我创建了两个应用程序,服务(Service Stack Windows 服务空项目)和 客户端(控制台应用程序)。
客户端将使用 REST API 将多个文件和其他参数传递到 Service Stack Windows 服务。然后,服务将读取这些文件并将它们保存到某个位置。
创建服务 - Service Stack Windows 服务空项目
步骤 1
打开 Visual Studio -> 工具 -> 扩展和更新.. 并安装 ServiceStackVS。
第二步
创建一个新项目,命名为 - (ServiceStackWindowsService
)
这将自动创建 ServiceStack Windows 服务所需的所有项目。以下是将被创建的项目
步骤 3
打开 ServiceStackWindowsService.ServiceModel
并创建一个 StreamFiles
类(DTO),实现 IRequiresRequestStream
。
在 StreamFiles
上添加 RouteAttribute
,该属性将在客户端调用时使用。
using ServiceStack;
using ServiceStack.Web;
namespace ServiceStackWindowsService.ServiceModel
{
[Route("/stream","Post")]
public class StreamFiles : IRequiresRequestStream
{
public System.IO.Stream RequestStream { get; set; }
public string OtherData1 { get; set; }
public string OtherData2 { get; set; }
}
}
步骤 4
打开 ServiceStackWindowsService.ServiceInterface
并在 MyServices.cs 中添加 Post 方法。
以下代码将从 Client
发送的 base.Request.Files
中读取文件,并将其保存到 C:\Temp 位置。
注意:请创建该文件夹,如果您想执行附加的代码,或者在运行服务之前在您的机器上提供其他位置。
using ServiceStack;
using ServiceStack.Web;
using ServiceStackWindowsService.ServiceModel;
using System.IO;
namespace ServiceStackWindowsService.ServiceInterface
{
public class MyServices : Service
{
public object Any(Hello request)
{
return new HelloResponse { Result = $"Hello, {request.Name}!" };
}
public object Post(StreamFiles streamFiles)
{
string resultFile = "";
IHttpFile[] files = base.Request.Files;
for (int i = 0; i < files.Length; i++)
{
resultFile = Path.Combine(@"C:\Temp", files[i].FileName);
if (File.Exists(resultFile))
{
File.Delete(resultFile);
}
using (FileStream file = File.Create(resultFile))
{
files[i].InputStream.Seek(0, SeekOrigin.Begin);
files[i].InputStream.CopyTo(file);
}
}
return new HttpResult(System.Net.HttpStatusCode.OK);
}
}
}
步骤 5
运行应用程序。该服务将在 https://:8088 上公开。
现在我们的 Service Stack Windows 服务已经准备就绪。让我们跳转到在客户端中使用服务。
创建客户端 - Windows 控制台应用程序
步骤 1
打开 Visual Studio 的新实例并创建一个 Windows -> 控制台应用程序。
第二步
在 Windows 控制台应用程序上安装 REST Sharp Nuget 包 (https://nuget.net.cn/packages/RestSharp)
PM > Install-Package RestSharp -Version 106.2.1
步骤 3
使用 REST 客户端在控制台应用程序中调用 Service Stack Windows 服务。为此,在客户端中编写以下内容
using RestSharp;
using System.IO;
namespace ServiceStackClient
{
class Program
{
static void Main(string[] args)
{
//Create Rest Client
RestClient client = new RestClient("https://:8088");
var restRequest = new RestRequest("/stream", Method.POST);
restRequest.AddParameter("OtherData1","Value1");
restRequest.AddParameter("OtherData2", "Value2");
restRequest.AddHeader("Content-Length", int.MaxValue.ToString());
//Convert File to Byte Array
byte[] byteArray1 = File.ReadAllBytes(@"../../Files/custom.js");
byte[] byteArray2 = File.ReadAllBytes(@"../../Files/Desert.jpg");
//Add Files in Rest Request
restRequest.AddFile("custom", byteArray1, "custom.js", "application/javascript");
restRequest.AddFile("Desert", byteArray2, "Desert.jpg", "image/jpeg");
IRestResponse response = client.Execute(restRequest);
var content = response.Content;
}
}
}
步骤 4
运行客户端应用程序。
以下将在 C:\Temp 中输出
完成了!我们已经实现了该功能!!!
文章中附有示例代码。