- Xử lý việc thiếu thẻ đóng của thẻ A trong tệp HTML
- https://github.com/gtechsltn/MalformedHtmlFix
- System.Text.RegularExpressions
- Aspose.Email for .NET version 20.5
- HtmlAgilityPack
- HtmlSanitizer (Ganss.Xss)
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
- Developer Guidelines + DevOps Guidelines + Scale to Cloud
- .NET 8 Minimal API
- SQL Server
- Dapper CRUD (IDbConnectionFactory)
- Transaction
- Serilog
- Swagger
- Unit Tests (InMemoryDB)
- Integration Tests (LocalDB)
- Carrot Search FoamTree
- Vis.js Graph3d
- Regular Expression (regex) that matches any object instantiation starting with Ext...
- Remove "new Ext.data.SimpleStore({...})" + Kepp "{...}" only
- Remove "new Ext.data.Store({...})" + Kepp "{...}" only
- ...
- Remove "new Ext.Window({...})" + Kepp "{...}" only
- ConfigHelper.CleanTemplateJson method that remove 31 ExtJS classes
- Unit Tests with MSTest
- Using DataRow with 31 test cases in 1 method
- DbSchemaGenerator
- DbSchemaExtractor
- Website visjs.org
- TimelineApi (Build Mvc + Deploy to IIS)
- Central Package Management (CPM) (Build Mvc + Deploy to IIS)
- .NET Framework (2002–2022)
- .NET Core (2016–2020)
- .NET 5+ (2020-2025)
- .NET 6 (Released November 2021)
- .NET 7 (Released November 2022)
- .NET 8 (Released November 2023)
- .NET 9 (Released November 2024)
- .NET 10 (Will be release on November 2025)
- Dapper
- EF Core
- EF Core Bulk extensions
- SQL Bulk Copy
- Entity Framework Extensions
- Web Api Best Practices
- Bulk Insert
- Dapper Bulk Insert vs Bulk Copy vs TVPs
- Bulk Insert
- Cookie Auth in MVC
- Cookie Injection
- CRUD Ajax MVC
- CRUD Ajax MVC Bulk Insert with TVPs
- EFCore.BulkExtensions
- SOAP ASMX in .NET 8
D:\gtechsltn>mkdir my-project
D:\gtechsltn>cd my-project
D:\gtechsltn\my-project>git init
Initialized empty Git repository in D:/gtechsltn/my-project/.git/
D:\gtechsltn\my-project>git sparse-checkout init --cone
D:\gtechsltn\my-project>git remote add origin https://github.com/launchdarkly/dotnet-core.git
D:\gtechsltn\my-project>git sparse-checkout set pkgs/sdk/server/src
D:\gtechsltn\my-project>git pull origin main
remote: Enumerating objects: 12769, done.
remote: Counting objects: 100% (1389/1389), done.
remote: Compressing objects: 100% (546/546), done.
Receiving objects: 100% (12769/12769), 3.37 MiB | 9.32 MiB/s, done.
Resolving deltas: 100% (8347/8347), done.
From https://github.com/launchdarkly/dotnet-core
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
D:\gtechsltn\my-project>
- https://github.com/HangfireIO/Cronos
- https://medium.com/@iamrks/building-a-flexible-background-job-scheduler-in-net-core-using-hangfire-b20fd17e4765
- https://np4652.medium.com/building-a-configurable-background-job-engine-in-net-core-like-hangfire-part-1-d9be899c6ba7
namespace Data.Repository
{
public class UnitOfWork : IUnitOfWork
{
public IAccountRepository AccountRepository { get; set; }
private WebBaseEntityContext _dbEntity;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IServiceProvider _serviceProvider;
private readonly ConfigOptions _configOptions;
public UnitOfWork(
ConfigOptions configOptions,
IHttpContextAccessor httpContextAccessor,
IServiceProvider serviceProvider)
{
_configOptions = configOptions;
_httpContextAccessor = httpContextAccessor;
_serviceProvider = serviceProvider;
}
public string GetDatabaseName()
{
_dbEntity = _serviceProvider.GetRequiredService<WebBaseEntityContext>();
var timeoutInSeconds = int.Parse(_configOptions.DatabaseTimeoutInSeconds);
_dbEntity.Database.SetCommandTimeout(timeoutInSeconds);
return _dbEntity.Database.GetDbConnection().Database;
}
...
}
}
- IDbDataParameter
- Anonymous Types
- ExpandoObject
- Dictionary<string, object>
- QueryField
- QueryGroup
https://github.com/gtechsltn/FileReplacer
https://github.com/gtechsltn/FolderCompare
Tạo tệp đầu vào cho Data Export tool (xóa log, xóa bagit, chạy script reset db, tạo tệp input.csv, sửa connection string ở D:\ThirdSight\ThirdSight.DataMigration1\TSDataExport.exe.config)
https://github.com/gtechsltn/CsvGenerator
https://github.com/gtechsltn/SearchText
- EF4TS (HAY HAY HAY HAY HAY)
- EFCoreConsole
- EFSeederTool (HAY HAY HAY HAY HAY)
- EFCoreSeedDataGenerator
- WebBanHang (HAY HAY HAY HAY HAY)
- Tool Exec SQL Files (Batch processing + Parallel processing) (HAY HAY HAY HAY HAY)
- Tool Exec SQL Files (ChatGPT)
- ConsoleCleanArch
- Enterprise_WebAPI_Starter_Kit (HAY HAY HAY)
- Clean Architecture Blazor UI
- UserInfoMgmt (2025-Aug-04)
- FluentBlazorCrudApp (2025-Aug-05)
- DBToWordPDF or SqlDbExporter
- ClosedXML
- Windows Console Application (C#) vs Windows Service (C#)
- CsvReaderUI
- Service-Oriented Architecture
- Library Management System
- D:\gtechsltn\LibMgmtSys\Src\LMS\Program.cs
- HTML5
- Auto DAL Code Genration from Stored Procedures
- GitHub Actions
- Security (Authentication + Authorization) in ASP.NET Core
- Serilog in Console App
- Serilog in ASP.NET Core
- .NET Core 10
- ASP.NET Core MVC Web Application
- ASP.NET Core Web API
- SQL Server (Users, Roles, UserRoles)
- Serilog
- ADO.NET
- EF Core
- Role-Based Access Control (RBAC) with JWT Access Token, Refresh Token, Revoke Token
- Seed Data
- Stored Procedures
- Unicode in Serilog + Log4Net
- How to log uncaught exceptions in C#
- Logging in Microservices: 5 Best Practices
- OpenAI ChatGPT
- Google Gemini
- .NET Framework 4.8
- Console App (C#)
- CommandLineParser 2.9.1
- Newtonsoft.Json 13.0.3
- CsvHelper 33.1.0
- log4net 3.1.0
- Dapper 2.0.78
- Dapper.Contrib 2.0.78
- CommandDefinition Structure
- CommandTimeout
- Program.cs
- DapperConfig.Initialize();
- DapperConfig.Initialize(){}
- SPInsertData
- SQL-JSON
- TVP and Stored Procedure
CREATE TYPE dbo.TVP_Workspace AS TABLE
(
WkSpcID BIGINT,
MetaJson NVARCHAR(MAX)
);
CREATE PROCEDURE dbo.InsertMetaWorkspaces
@Workspaces dbo.TVP_Workspace READONLY
AS
BEGIN
INSERT INTO meta_workspaces (WkSpcID, meta_json)
SELECT WkSpcID, MetaJson FROM @Workspaces;
END
private static DataTable CreateWorkspaceTvp(IEnumerable<MetaWorkspace> workspaces)
{
var table = new DataTable();
table.Columns.Add("WkSpcID", typeof(long));
table.Columns.Add("MetaJson", typeof(string));
foreach (var ws in workspaces)
{
table.Rows.Add(ws.WkSpcID, ws.MetaJson);
}
return table;
}
using (var connection = new SqlConnection(connectionString))
{
var workspaces = new List<MetaWorkspace>
{
new MetaWorkspace { WkSpcID = 1, MetaJson = "{ \"a\": 1 }" },
new MetaWorkspace { WkSpcID = 2, MetaJson = "{ \"b\": 2 }" }
};
var tableParam = new SqlParameter("@Workspaces", CreateWorkspaceTvp(workspaces))
{
SqlDbType = SqlDbType.Structured,
TypeName = "dbo.TVP_Workspace"
};
var command = new CommandDefinition(
commandText: "dbo.InsertMetaWorkspaces",
parameters: new { }, // we'll inject via DynamicParameters
commandType: CommandType.StoredProcedure,
commandTimeout: 60
);
var dynamicParams = new DynamicParameters();
dynamicParams.Add("@Workspaces", tableParam.Value, DbType.Object, ParameterDirection.Input);
// You can also pass SqlParameter directly via ADO.NET
connection.Execute(command.CommandText, dynamicParams, commandType: command.CommandType);
}
- Tự động tạo GitHub Repo kèm Source Code và đẩy lên GitHub sử dụng GitHub PAT
- Create-GitHub-Repo.ps1 (vẫn phải sửa đường dẫn gốc)
- Tự động tạo Console App Template
- Generate ConsoleApp1 with Log4net, CsvHelper, Dapper, Dapper.Contrib, Newtonsoft.Json, System.Data.SQLite, EntityFramework, SQL Server + Connection String
- Tự động triển khai lên IIS với HTTPS Binding và IIS Express Development Certificate
- DeployToIIS.ps1 (vẫn phải sửa đường dẫn gốc)
- Tự động tạo bản Deploy sử dụng MSBuild với Release mode trong Visual Studio 2022 Enterprise
- BuildAndCopy.ps1 (vẫn phải sửa đường dẫn gốc)
- Tự động đóng gói vào tệp .zip để chuẩn bị chuyển giao cho bộ phận DevOps
- ZipPackage.ps1 (vẫn phải sửa đường dẫn gốc)
- Tự động triển khai lên Windows Service (services.msc) với tài khoản Windows (user: MANH\ADMIN, pass: Abc@123$)
- BuildAndDeploy.ps1 (vẫn phải sửa đường dẫn gốc)
- https://betterstack.com/community/guides/logging/logging-best-practices/
- https://betterstack.com/community/guides/logging/best-dotnet-logging-libraries/
- https://betterstack.com/community/guides/logging/how-to-start-logging-with-log4net/
- https://betterstack.com/community/guides/logging/how-to-start-logging-with-serilog/
Solution for the coursera course Service-Oriented Architecture offered by University of Alberta
https://github.com/gtechsltn/Service-Oriented-Architecture
SOA module of a larger web portal. This module pertains to data warehousing and analysis, logging and advertisement services.
https://github.com/markus-lamm/hv-sos100-dataservice
https://github.com/gtechsltn/hv-sos100-dataservice
This project contains prototype for SQL IDE developed as my course project for 3rd year of studies in kpi. Technologies: C#, WPF, PostgreSQL
https://github.com/mynameiszp/sql-ide-project/tree/main
https://github.com/gtechsltn/sql-ide-project
✅ MVC 5, Bootstrap, Web API 2, JQuery, Ajax, EF6, DDD
https://github.com/piotr-mamenas/performance-app
https://github.com/gtechsltn/performance-app
WEB API in .Net 7 with JWT Auth and EF Core. Ths is a Web API project for Authentication and Authorization. It used ASP.Net Core 7 using EF Core with MS SQL DB.
https://github.com/ahsan-javied/Web-API-Dot-Net-Core-7
https://github.com/gtechsltn/Web-API-Dot-Net-Core-7
Northwind + AgularJS
https://github.com/alisuleymantopuz/soa-arch
https://github.com/gtechsltn/soa-arch
Northwind Backend (.NET Core 3.1)
This service oriented architecture project was developed on .NET Core.
https://github.com/gtechsltn/NorthwindBackend
Document Management System
https://github.com/diaakhateeb/FRISS_DocumentManagementSystem
https://github.com/gtechsltn/FRISS_DocumentManagementSystem
ASP.NET WCF, MySQL
A SOAP-based loan management system built with C# and ASP.NET WCF, designed to streamline library operations with CRUD functionalities for loans, user-friendly integration, and scalable service-oriented architecture.
https://github.com/Yassinekrn/SOAP-Based-Loan-Management-WS
https://github.com/gtechsltn/SOAP-Based-Loan-Management-WS
Service-Oriented Architecture
https://github.com/KountourisPanagiotis/products-soa-app
https://github.com/gtechsltn/products-soa-app
ShowCase: QuestionController
https://github.com/cloudtoid/poem/blob/master/showcase/QnA/Controllers/QuestionController.cs
Mini e-shop MVC project (.NET 6)
https://github.com/ResadMemmedov0035/MiniEshopOnionDemo
https://github.com/gtechsltn/MiniEshopOnionDemo
Error Handlers
https://github.com/ResadMemmedov0035/MiniEshopOnionDemo/blob/master/MiniEshop.Web/Controllers/ErrorHandleController.cs
Background File Processing Service (.NET 8)
https://github.com/Voidcoolis/CvsProcessorAPI
https://github.com/gtechsltn/CvsProcessorAPI
This API simulates a real-world background file processing service. CSV files uploaded by authenticated users are queued and processed line by line using a background service. This architecture showcases common backend engineering patterns.
https://github.com/gtechsltn/CvsProcessorAPI/blob/master/CvsProcessorAPI/Queue/InMemoryFileProcessingQueue.cs
Queue
System.Collections.Concurrent
ConcurrentQueue<string>
IFileProcessingQueue
Enqueue
Dequeue
Only if your SQL Server has a valid SSL/TLS certificate.
Data Source=tcp:NPTDIFILEDB1P,1436;
Initial Catalog=Thirdsight;
Integrated Security=SSPI;
Encrypt=True;
TrustServerCertificate=False;
Pooling=True;
Connect Timeout=30;
Only for testing, dev, or isolated on-prem networks.
Data Source=tcp:NPTDIFILEDB1P,1436;
Initial Catalog=Thirdsight;
Integrated Security=SSPI;
Encrypt=False;
TrustServerCertificate=False;
Pooling=True;
Connect Timeout=30;
| Scenario | Recommended Connection String |
|---|---|
| Local/dev box | Encrypt=False; |
| Internal test server (self-signed cert) | Encrypt=True;TrustServerCertificate=True; |
| Production (CA-signed cert) | Encrypt=True;TrustServerCertificate=False; |