Registers an SftpClient in the DI container for connecting to SFTP servers using SSH.NET.
- SFTP server.
Install the Aspire SFTP Client library with NuGet:
dotnet add package CommunityToolkit.Aspire.Sftp
In the Program.cs file of your project, call the AddSftpClient extension method to register an SftpClient for use via the dependency injection container. The method takes a connection name parameter.
builder.AddSftpClient("sftp");The Aspire SFTP Client integration provides multiple options to configure the server connection based on the requirements and conventions of your project.
When using a connection string from the ConnectionStrings configuration section, you can provide the name of the connection string when calling builder.AddSftpClient():
builder.AddSftpClient("sftp");And then the connection string will be retrieved from the ConnectionStrings configuration section:
{
"ConnectionStrings": {
"sftp": "sftp://localhost:22"
}
}The Aspire SFTP Client integration supports Microsoft.Extensions.Configuration. It loads the SftpSettings from configuration by using the Aspire:Sftp:Client key. Example appsettings.json that configures some of the options:
{
"Aspire": {
"Sftp": {
"Client": {
"ConnectionString": "sftp://localhost:22",
"Username": "admin",
"Password": "password",
"DisableHealthChecks": false
}
}
}
}Also you can pass the Action<SftpSettings> configureSettings delegate to set up some or all the options inline:
builder.AddSftpClient("sftp", settings =>
{
settings.Username = "admin";
settings.Password = "password";
});The SFTP client supports two authentication methods:
- Password authentication: Provide
UsernameandPassword. - Private key authentication: Provide
UsernameandPrivateKeyFilepath.
{
"Aspire": {
"Sftp": {
"Client": {
"ConnectionString": "sftp://localhost:22",
"Username": "admin",
"PrivateKeyFile": "/path/to/private/key"
}
}
}
}The integration also supports keyed services for multiple SFTP connections:
builder.AddKeyedSftpClient("sftp1");
builder.AddKeyedSftpClient("sftp2");Then inject the keyed client:
public class MyService
{
private readonly SftpClient _client1;
private readonly SftpClient _client2;
public MyService(
[FromKeyedServices("sftp1")] SftpClient client1,
[FromKeyedServices("sftp2")] SftpClient client2)
{
_client1 = client1;
_client2 = client2;
}
}In your AppHost project, install the CommunityToolkit.Aspire.Hosting.Sftp library with NuGet:
dotnet add package CommunityToolkit.Aspire.Hosting.Sftp
Then, in the Program.cs file of AppHost, register SFTP and consume the connection using the following methods:
var sftp = builder.AddSftp("sftp");
var myService = builder.AddProject<Projects.MyService>()
.WithReference(sftp);The WithReference method configures a connection in the MyService project named sftp. In the Program.cs file of MyService, the SFTP connection can be consumed using:
builder.AddSftpClient("sftp");Then, in your service, inject SftpClient and use it to interact with the SFTP server:
public class MyService
{
private readonly SftpClient _client;
public MyService(SftpClient client)
{
_client = client;
if (!_client.IsConnected)
{
_client.Connect();
}
}
public void UploadFile(string localPath, string remotePath)
{
using var fileStream = File.OpenRead(localPath);
_client.UploadFile(fileStream, remotePath);
}
public void DownloadFile(string remotePath, string localPath)
{
using var fileStream = File.Create(localPath);
_client.DownloadFile(remotePath, fileStream);
}
}