{"id":19990759,"url":"https://github.com/nacos-group/nacos-sdk-csharp","last_synced_at":"2025-05-04T10:30:43.683Z","repository":{"id":37326659,"uuid":"280443247","full_name":"nacos-group/nacos-sdk-csharp","owner":"nacos-group","description":"This nacos csharp sdk","archived":false,"fork":false,"pushed_at":"2024-11-26T01:16:00.000Z","size":996,"stargazers_count":432,"open_issues_count":25,"forks_count":93,"subscribers_count":14,"default_branch":"dev","last_synced_at":"2025-04-25T06:06:17.642Z","etag":null,"topics":["csharp","dotnet"],"latest_commit_sha":null,"homepage":"https://nacos-sdk-csharp.readthedocs.io","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nacos-group.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-17T14:18:41.000Z","updated_at":"2025-04-14T03:16:34.000Z","dependencies_parsed_at":"2022-06-29T14:01:26.423Z","dependency_job_id":"ebccf86c-1048-417f-8857-0dc3c8760d7d","html_url":"https://github.com/nacos-group/nacos-sdk-csharp","commit_stats":{"total_commits":284,"total_committers":17,"mean_commits":"16.705882352941178","dds":"0.15140845070422537","last_synced_commit":"290cc6d78473f6fabb38a362335c3a67c8213800"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nacos-group%2Fnacos-sdk-csharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nacos-group%2Fnacos-sdk-csharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nacos-group%2Fnacos-sdk-csharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nacos-group%2Fnacos-sdk-csharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nacos-group","download_url":"https://codeload.github.com/nacos-group/nacos-sdk-csharp/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252319954,"owners_count":21729039,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dotnet"],"created_at":"2024-11-13T04:51:27.605Z","updated_at":"2025-05-04T10:30:42.381Z","avatar_url":"https://github.com/nacos-group.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"﻿# nacos-sdk-csharp 　　　　　   　　   　　　[中文](./README.zh-cn.md)\n\ncsharp(dotnet core) implementation of [nacos](https://nacos.io/) OpenAPI.\n\n![Build](https://github.com/nacos-group/nacos-sdk-csharp/workflows/Build/badge.svg) ![Release](https://github.com/nacos-group/nacos-sdk-csharp/workflows/Release/badge.svg) ![](https://img.shields.io/nuget/v/nacos-sdk-csharp.svg)  ![](https://img.shields.io/nuget/vpre/nacos-sdk-csharp.svg) ![](https://img.shields.io/nuget/dt/nacos-sdk-csharp) ![](https://img.shields.io/github/license/nacos-group/nacos-sdk-csharp)\n\n![](./media/prj.png)\n\n## Installation\n\nChoose a package that you need.\n\n```bash\ndotnet add package nacos-sdk-csharp\ndotnet add package nacos-sdk-csharp.AspNetCore\ndotnet add package nacos-sdk-csharp.Extensions.Configuration\ndotnet add package nacos-sdk-csharp.YamlParser\ndotnet add package nacos-sdk-csharp.IniParser\n```\n\n\u003e NOTE: The packages' name has remove the suffix `unofficial`.\n\n## Features\n\n- Basic OpenApi Usages\n- Integrate ASP.NET Core Configuration System\n- Service Registration and Discovery With ASP.NET Core\n- Integrate With Aliyun MSE/ACM\n- ...\n\nFind more information on the documents pages:\n\nhttps://nacos-sdk-csharp.readthedocs.io/en/latest/\n\n## Basic Usage\n\n### Simple Configuration Usage\n\n1. Configure in `Program.cs`\n\n```cs\n// after v1.3.3, we can use UseNacosConfig to simplify\npublic static IHostBuilder CreateHostBuilder(string[] args) =\u003e\n    Host.CreateDefaultBuilder(args)\n        .UseNacosConfig(section: \"NacosConfig\", parser: null, logAction: null)\n        // .UseNacosConfig(section: \"NacosConfig\", parser: Nacos.YamlParser.YamlConfigurationStringParser.Instance logAction: null)\n        // .UseNacosConfig(section: \"NacosConfig\", parser: Nacos.IniParser.IniConfigurationStringParser.Instance logAction: null)       \n        .ConfigureWebHostDefaults(webBuilder =\u003e\n        {\n            webBuilder.UseStartup\u003cStartup\u003e();\n        });\n\n// before v1.3.3\npublic static IHostBuilder CreateHostBuilder(string[] args) =\u003e\n    Host.CreateDefaultBuilder(args)\n        .ConfigureAppConfiguration((context, builder) =\u003e\n        {\n            var c = builder.Build();\n\n           // read configuration from config files\n            // it will use default json parser to parse the configuration store in nacos server.\n            builder.AddNacosV2Configuration(c.GetSection(\"NacosConfig\"));\n            // you also can specify ini or yaml parser as well.\n            // builder.AddNacosV2Configuration(c.GetSection(\"NacosConfig\"), Nacos.IniParser.IniConfigurationStringParser.Instance);\n            // builder.AddNacosV2Configuration(c.GetSection(\"NacosConfig\"), Nacos.YamlParser.YamlConfigurationStringParser.Instance);\n        })\n        .ConfigureWebHostDefaults(webBuilder =\u003e\n        {\n            webBuilder.UseStartup\u003cStartup\u003e();\n        });\n```\n\n2. Modify `appsettings.json`\n\n```JSON\n{\n  \"NacosConfig\": {\n    \"Listeners\": [\n      {\n        \"Optional\": false,\n        \"DataId\": \"common\",\n        \"Group\": \"DEFAULT_GROUP\"\n      },\n      {\n        \"Optional\": false,\n        \"DataId\": \"demo\",\n        \"Group\": \"DEFAULT_GROUP\"\n      }\n    ],    \n    \"Namespace\": \"csharp-demo\",  // Please set the value of Namespace ID !!!!!!!!\n    \"ServerAddresses\": [ \"http://localhost:8848/\" ],\n    \"UserName\": \"test2\",\n    \"Password\": \"123456\",\n    \"AccessKey\": \"\",\n    \"SecretKey\": \"\",\n    \"EndPoint\": \"acm.aliyun.com\",\n    \"ConfigFilterAssemblies\": [\"YouPrefix.AssemblyName\"],\n    \"ConfigFilterExtInfo\": \"some ext infomation\"\n  }\n}\n```\n\n3. Use via .NET Core's Way\n\n```cs\n[ApiController]\n[Route(\"api/[controller]\")]\npublic class ConfigController : ControllerBase\n{\n    private readonly IConfiguration _configuration;\n    private readonly AppSettings _settings;\n    private readonly AppSettings _sSettings;\n    private readonly AppSettings _mSettings;\n    \n    public ConfigController(\n        IConfiguration configuration,\n        IOptions\u003cAppSettings\u003e options,\n        IOptionsSnapshot\u003cAppSettings\u003e sOptions,\n        IOptionsMonitor\u003cAppSettings\u003e _mOptions\n        )\n    {\n        _logger = logger;\n        _configuration = configuration;\n        _settings = options.Value;\n        _sSettings = sOptions.Value;\n        _mSettings = _mOptions.CurrentValue;\n    }\n\n    [HttpGet]\n    public string Get()\n    {\n        // ....\n       \n        return \"ok\";\n    }\n\n}\n```\n\n### Service Registration and Discovery\n\n1. Service Registration\n\nConfigure in `Program.cs`\n\n```cs\npublic class Startup\n{\n    public Startup(IConfiguration configuration)\n    {\n        Configuration = configuration;\n    }\n\n    public IConfiguration Configuration { get; }\n\n    public void ConfigureServices(IServiceCollection services)\n    {\n        // ...\n\n        services.AddNacosAspNet(Configuration, \"nacos\");\n    }\n\n    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n    {\n        // ...\n    }\n}\n```\n\nModify `appsettings.json`\n\n```JSON\n\"nacos\": {\n    \"EndPoint\": \"sub-domain.aliyun.com:8080\",\n    \"ServerAddresses\": [ \"http://localhost:8848\" ],\n    \"DefaultTimeOut\": 15000,\n    \"Namespace\": \"cs\", // Please set the value of Namespace ID !!!!!!!!\n    \"ListenInterval\": 1000,\n    \"ServiceName\": \"App1\",\n    \"GroupName\": \"DEFAULT_GROUP\",\n    \"ClusterName\": \"DEFAULT\",\n    \"Ip\": \"\",\n    \"PreferredNetworks\": \"\", // select an IP that matches the prefix as the service registration IP\n    \"Port\": 0,\n    \"Weight\": 100,\n    \"RegisterEnabled\": true,\n    \"InstanceEnabled\": true,\n    \"Ephemeral\": true,\n    \"Secure\": false,\n    \"AccessKey\": \"\",\n    \"SecretKey\": \"\",\n    \"UserName\": \"\",\n    \"Password\": \"\",\n    \"ConfigUseRpc\": true,\n    \"NamingUseRpc\": true,\n    \"NamingLoadCacheAtStart\": \"\",       \n    \"LBStrategy\": \"WeightRandom\", //WeightRandom WeightRoundRobin\n    \"Metadata\": {\n      \"aa\": \"bb\",\n      \"cc\": \"dd\"\n    }\n  }\n```\n\n2. Service Discovery\n\n```cs\n[Route(\"api/[controller]\")]\n[ApiController]\npublic class ValuesController : ControllerBase\n{\n    private readonly Nacos.V2.INacosNamingService _svc;\n\n    public ValuesController(Nacos.V2.INacosNamingService svc)\n    {\n        _svc = svc;\n    }\n\n    [HttpGet(\"test\")]\n    public async Task\u003cIActionResult\u003e Test()\n    {        \n        // need to know the service name.\n        var instance = await _svc.SelectOneHealthyInstance(\"App2\", \"DEFAULT_GROUP\");\n        var host = $\"{instance.Ip}:{instance.Port}\";\n\n        var baseUrl = instance.Metadata.TryGetValue(\"secure\", out _)\n            ? $\"https://{host}\"\n            : $\"http://{host}\";\n                    \n        if(string.IsNullOrWhiteSpace(baseUrl))\n        {\n            return \"empty\";\n        }\n\n        var url = $\"{baseUrl}/api/values\";\n\n        using (HttpClient client = new HttpClient())\n        {\n            var result = await client.GetAsync(url);\n            return await result.Content.ReadAsStringAsync();\n        }\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnacos-group%2Fnacos-sdk-csharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnacos-group%2Fnacos-sdk-csharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnacos-group%2Fnacos-sdk-csharp/lists"}