{"id":26452941,"url":"https://github.com/dotnetzoom/aspnetcore-webapi-course","last_synced_at":"2025-04-09T05:08:10.113Z","repository":{"id":37385886,"uuid":"170308554","full_name":"dotnetzoom/AspNetCore-WebApi-Course","owner":"dotnetzoom","description":"🥇 Professional REST API design with ASP.NET Core WebAPI","archived":false,"fork":false,"pushed_at":"2024-05-08T17:56:51.000Z","size":927,"stargazers_count":898,"open_issues_count":6,"forks_count":144,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-04-09T05:08:02.037Z","etag":null,"topics":["aspnet-core","autofac","automapper","ef-core","elmah","exception-handling","identity","jwt","jwt-authentication","jwt-encryption","logging","nlog","oauth","sentry","swagger","swagger-ui","versioning","webapi"],"latest_commit_sha":null,"homepage":"http://beyamooz.com/project-based-aspnet/%D8%AF%D9%88%D8%B1%D9%87-api-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%D9%88-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AF%D8%B1-asp-net-core","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotnetzoom.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":null,"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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://coffeebede.ir/mjebrahimi"]}},"created_at":"2019-02-12T11:44:12.000Z","updated_at":"2025-04-07T04:23:06.000Z","dependencies_parsed_at":"2024-01-15T14:38:11.777Z","dependency_job_id":"7eac1d16-cdc7-48bf-85e1-eda023c45d7b","html_url":"https://github.com/dotnetzoom/AspNetCore-WebApi-Course","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetzoom%2FAspNetCore-WebApi-Course","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetzoom%2FAspNetCore-WebApi-Course/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetzoom%2FAspNetCore-WebApi-Course/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnetzoom%2FAspNetCore-WebApi-Course/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotnetzoom","download_url":"https://codeload.github.com/dotnetzoom/AspNetCore-WebApi-Course/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247980837,"owners_count":21027808,"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":["aspnet-core","autofac","automapper","ef-core","elmah","exception-handling","identity","jwt","jwt-authentication","jwt-encryption","logging","nlog","oauth","sentry","swagger","swagger-ui","versioning","webapi"],"created_at":"2025-03-18T18:39:57.725Z","updated_at":"2025-04-09T05:08:10.095Z","avatar_url":"https://github.com/dotnetzoom.png","language":"C#","readme":"\u003cdiv dir=\"ltr\"\u003e\n\n# 🥇Professional REST API design with ASP.NET Core WebAPI\n\nThis project is an example of lightweight and extensible infrastructure for building RESTful Web API with ASP.NET Core.\n\nThis example contains a number of tricks and techniques that is the result of many years of my experience in WebAPI/RESTful programming in ASP.NET Core\n\nIf you want a total deep dive on REST, API security, ASP.NET Core and much more, check out my [Course](http://beyamooz.com/project-based-aspnet/%D8%AF%D9%88%D8%B1%D9%87-api-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%D9%88-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AF%D8%B1-asp-net-core).\n\n## Testing it out\n1. Clone or download this repository\n2. Build the solution using command line with `dotnet build`\n3. Go to **MyApi** directory and run project using command line with `dotnet run`\n4. Browse to this url https://localhost:5001/swagger to see SwaggerUI page\n\n## Techniques and Features\n- JWT Authentication\n- Secure JWT using Encryption (JWE)\n- Logging to File, Console and Database using [Elmah](https://github.com/ElmahCore/ElmahCore) \u0026 [NLog](https://github.com/NLog/NLog.Web)\n- Logging to [sentry.io](sentry.io) (Log Management System)\n- Exception Handling using Custom Middleware\n- Automatic Validation\n- Standard API Resulting\n- Dependency Injection using [Autofac (Ioc Container)](https://github.com/autofac/Autofac)\n- Map resources using [AutoMapper](https://github.com/AutoMapper/AutoMapper)\n- Async/Await Best Practices\n- Versioning Management\n- Using [Swagger](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) (Swashbuckle)\n- Auto Document Generator for Swagger\n- Integrate Swagger and Versioning\n- Integrate Swagger and JWT/OAuth Authentication\n- Best Practices for Performance and Security\n\n## Give a Star! ⭐️\nIf you like this project, learn something or you are using it in your applications, please give it a star. Thanks!\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv dir=\"rtl\"\u003e\n\n# 🥇پروژه دوره API نویسی اصولی و حرفه ای در ASP.NET Core\n\n[در این دوره همه نکات مهم و پرکاربرد در API نویسی اصولی و حرفه ای در ASP.NET Core بررسی شده اند.](http://beyamooz.com/project-based-aspnet/%D8%AF%D9%88%D8%B1%D9%87-api-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%B5%D9%88%D9%84%DB%8C-%D9%88-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AF%D8%B1-asp-net-core)\n\nدر این دوره سعی شده بهترین و محبوب ترین تکنولوژی ها، کتابخانه ها و ابزار ها داخل پروژه استفاده بشه. همچنین Best Practice های پرفرمنسی و امنیتی بعلاوه تکنیک های پرکاربرد را بررسی و در قالب یک معماری حرفه ای و اصولی استفاده می کنیم.\n\n**توجه:**\n- **برنچ master این مخزن همواره به آخرین نسخه ASP.NET Core (به همراه تمام Dependency هایش) بروز رسانی شده و خواهد شد (در حال حاضر ASP.NET Core 6.0 می باشد)**\n- **جهت دسترسی به کد اولیه پروژه که با ASP.NET Core 2.1 در هنگام تهیه دوره نوشته بود [به این برنچ مراجعه کنید](https://github.com/dotnetzoom/AspNetCore-WebApi-Course/tree/AspNetCore2.1)**\n- **جهت دسترسی به کد پروژه در ورژن ASP.NET Core 3.1  [به این برنچ مراجعه کنید](https://github.com/dotnetzoom/AspNetCore-WebApi-Course/tree/AspNetCore3.1)**\n- **جهت دسترسی به کد پروژه در ورژن ASP.NET Core 5.0  [به این برنچ مراجعه کنید](https://github.com/dotnetzoom/AspNetCore-WebApi-Course/tree/AspNetCore5.0)**\n- **همچنین جهت اطلاعات بیشتر از تغییرات که به هنگام Upgrade پروژه از نسخه 2.1 به 3.1 انجام شد، میتونین به قسمت [ChangeLog](https://github.com/dotnetzoom/AspNetCore-WebApi-Course/blob/master/CHANGELOG.md) مراجعه کنید**\n\n## تکنولوژی، ابزار ها و قابلیت ها\n  - **لایه بندی اصولی پروژه (Project Layering and Architecture)** : در این دوره لایه بندی اصولی یک پروژه را از ابتدا شروع و هر بخش را بررسی می کنیم. همچنین مباحث Repository و UOW رو هم بررسی می کنیم.\n  - **احراز هویت (Authentication)**\n    - **ASP.NET Core Identity** : احراز هویت توسط Identity + سفارشی سازی\n    - **(Json Web Token) JWT** : احراز هویت توسط Jwt + یکپارچه سازی آن با Identity\n    - **(Json Web Encryption) JWE** : ایمن سازی توکن ها بوسیله [رمزنگاری توکن (JWE)](https://www.dotnettips.info/post/2992) \n    - **Security Stamp** : جلوگیری از اعتبارسنجی توکن به هنگام تغییر دسترسی های کاربر جهت امنیت بیشتر\n    - **Claims** : کار با Claim ها و تولید خودکار آنها توسط ClaimsFactory\n  - **Logging (ثبت خطا ها)**\n    - **Elmah** : استفاده از [Elmah](https://github.com/ElmahCore/ElmahCore) برای لاگ خطا ها در Memory, XML File و Database\n    - **NLog** : استفاده از [NLog](https://github.com/NLog/NLog.Web) برای لاگ خطا ها در File و Console\n    - **Custom Middleware** : نوشتن یک میدلویر سفارشی جهت لاگ تمامی خطا (Exception) ها\n    - **Custom Exception** : نوشتن Exception برای مدیریت ساده تر خطا ها\n    - **Sentry** : ثبت خطا ها در سیستم مدیریت لاگ [sentry.io](sentry.io) (مناسب برای پروژه های بزرگ)\n  - **تزریق وابستگی (Dependency Injection**)\n    - **ASP.NET Core IOC Container** : استفاده از Ioc container داخلی Asp Core\n    - **Autofac** : استفاده از محبوب ترین کتابخانه [Autofac (Ioc Container)](https://github.com/autofac/Autofac)\n    - **Auto Registeration** : ثبت خودکار سرویس ها توسط یک تکنیک خلاقانه با کمک Autofac\n  - **ارتباط با دیتابیس (Data Access)**\n    - **Entity Framework Core** : استفاده از EF Core\n    - **Auto Entity Registration** : ثبت Entity های DbContext به صورت خودکار توسط Reflection\n    - **Pluralizing Table Name** : جمع بندی نام جداول EF Core به صورت خودکار توسط کتابخانه [Pluralize.NET](https://github.com/sarathkcm/Pluralize.NET) و Reflection\n    - **Automatic Configuration** : اعمال کانفیگ های EntityTypeConfiguration (FluentApi) به صورت خودکار توسط Reflection\n    - **Sequential Guid** : بهینه سازی مقدار دهی identity برای Guid به صورت خودکار توسط Reflection\n    - **Repository** : توضیحاتی در مورد معماری اصولی Repository در EF Core\n    - **Data Intitializer** : یک معماری اصولی برای Seed کردن مقادیر اولیه به Database\n    - **Auto Migrate** : آپدیت Database به آخرین Migration به صورت خودکار\n    - **Clean String** : اصلاح و یک دست سازی حروف \"ی\" و \"ک\" عربی به فارسی و encoding اعداد فارسی در DbContext به صورت خودکار به هنگام SaveChanges\n  - **Versioning** : نسخه بندی و مدیریت نسخه های پروژه + سفارشی سازی و ایجاد یک معماری حرفه ای\n  - **ابزار (Swashbuckle) Swagger**\n    - **Swagger UI** : ساخت یک ظاهر شکیل به همراه داکیومنت Aciton ها و Controller های پروژه و امکان تست API ها توسط [Swagger](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) UI\n    - **Versioning** : یکپارچه سازی اصولی Swagger با سیستم نسخه گذاری (Versioning)\n    - **JWT Authentication** : یکپارچه سازی Swagger با سیستم احراز هویت بر اساس Jwt\n    - **OAuth Authentication** : یکپارچه سازی Swagger با سیستم احراز هویت بر اساس OAuth\n    - **Auto Summary Document Generation** : تولید خودکار داکیومنت (توضیحات) برای API های پروژه\n    - **Advanced Customization** : سفارشی سازی های پیشرفته در Swagger\n  - **دیگر قابلیت ها**\n    - **API Standard Resulting** : استاندارد سازی و یک دست سازی خروجی API ها توسط ActionFilter\n    - **Automatic Model Validation** : اعتبار سنجی خودکار\n    - **AutoMapper** : جهت Mapping اشیاء توسط کتابخانه محبوب [AutoMapper](https://github.com/AutoMapper/AutoMapper) \n    - **Auto Mapping** :  سفارشی سازی وایجاد [یک معماری حرفه ای](https://github.com/mjebrahimi/auto-mapping) برای Mapping اشیا توسط Reflection \n    - **Generic Controller** : ساخت کنترلر برای عملیات CRUD بدون کد نویسی توسط ارث بری از CrudController\n    - **Site Setting** : مدیریت تنظیمات پروژ توسط Configuration و ISnapshotOptions\n    - **Postman** : آشنایی و کار با Postman جهت تست API ها\n    - **Minimal Mvc** : حذف سرویس های اضافه MVC برای افزایش پرفرمنس در API نویسی\n    - **Best Practices** : اعمال Best Practices ها جهت بهینه سازی، افزایش پرفرمنس و کدنویسی تمیز و اصولی\n    - **و چندین نکته مفید دیگر ...**\n\n## مزیت اصلی این دوره؟\nبه جای اینکه ماه ها وقت صرف کنین تحقیق کنین، مطالعه کنین و موارد کاربردی و مهم API نویسی رو یاد بگیرین\nتوی این دوره همشو یک جا و سریع یاد میگیرین و تو وقتتون صرفه جویی میشه. همچنین یک پله هم به Senior Developer شدن نزدیک میشین ;)\n\n## دانلود ویدئو های آموزشی دوره\nاین دوره در قالب (در مجموع) 22 ساعت آموزش ویدئویی توسط محمد جواد ابراهیمی ([mjebrahimi](https://github.com/mjebrahimi)) تدریس شده است.   \n\n**لینک دانلود** : [خرید از سایت بیاموز (کد تخفیف 20 درصدی : **DotNetZoom**)](http://beyamooz.com/project-based-aspnet/دوره-api-نویسی-اصولی-و-حرفه-ای-در-asp-net-core)\n\n## پیش نیاز این دوره :\nسطح دوره پیشرفته بوده و برای افراد **مبتدی** مناسب **نیست**.\n\nاین دوره، آموزش ASP.NET Core نیست و زیاد روی مباحثش عمیق نمیشیم و فقط به مباحثی می پردازیم که مرتبط با API نویسی توی ASP.NET Core هستش.\n\n انتظار میره برای شروع این دوره پیش نیاز های زیر رو داشته باشین :\n\n1. تسلط نسبی بر روی زبان سی شارپ\n2. آشنایی با پروتکل Http و REST\n3. آشنایی با Entity Framework (ترجیحا EF Core)\n4. آشنایی با ASP.NET MVC یا ASP.NET Core (و ترجیحا آشنایی با WebAPI)\n\n## ارتباط با مدرس\nجهت ارتباط با مدرس و ارائه هرگونه پیشنهاد، انتقاد، نظر و سوالاتتون میتونین با اکانت تلگرام **محمد جواد ابراهیمی** در ارتباط باشین [**mjebrahimi@**](https://t.me/mjebrahimi)\n\n## حمایت از ما\n⭐️در پایان اگه واقعا از دوره **خوشتون** اومده بود حتما بهش **Star** بدین\n. با اینکار حمایت خودتون رو از ما اعلام میکنین🙏 و این به ما انگیزه میده آموزش های بیشتری تهیه کنیم✌\n\n\u003c/div\u003e\n","funding_links":["https://coffeebede.ir/mjebrahimi"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnetzoom%2Faspnetcore-webapi-course","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnetzoom%2Faspnetcore-webapi-course","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnetzoom%2Faspnetcore-webapi-course/lists"}