C# 15 và .NET 11 giới thiệu union types và closed class hierarchies để xử lý các giá trị có nhiều dạng JSON, minh họa qua trường hợp maxUnavailable của Kubernetes và payment-events. Union types khai báo một tập hợp các primitive, class hoặc interface cố định với switch statement đầy đủ do compiler kiểm tra, trong khi closed hierarchies hạn chế kế thừa để compiler xử lý các derived types đã biết là đầy đủ. System.Text.Json serialize union types mà không cần envelope hay discriminator, chỉ ghi JSON shape của case đang hoạt động, còn closed hierarchies có thể chọn discriminator-based polymorphism thông qua InferClosedTypePolymorphism. Cả hai tính năng đều tích hợp với Minimal APIs, MVC, SignalR's JsonHubProtocol, Blazor và OpenAPI, nhưng union types không hỗ trợ cho query strings, route values, headers hay form fields do các giá trị này chỉ bind chuỗi không có JSON parsing.
Why read it: Bài viết giúp lập trình viên tận dụng union types và closed hierarchies trong C# để xử lý JSON đa dạng hiệu quả hơn trong ASP.NET Core.
Answer 3 short questions to earn reward points for this article. Only do it if you want the points.
3 questions · under a minute · optional
Source: https://devblogs.microsoft.com/dotnet/unions-and-closed-hierarchies-in-aspnetcore. 8 Sync News only summarizes and links out; content copyright belongs to the authors and original sources.
Đang tải bình luận…
Bối cảnh: Api Key phù hợp cho server-to-server APIs khi OAuth quá cồng kềnh. Nguyên nhân kỹ thuật: Ba cách implement Api Key trong ASP.NET Core là middleware, MVC filter và authentication handler. Hệ quả: Phương pháp middleware được cho là tốt nhất vì nó linh hoạt và không phụ thuộc vào framework cụ thể. Điều đáng học: Ví dụ thực tế cho thấy cách tạo Api Key middleware với khoảng 20 dòng code kiểm tra header, xử lý exception và cấu hình pipeline.
Bài viết này giúp bạn triển khai xác thực API Key trong ASP.NET Core ba cách hiệu quả đơn giản mà không cần dùng OAuth phức tạp.
Bài viết so sánh C# và F# trong môi trường .NET, cho thấy C# vẫn là ngôn ngữ phổ biến cho phát triển ứng dụng truyền thống. Nguyên nhân kỹ thuật mà tác giả cho F# vượt trội là sự hỗ trợ mạnh mẽ cho lập trình hàm: kiểu dữ liệu không thay đổi, suy luận kiểu mạnh mẽ và pattern matching tích hợp sẵn. Nhờ những tính năng này, mã F# thường ngắn gọn hơn, dễ duy trì và giảm nguy cơ lỗi thời gian chạy so với mã C# tương đương. Hệ quả là các nhóm phát triển có thể đạt được tốc độ sản xuất cao hơn và chất lượng code ổn định khi áp dụng F# cho các bài toán phức tạp như xử lý dữ liệu hoặc dịch vụ tài chính. Điều đáng học là khi đánh giá ngôn ngữ cho dự án, không chỉ xem xét mức độ phổ biến mà còn cân nhắc lợi ích của paradigm hàm và mức độ trừu tượng mà ngôn ngữ cung cấp để quyết định xem việc đầu tư thời gian học F# có mang lại lợi ích lâu dài không.
Bài viết này giúp lập trình viên hiểu tại sao F# vượt trội hơn C# trong nhiều trường hợp thực tế.
Bối cảnh bài viết so sánh Pipeline Pattern và System.IO.Pipelines trong .NET, tập trung vào các thành phần PipeReader và PipeWriter. Nguyên nhân kỹ thuật là việc tối ưu hóa hiệu suất xử lý dữ liệu byte buffer thông qua cơ sở sở hữu (byte-buffer ownership) và kiểm soát luồng (flow control). Hệ quả là System.IO.Pipelines giúp giảm đáng kể allocation garbage collector và tăng hiệu suất xử lý luồng dữ liệu so với cách tiếp cận truyền thống. Điều đáng học là cách triển khai parsing và completion handling trong System.IO.Pipelines giúp đơn giản hóa code xử lý I/O trong các ứng dụng .NET hiện đại.
Bài viết giúp lập trình viên hiểu rõ cách tối ưu hiệu suất xử lý luồng dữ liệu trong .NET bằng cách so sánh Pipeline Pattern với System.IO.Pipelines.
C# 15 giới thiệu extension indexers, hoàn thiện bộ tính năng extension members bắt đầu từ C# 14 với extension methods, properties, static members và operators. Extension indexers tuân thủ cùng cú pháp extension block và chỉ được compiler sử dụng khi không có indexer thực tế tương ứng; các indexer Index/Range ngầm định có ưu tiên cao hơn, và extension indexers trên arrays và strings bị bỏ hoàn toàn theo quy tắc ngôn ngữ cơ bản. Tính năng này hiện ở chế độ preview và yêu cầu đặt LangVersion thành preview trong .NET 11 preview 7. Conversion operators vẫn là loại member duy nhất không hỗ trợ extension và hiện chưa có kế hoạch hỗ trợ.
Bài viết này giúp lập trình viên hiểu cách sử dụng extension indexers trong C# 15 để mở rộng khả năng làm việc với các loại dữ liệu.
Bài viết hướng dẫn cách sử dụng .NET 10 và C# để chuyển đổi HTML thành PDF trong một API endpoint thực tế. Nó mô tả việc tạo endpoint xuất hoá đơn với hỗ trợ ngắt trang và lặp lại tiêu đề bảng trên mỗi trang. Đồng thời giải thích cách định dạng tiền tệ theo vùng văn hoá (culture-aware currency) và thiết lập hàng đợi render để quản lý các yêu cầu đồng thời. Các bước triển khai bao gồm việc chọn thư viện PDF phù hợp, cấu hình tùy chọn rendering và xử lý lỗi cơ bản. Từ đó, người đọc có thể học cách tối ưu hóa hiệu suất và độ tin cậy khi tạo PDF từ HTML trong môi trường .NET 10.
Hướng dẫn chi tiết này giúp bạn xây dựng endpoint chuyển đổi HTML sang PDF trong .NET 10 với các tính năng nâng cấp như ngắt trang, tiêu đề bảng lặp lại và hỗ trợ văn hóa.
Bài viết phân tích cách .NET từng có nhiều ngôn ngữ truy vấn riêng cho từng định dạng dữ liệu trước khi LINQ ra đời nhằm thống nhất chúng. Sau đó, mọi định dạng dữ liệu đều dần được chuyển đổi thành objects và truy vấn bằng LINQ.
LINQ không chỉ là công cụ tìm kiếm dữ liệu mà còn là khái niệm trừu tượng hóa và tiêu chuẩn hóa cách xử lý dữ liệu trong các ngôn ngữ .NET, giúp lập trình viên tránh rắc rối của các ngôn ngữ riêng biệt và tối ưu hóa hiệu suất cho các ứng dụng lớn.
Khi bảng dữ liệu đạt hàng triệu bản ghi, việc dùng Skip và Take trong .NET để phân trang trở nên chậm và tiêu tốn tài nguyên. Nguyên nhân là cách tính toán vị trí bằng cách duyệt toàn bộ các bản ghi trước khi lấy phần cần thiết, làm tăng thời gian truy vấn. Hệ quả là độ trễ tăng, tiêu thụ bộ nhớ cao và khả năng mở rộng giảm sút khi số người truy cập tăng. Để giải quyết, bài viết giới thiệu ba phương án thay thế: Offset pagination, Keyset pagination và Cursor pagination, mỗi loại có cách tính toán và chỉ số riêng. Nếu bạn đang cân nhắc có nên đọc bài gốc, hãy xem cách bài phân tích lợi thế và nhược điểm của mỗi phương án để chọn giải pháp phù hợp với truy vấn của mình.
Bài này giúp lập trình viên .NET chọn phương pháp phân trang tối ưu khi bảng dữ liệu lớn thay vì dùng Skip và Take.
Khi Chris Woody Woodruff lần đầu xuất bản sách Beyond Boundaries: Networking Programming with C# and .NET, ông đã dự đoán rằng nội dung sẽ cần được cập nhật theo sự phát triển của nền tảng. Ông nhấn mạnh rằng lĩnh vực mạng luôn thay đổi và .NET cũng không ngừng phát triển. Tuy nhiên, mức độ mở rộng của .NET 11 và C# 15 đã vượt quá mong đợi, bao gồm nhiều tính năng mới liên quan đến mạng và hiệu suất. Điều này đã buộc tác giả thực hiện bản cập nhật lớn nhất mà sách từng có, nhằm tích hợp đầy đủ những thay đổi mới. Bài học từ trải nghiệm này là khi viết sách về công nghệ, cần theo dõi sát nhật bản phát hành của nền tảng và sẵn sàng sửa đổi ngay khi có bản phát hành lớn như .NET 11 và C# 15.
Bài viết này cung cấp thông tin cập nhật quan trọng về những thay đổi lớn trong .NET 11 và C# 15 giúp lập trình viên nắm bắt xu hướng phát triển mới nhất.
Read the news here, practice coding, follow structured courses and train for IELTS on our sibling products — all connected through one 8 Sync account.
The ecosystem home: product overviews, blog and full pricing.
ExploreLearn along a clear roadmap: videos, auto-graded quizzes, certificates and mentors who ship for a living.
View the roadmap1,000+ DSA problems in Vietnamese, auto-graded across 7 languages — many FREE, right in your browser.
Practice for freeAI grading for all four IELTS skills with detailed rubric feedback.
Try it freeA 22 MB AI IDE for Vietnamese devs.
Download freeOrganizational memory for AI agents.
ExploreAI that staffs your Fanpage and qualifies leads for you.
Try it