0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Khám Phá Các Kiến Thức Cơ Bản Bị Bỏ Qua Trong .NET

Đăng vào 3 ngày trước

• 4 phút đọc

Khám Phá Các Kiến Thức Cơ Bản Bị Bỏ Qua Trong .NET

🧭 Giới Thiệu

Ngay cả những lập trình viên .NET có kinh nghiệm cũng thường gặp những khoảng trống trong hiểu biết—đặc biệt trong các chu kỳ sống của dịch vụ, hành vi middleware, thuật ngữ runtime, và các khái niệm cơ bản về web như cookies. Bài viết này sẽ khám phá những lĩnh vực này với các ví dụ thực tiễn và giải thích, giúp bạn xây dựng các ứng dụng mạnh mẽ, bảo mật và dễ bảo trì hơn.


🔁 Chu Kỳ Sống của Dependency Injection trong .NET

Dependency Injection (DI) là trung tâm của kiến trúc ASP.NET Core. Hiểu biết về chu kỳ sống của dịch vụ giúp bạn tránh các vấn đề về hiệu suất và lỗi liên quan đến việc tái sử dụng đối tượng và quản lý trạng thái.

Chu Kỳ Mô Tả Trường Hợp Sử Dụng
Transient Tạo một thể hiện mới cho mỗi yêu cầu. Dịch vụ nhẹ, không trạng thái.
Scoped Một thể hiện cho mỗi yêu cầu. Dịch vụ duy trì trạng thái ở cấp độ yêu cầu.
Singleton Một thể hiện cho toàn bộ vòng đời ứng dụng. Dịch vụ chia sẻ, không trạng thái, tạo tốn kém.

🧠 Những Lưu Ý Quan Trọng

  • Dịch vụ Singleton phải an toàn với nhiều luồng.
  • Dịch vụ Scoped lý tưởng cho dữ liệu theo yêu cầu (ví dụ: EF Core DbContext).
  • Dịch vụ Transient có thể lãng phí nếu chúng liên quan đến khởi tạo nặng.

🧱 Pipelines Middleware trong ASP.NET Core

Các thành phần middleware tạo thành xương sống của quá trình xử lý yêu cầu trong ASP.NET Core. Chúng được thực thi theo thứ tự đã đăng ký và có thể sửa đổi hoặc ngắt các pipeline yêu cầu.

🔧 Ví Dụ Cấu Hình

csharp Copy
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

🧠 Các Khái Niệm Chính

  • Middleware có thể kiểm tra, sửa đổi hoặc chấm dứt các yêu cầu.
  • Thứ tự rất quan trọng: UseRouting phải đứng trước UseAuthorization, ví dụ.
  • Middleware tùy chỉnh có thể bao bọc các mối quan tâm cắt ngang như ghi log hoặc xử lý lỗi.

🛠 Ví Dụ Middleware Tùy Chỉnh

csharp Copy
public class LoggingMiddleware
{
    private readonly RequestDelegate _next;
    public LoggingMiddleware(RequestDelegate next) => _next = next;

    public async Task InvokeAsync(HttpContext context)
    {
        Console.WriteLine($"Request: {context.Request.Path}");
        await _next(context);
        Console.WriteLine($"Response: {context.Response.StatusCode}");
    }
}

Đăng ký với: app.UseMiddleware<LoggingMiddleware>();


⚙️ Thế Nào Là "Managed" Trong C#?

Managed code chạy dưới Common Language Runtime (CLR), cung cấp các dịch vụ như quản lý bộ nhớ, an toàn kiểu dữ liệu và xử lý ngoại lệ.

📌 Đặc Điểm

  • Garbage Collection: Dọn dẹp bộ nhớ tự động.
  • An Toàn Kiểu Dữ Liệu: Ngăn chặn các thao tác không an toàn.
  • Bảo Mật: Được thực thi thông qua các kiểm tra runtime và sandboxing.

🧠 Managed so với Unmanaged Code

Tính Năng Managed Code Unmanaged Code
Quản Lý Bộ Nhớ Tự động qua CLR Thủ công (malloc, free)
Bảo Mật An toàn kiểu dữ liệu, sandboxed Truy cập bộ nhớ trực tiếp
Ví Dụ Ngôn Ngữ C#, VB.NET C, C++
Interop P/Invoke, COM Interop Cần các wrapper

Hiểu biết về sự phân biệt này là rất quan trọng khi tích hợp với các thư viện gốc hoặc tối ưu hóa các thành phần nhạy cảm về hiệu suất.


🍪 Hiểu Về Cookies Trong Trình Duyệt

Cookies là rất cần thiết cho quản lý phiên, cá nhân hóa và theo dõi. ASP.NET Core cung cấp một API đơn giản để làm việc với chúng.

  • Session Cookies: Bị xóa khi trình duyệt đóng.
  • Persistent Cookies: Được lưu trữ cho đến khi hết hạn hoặc xóa thủ công.

🛠 Thiết Lập Cookies Trong ASP.NET Core

csharp Copy
Response.Cookies.Append("UserName", "Alice", new CookieOptions
{
    Expires = DateTimeOffset.UtcNow.AddDays(1),
    HttpOnly = true,
    Secure = true,
    SameSite = SameSiteMode.Strict
});

🔐 Các Thực Hành Bảo Mật Tốt Nhất

  • Sử dụng HttpOnly để ngăn chặn truy cập từ JavaScript.
  • Sử dụng Secure để yêu cầu HTTPS.
  • Sử dụng SameSite=Strict để giảm thiểu CSRF.
  • Tránh lưu trữ dữ liệu nhạy cảm trực tiếp trong cookies.

✅ Kết Luận

Các khái niệm này—chu kỳ sống DI, pipeline middleware, mã managed và cookies—là nền tảng để xây dựng các ứng dụng .NET hiện đại. Bằng cách hiểu rõ về các sắc thái của chúng, bạn sẽ viết mã sạch hơn, an toàn hơn và hiệu quả hơn. Dù bạn đang hoàn thiện kiến trúc của mình hay hướng dẫn người khác, những hiểu biết này sẽ phục vụ bạn tốt.


Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào