diff --git a/.gitignore b/.gitignore index 154e1272..01d5ae1d 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ mono_crash.* # Build results +[Bb]uild/ [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ @@ -243,14 +244,6 @@ ClientBin/ *.publishsettings orleans.codegen.cs -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - # RIA/Silverlight projects Generated_Code/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..005404a3 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "EditorConfig.EditorConfig", + "github.vscode-github-actions", + "ms-dotnettools.csharp" + ] +} diff --git a/examples/net8.0/aspnetcore/Controllers/HttpClientController.cs b/examples/net8.0/aspnetcore/Controllers/HttpClientController.cs index a7baa3b8..ddef0f57 100644 --- a/examples/net8.0/aspnetcore/Controllers/HttpClientController.cs +++ b/examples/net8.0/aspnetcore/Controllers/HttpClientController.cs @@ -6,30 +6,21 @@ using Microsoft.AspNetCore.Mvc; namespace aspnetcore.Controllers; + [Route("api/[controller]/[action]")] [ApiController] -public class HttpClientController : ControllerBase +public class HttpClientController(HttpClient client) : ControllerBase { - private readonly ILogger _logger; - - public HttpClientController(ILogger logger) - { - _logger = logger; - } - [HttpGet] public async Task>> Get() { - var client = new HttpClient(); - var response = await client.GetAsync("https://postman-echo.com/get?hello=world"); - var content = await response.Content.ReadAsStringAsync(); + var content = await client.GetStringAsync("https://postman-echo.com/get?hello=world"); return Ok(content); } [HttpGet] public async Task>> GetError() { - var client = new HttpClient(); var response = await client.GetAsync("http://postman-echo.com/status/500"); var content = await response.Content.ReadAsStringAsync(); return Ok(content); @@ -38,9 +29,11 @@ public async Task>> GetError() [HttpPost] public async Task> Post() { - var client = new HttpClient(); - var response = await client.PostAsync("https://postman-echo.com/post", new StringContent("Hello World")); + using var body = new StringContent("Hello World"); + using var response = await client.PostAsync("https://postman-echo.com/post", body); + var content = await response.Content.ReadAsStringAsync(); + return Ok(content); } } diff --git a/examples/net8.0/aspnetcore/Controllers/MsSqlController.cs b/examples/net8.0/aspnetcore/Controllers/MsSqlController.cs index cc8ac978..35985b87 100644 --- a/examples/net8.0/aspnetcore/Controllers/MsSqlController.cs +++ b/examples/net8.0/aspnetcore/Controllers/MsSqlController.cs @@ -8,61 +8,53 @@ using Microsoft.Data.SqlClient; namespace aspnetcore.Controllers; + [Route("api/[controller]/[action]")] [ApiController] -public class MsSqlController : ControllerBase +public class MsSqlController(SqlConnection db) : ControllerBase { - private readonly ILogger _logger; - private readonly SqlConnection _db; - - public MsSqlController(ILogger logger, SqlConnection db) - { - _logger = logger; - _db = db; - } - [HttpGet] public async Task>> Tables() { - this._db.Open(); + await db.OpenAsync(); - using (var command = _db.CreateCommand()) - { - command.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"; - var tables = new List(); + await using var command = db.CreateCommand(); + + command.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"; + + var tables = new List(); - using (var reader = await command.ExecuteReaderAsync()) + await using (var reader = await command.ExecuteReaderAsync()) + { + while (await reader.ReadAsync()) { - while (await reader.ReadAsync()) - { - tables.Add(reader.GetString(0)); - } + tables.Add(reader.GetString(0)); } - return Ok(tables); } + + return Ok(tables); } [HttpGet] public async Task>> ServerInfo() { - this._db.Open(); + await db.OpenAsync(); - using (var command = _db.CreateCommand()) - { - command.CommandText = "sp_server_info"; - command.CommandType = CommandType.StoredProcedure; + await using var command = db.CreateCommand(); + + command.CommandText = "sp_server_info"; + command.CommandType = CommandType.StoredProcedure; - var serverInfo = new List(); + var serverInfo = new List(); - using (var reader = await command.ExecuteReaderAsync()) + await using (var reader = await command.ExecuteReaderAsync()) + { + while (await reader.ReadAsync()) { - while (await reader.ReadAsync()) - { - serverInfo.Add($"ID={reader.GetInt32(0)} , NAME={reader.GetString(1)} , VALUE={reader.GetString(2)}"); - } + serverInfo.Add($"ID={reader.GetInt32(0)} , NAME={reader.GetString(1)} , VALUE={reader.GetString(2)}"); } - - return Ok(serverInfo); } + + return Ok(serverInfo); } } diff --git a/examples/net8.0/aspnetcore/Controllers/RedisController.cs b/examples/net8.0/aspnetcore/Controllers/RedisController.cs index ad49b5b2..67bf466e 100644 --- a/examples/net8.0/aspnetcore/Controllers/RedisController.cs +++ b/examples/net8.0/aspnetcore/Controllers/RedisController.cs @@ -8,22 +8,14 @@ using StackExchange.Redis; namespace aspnetcore.Controllers; + [Route("api/[controller]/[action]")] [ApiController] -public class RedisController : ControllerBase +public class RedisController(IDatabase database, ILogger logger) : ControllerBase { const string LIST_KEY = "list"; - private readonly ILogger _logger; - private IDatabase _redisDb; - - public RedisController(ILogger logger, IDatabase database) - { - _logger = logger; - _redisDb = database; - } [HttpGet] - // public async Task> LeftPush([FromBody] LeftPushBody data) public async Task> LeftPush() { if (!ModelState.IsValid) @@ -32,16 +24,20 @@ public async Task> LeftPush() } var data = new LeftPushBody { Name = "test" }; - var length = await _redisDb.ListLeftPushAsync(LIST_KEY, data.Name); - _logger.LogInformation($"LeftPush: {data.Name} - {length}"); + var length = await database.ListLeftPushAsync(LIST_KEY, data.Name); + + logger.LogInformation("LeftPush: {Name} - {Length}", data.Name, length); + return Ok(); } [HttpGet] public async Task> LeftPop() { - var value = await _redisDb.ListLeftPopAsync(LIST_KEY); - _logger.LogInformation($"LeftPop: {value}"); + var value = await database.ListLeftPopAsync(LIST_KEY); + + logger.LogInformation("LeftPop: {Value}", value); + return Ok(value); } diff --git a/examples/net8.0/aspnetcore/Controllers/WeatherForecastController.cs b/examples/net8.0/aspnetcore/Controllers/WeatherForecastController.cs index 70b896df..ce377dd7 100644 --- a/examples/net8.0/aspnetcore/Controllers/WeatherForecastController.cs +++ b/examples/net8.0/aspnetcore/Controllers/WeatherForecastController.cs @@ -6,32 +6,25 @@ using Microsoft.AspNetCore.Mvc; namespace aspnetcore.Controllers; + [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { - private static readonly string[] Summaries = new[] - { + private static readonly string[] Summaries = + [ "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } + ]; [HttpGet(Name = "GetWeatherForecast")] public IEnumerable Get() { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast + return [.. Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); + })]; } public class WeatherForecast diff --git a/examples/net8.0/aspnetcore/Program.cs b/examples/net8.0/aspnetcore/Program.cs index 9785ac91..cff57376 100644 --- a/examples/net8.0/aspnetcore/Program.cs +++ b/examples/net8.0/aspnetcore/Program.cs @@ -5,36 +5,45 @@ using Grafana.OpenTelemetry; using Microsoft.Data.SqlClient; +using OpenTelemetry.Logs; using OpenTelemetry.Trace; using StackExchange.Redis; var builder = WebApplication.CreateBuilder(args); + +builder.Logging.AddOpenTelemetry(builder => builder.UseGrafana()); + builder.Services.AddOpenTelemetry() .WithMetrics(builder => builder.UseGrafana()) .WithTracing(builder => builder.UseGrafana().AddConsoleExporter()); // Redis -builder.Services.AddSingleton( - sp => ConnectionMultiplexer.Connect("redis:6379")); -builder.Services.AddScoped( - sp => sp.GetRequiredService().GetDatabase()); +builder.Services.AddSingleton(sp => ConnectionMultiplexer.Connect("redis:6379")); +builder.Services.AddScoped(sp => sp.GetRequiredService().GetDatabase()); -// MSSQL +// Microsoft SQL Server builder.Services.AddTransient(sp => { var connectionString = "Server=mssql,1433;Database=master;User=sa;Password=Password12345%%;Encrypt=False;TrustServerCertificate=True"; return new SqlConnection(connectionString); }); +builder.Services.AddHttpClient(); + builder.Services.AddControllers(); + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); + app.UseSwagger(); app.UseSwaggerUI(); + app.UseAuthorization(); app.MapControllers(); + app.MapGet("/", () => Results.Redirect("/swagger")); + app.Run(); diff --git a/examples/net8.0/aspnetcore/appsettings.Development.json b/examples/net8.0/aspnetcore/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/examples/net8.0/aspnetcore/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/examples/net8.0/aspnetcore/appsettings.json b/examples/net8.0/aspnetcore/appsettings.json index 10f68b8c..2736bdb6 100644 --- a/examples/net8.0/aspnetcore/appsettings.json +++ b/examples/net8.0/aspnetcore/appsettings.json @@ -2,7 +2,8 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft.AspNetCore": "Warning", + "System": "Warning" } }, "AllowedHosts": "*" diff --git a/examples/net8.0/aspnetcore/aspnetcore.csproj b/examples/net8.0/aspnetcore/aspnetcore.csproj index b9f5e462..89607f7c 100644 --- a/examples/net8.0/aspnetcore/aspnetcore.csproj +++ b/examples/net8.0/aspnetcore/aspnetcore.csproj @@ -10,11 +10,11 @@ - + - - - + + +