🌹 nacos csharp sdk
Unofficial csharp(dotnet core) implementation of nacos OpenAPI.
| Platform | Build Server | Master Status |
|--------- |------------- |---------|
| Github Action | Linux/Windows |
dotnet add package nacos-sdk-csharp-unofficial
Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, builder) => { var c = builder.Build();// read configuration from config files builder.AddNacosConfiguration(c.GetSection("NacosConfig")); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<startup>(); })
appsettings.json
{ "NacosConfig": { "Optional": false, "DataId": "msconfigapp", "Group": "", "Tenant": "f47e0ae1-982a-4a64-aea3-52506492a3d4", "ServerAddresses": [ "http://localhost:8848/" ], "UserName": "test2", "Password": "123456", "AccessKey": "", "SecretKey": "", "EndPoint": "acm.aliyun.com" } }
[ApiController] [Route("api/[controller]")] public class ConfigController : ControllerBase { private readonly IConfiguration _configuration; private readonly AppSettings _settings; private readonly AppSettings _sSettings; private readonly AppSettings _mSettings;public ConfigController( IConfiguration configuration, IOptions<appsettings> options, IOptionsSnapshot<appsettings> sOptions, IOptionsMonitor<appsettings> _mOptions ) { _logger = logger; _configuration = configuration; _settings = options.Value; _sSettings = sOptions.Value; _mSettings = _mOptions.CurrentValue; } [HttpGet] public string Get() { // .... return "ok"; }
}
Configure in
Program.cs
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; }public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { // ... services.AddNacosAspNetCore(Configuration); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... }
}
Modify
appsettings.json
"nacos": { "ServerAddresses": [ "http://localhost:8848" ], "DefaultTimeOut": 15000, "Namespace": "", "ListenInterval": 1000, "ServiceName": "App1" }
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly INacosServerManager _serverManager;public ValuesController(INacosServerManager serverManager) { _serverManager = serverManager; } [HttpGet("test")] public async Task<iactionresult> Test() { // need to know the service name. // at this time only support random way. var baseUrl = await _serverManager.GetServerAsync("App2"); if(string.IsNullOrWhiteSpace(baseUrl)) { return "empty"; } var url = $"{baseUrl}/api/values"; using (HttpClient client = new HttpClient()) { var result = await client.GetAsync(url); return await result.Content.ReadAsStringAsync(); } }
}