{"id":20138457,"url":"https://github.com/thiagobarradas/aspnet-scaffolding3","last_synced_at":"2025-04-09T18:08:49.034Z","repository":{"id":43685717,"uuid":"236014824","full_name":"ThiagoBarradas/aspnet-scaffolding3","owner":"ThiagoBarradas","description":"AspNET Core 3.1 Scaffolding with log, serializer, all structure to work good for me :D","archived":false,"fork":false,"pushed_at":"2024-11-05T13:11:53.000Z","size":358,"stargazers_count":10,"open_issues_count":0,"forks_count":15,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-04-07T09:19:31.945Z","etag":null,"topics":["all-in-one","aspnet-core-3","aspnet-web-api","aspnetcore","aspnetcore3","netcore3","scaffolding","structure","structured-project","template"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/AspNetScaffolding3/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThiagoBarradas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","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-01-24T14:12:26.000Z","updated_at":"2025-02-15T22:28:07.000Z","dependencies_parsed_at":"2024-01-08T23:30:55.523Z","dependency_job_id":"b66df219-0d07-4ac5-83d3-046b64c9e54e","html_url":"https://github.com/ThiagoBarradas/aspnet-scaffolding3","commit_stats":{"total_commits":105,"total_committers":9,"mean_commits":"11.666666666666666","dds":0.5142857142857142,"last_synced_commit":"09dbcddceaaf80d56a28e4c942fc92705d671d6d"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThiagoBarradas%2Faspnet-scaffolding3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThiagoBarradas%2Faspnet-scaffolding3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThiagoBarradas%2Faspnet-scaffolding3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThiagoBarradas%2Faspnet-scaffolding3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThiagoBarradas","download_url":"https://codeload.github.com/ThiagoBarradas/aspnet-scaffolding3/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248085132,"owners_count":21045135,"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":["all-in-one","aspnet-core-3","aspnet-web-api","aspnetcore","aspnetcore3","netcore3","scaffolding","structure","structured-project","template"],"created_at":"2024-11-13T21:38:15.230Z","updated_at":"2025-04-09T18:08:48.994Z","avatar_url":"https://github.com/ThiagoBarradas.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- [![Build status](https://ci.appveyor.com/api/projects/status/9jkiyh848g2djqkn/branch/master?svg=true)](https://ci.appveyor.com/project/ThiagoBarradas/aspnet-scaffolding/branch/master)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/a833f89548944fad8405aa6c9599edd4)](https://www.codacy.com/app/ThiagoBarradas/aspnet-scaffolding?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=ThiagoBarradas/aspnet-scaffolding\u0026amp;utm_campaign=Badge_Grade) --\u003e\n[![NuGet Downloads](https://img.shields.io/nuget/dt/AspNetScaffolding3.svg)](https://www.nuget.org/packages/AspNetScaffolding3/)\n[![NuGet Version](https://img.shields.io/nuget/v/AspNetScaffolding3.svg)](https://www.nuget.org/packages/AspNetScaffolding3/)\n\n# AspNetScaffolding3\n\nBuild web api fast and easily with aspnet core \u003e 3.1\n\n## Install via NuGet\n\n```\nPM\u003e Install-Package AspNetScaffolding3\n```\n\n# Create An Application\n\nBasic steps:\n\n- Creates a new empty web api project with aspnet core 3.1;\n- Edit your `Program.cs` like example;\n- Edit your `Startup.cs` like example;\n- Create your `appsettings.json` and per environment, like `appsettings.Staging.json` (Environment is obtained by `ASPNETCORE_ENVIRONMENT`)\n- Create your controllers inherit from `BaseController` from AspNetScaffolding;\n- FluentValidation is automatic configured, just implements validator and use `this.Validate(obj);` in your action;\n- This project uses `WebApi.Models` and can handler `ApiResponse` and `ApiException` like `NotFoundException`, `BadRequestException`, `UnauthorizedException`, etc;\n- This project includes restsharp autolog for serilog with current RequestKey;\n- To use AutoMapper you only need to create your mapping inheriting from Profile;\n\n```c#\n// Program.cs\n\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        var config = new ApiBasicConfiguration\n        {\n            ApiName = \"My AspNet Scaffolding\",\n            ApiPort = 8700,\n            EnvironmentVariablesPrefix = \"Prefix_\",\n            ConfigureHealthcheck = Startup.ConfigureHealthcheck,\n            ConfigureServices = Startup.ConfigureServices,\n            Configure = Startup.Configure,\n            AutoRegisterAssemblies = new Assembly[] \n                { Assembly.GetExecutingAssembly() }\n        };\n\n        Api.Run(config);\n    }\n}\n```\n\n```c#\n// Startup.cs\n\npublic static class Startup\n{\n    public static void ConfigureHealthcheck(IHealthChecksBuilder builder, IServiceProvider provider)\n    {\n        // add health check configuration\n        builder.AddMongoDb(\"mongodb://localhost:27017\");\n    }\n\n    public static void ConfigureServices(IServiceCollection services)\n    {\n        // add services\n        services.AddSingleton\u003cISomething, Something\u003e();\n    }\n\n    public static void Configure(IApplicationBuilder app)\n    {\n        // customize your app\n        app.UseAuthentication();\n    }\n}\n\n```\n\nApp Settings\n```json\n// appsettings.{environment}.json or appsettings.json\n\n{\n  \"ApiSettings\": {\n    \"AppUrl\": \"http://localhost:8700\",\n    \"JsonSerializer\": \"Snakecase\",\n    \"PathPrefix\": \"myapp/{version}\",\n    \"UseStaticFiles\": true,\n    \"StaticFilesPath\": \"assets\",\n    \"Domain\": \"MyDomain\",\n    \"Application\": \"MyApp\",\n    \"Version\": \"v1\",\n    \"BuildVersion\": \"1.0.0\",\n    \"UseOriginalEnumValue\": false,\n    \"SupportedCultures\": [ \"pt-BR\", \"es-ES\", \"en-US\" ],\n    \"RequestKeyProperty\": \"RequestKey\",\n    \"AccountIdProperty\": \"AccountId\",\n    \"TimezoneHeader\": \"Timezone\",\n    \"TimezoneDefault\": \"America/Sao_Paulo\",\n    \"TimeElapsedProperty\": \"X-Internal-Time\",\n    \"JsonFieldSelectorProperty\": \"fields\"\n  },\n  \"HealthcheckSettings\": {\n    \"Enabled\": true,\n    \"Path\": \"healthcheck\",\n    \"LogEnabled\": false\n  },\n  \"ShutdownSettings\": {\n    \"ShutdownTimeoutIsSeconds\" : 30,\n    \"Enabled\" : true,\n    \"Redirect\" : false\n  },\n  \"DbSettings\": {\n    \"ConnectionString\": \"mongodb://user:pass@localhost:27017/DatabaseName\",\n    \"Name\": \"DatabaseName\"\n  },\n   \"CacheSettings\": {\n    \"Enabled\": true,\n    \"UseRedis\": true,\n    \"UseLocker\": true,\n    \"TimeoutInMs\": 1000,\n    \"Ssl\": false,\n    \"Password\": \"RedisAuth\",\n    \"Host\": \"localhost\",\n    \"Port\": 6379,\n    \"LockerPrefix\": \"app-locker-\",\n    \"LockerTtlInSeconds\": 100,\n    \"LockerDb\": 0,  \n    \"CachePrefix\": \"app-cache-\",\n    \"CacheTtlInSeconds\": 900,\n    \"CacheDb\": 0\n  },\n  \"QueueSettings\": {\n    \"Enabled\": false,\n    \"RetryTTL\": 20000,\n    \"RetryTTLFactor\": 2.0,\n    \"RetryCount\": 5,\n    \"QueueConnectionString\": \"amqp://guest:guest@localhost:5672/VHost\",\n    \"VHostApi\": \"http://guest:guest@localhost:15672/api/queues/VHost\",\n    \"QueueName\": \"my-queue\",\n    \"ExchangeToSubscribe\": \"main.topic\",\n    \"EventsToSubscribe\": \"event.something.created,event.other.#\",\n    \"MaxThreads\": 200,\n    \"AutoAckOnSuccess\": true\n  },\n  \"RateLimiting\": {\n    \"Enabled\" : true,\n    \"EnableEndpointRateLimiting\": false,\n    \"ByUrlResource\": false,\n    \"UrlResource\": \"\",\n    \"StackBlockedRequests\": false,\n    \"RealIpHeader\": \"X-Real-IP\",\n    \"ClientIdHeader\": \"X-ClientId\",\n    \"HttpStatusCode\": 429,\n    \"IpWhitelist\": [],\n    \"EndpointWhitelist\": [],\n    \"ClientWhitelist\": [],\n    \"GeneralRules\": [\n      {\n        \"Endpoint\": \"*\",\n        \"Period\": \"1m\",\n        \"Limit\": 5\n      },\n      {\n        \"Endpoint\": \"*\",\n        \"Period\": \"1h\",\n        \"Limit\": 1000\n      }\n    ],\n    \"QuotaExceededResponse\": {\n      \"Content\": \"{{ \\\"message\\\": \\\"Quota exceeded. Maximum allowed: {0} per {1}. Please try again in {2} second(s).\\\" }}\",\n      \"ContentType\": \"application/json\",\n      \"StatusCode\": 429\n    }\n  },\n  \"LogSettings\": {\n    \"IgnoredRoutes\": [],\n    \"DebugEnabled\": true,\n    \"TitlePrefix\": \"[{Application}] \",\n    \"JsonBlacklistRequest\":  [ \"*password\", \"*card.number\", \"*creditcardnumber\", \"*cvv\" ],\n    \"JsonBlacklistResponse\": [ \"*password\", \"*card.number\", \"*creditcardnumber\", \"*cvv\" ],\n    \"SeqOptions\": {\n      \"Enabled\": false,\n      \"MinimumLevel\": \"Verbose\",\n      \"Url\": \"http://localhost:5341\",\n      \"ApiKey\": \"XXXX\"\n    },\n    \"NewRelicOptions\": {\n      \"Enabled\": false,\n      \"AppName\": \"Verbose\",\n      \"LicenseKey\": \"XXXX\"\n    },\n    \"SplunkOptions\": {\n      \"Enabled\": false,\n      \"MinimumLevel\": \"Verbose\",\n      \"Url\": \"http://localhost:8088/services/collector\",\n      \"Token\": \"XXXX\",\n      \"Index\": \"my.index\",\n      \"Application\": \"MyApp :Ds\",\n      \"ProcessName\": \"Domain.App\",\n      \"Company\": \"MyCompany\",\n      \"ProductVersion\": \"1.0.0\",\n      \"SourceType\": \"_json\"\n    },\n\t\"DataDogOptions\": {\n      \"Enabled\": false,\n      \"MinimumLevel\": \"Verbose\",\n      \"ApiKey\": \"XXX\",\n      \"Service\": null,\n      \"Source\": null,\n      \"Host\": null,\n      \"Tags\": []\n    }\n  },\n  \"DocsSettings\": {\n    \"Enabled\": true,\n    \"Title\": \"MyApp API Reference\",\n    \"AuthorName\": \"Thiago Barradas\",\n    \"AuthorEmail\": \"th.barradas@gmail.com\",\n    \"PathToReadme\": \"DOCS.md\",\n    \"IgnoredEnums\": [ \"none\", \"undefined\" ]\n  }\n}\n\n```\n\n## How can I contribute?\n\nPlease, refer to [CONTRIBUTING](.github/CONTRIBUTING.md)\n\n## Found something strange or need a new feature?\n\nOpen a new Issue following our issue template [ISSUE_TEMPLATE](.github/ISSUE_TEMPLATE.md)\n\n## Changelog\n\nSee in [nuget version history](https://www.nuget.org/packages/AspNetScaffolding3)\n\n## Did you like it? Please, make a donate :)\n\nif you liked this project, please make a contribution and help to keep this and other initiatives, send me some Satochis.\n\nBTC Wallet: `1G535x1rYdMo9CNdTGK3eG6XJddBHdaqfX`\n\n![1G535x1rYdMo9CNdTGK3eG6XJddBHdaqfX](https://i.imgur.com/mN7ueoE.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthiagobarradas%2Faspnet-scaffolding3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthiagobarradas%2Faspnet-scaffolding3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthiagobarradas%2Faspnet-scaffolding3/lists"}