Please enable JavaScript.
Coggle requires JavaScript to display documents.
ASP.NET Core - Coggle Diagram
ASP.NET Core
MiddleWare(MW)
- Khái niệm: là một module code nhận Request sau đó xử lý Request và trả về Response hoặc chuyển sang middleware tiếp theo. các middleware như là các dịch vụ, sẽ được đăng ký vào ứng dụng bằng đối tượng IApplicationBuilder (nó là thuộc tính app được truyền vào như tham số trong hàm Configure)
- Khái niệm pipeline: các middleware kết nối lại với nhau thành một xích. một chuỗi middleware nhận request trả về response như vậy gọi là pipeline
- việc thêm middleware vào pipeline được thực hiện ở phương thức Configure của lớp startup. các middleware trong pipeline xử lý các Http Message đều có dạng nhận tham số đầu vào là HttpContext(có chứa Request, Response)
- quy trình di chuyển của HttpContext qua các middleware có thể minh họa như sau:
- Một lớp(class) phù hợp là một middleware khi có đủ các điều kiện sau:
- có một hàm khởi tạo nhận vào tham số là một RequestDelegate, nếu có tham số thứ 2 - chúng phải được inject vào từ DI của hệ thống.
- có tối thiểu một trong 2 phương thức Invoke hoặc InvokeAsync nhận tham số là HttpContext và trả về Task
- xử lý dữ liệu trong invoke và chuyển nó đến MW tiếp theo bằng RequestDelegate, hoặc tar về HttpResponse để trả về cho client
- Ta có thể sử dụng giao diện IMiddleware để tạo middleware. từ đó chỉ cần xây dựng phương thức Task InvokeAssync(HttpContext context, RequestDelegate next) đối với loại này cần đăng ký vào DI bằng thuộc tính service trong phương thức ConfigureServices của startup.cs
- Truyền dữ liệu giữa các Middlewar bằng HttpContext.Items, nó là dữ liệu kiểu IDictionary.thêm dữ liệu bằng context.Items.Add("key","value") đọc nó bằng indexer như này context.Items["key"]
- RequestDelegate là một delegate có tham số là HttpContext. nó có thể cấu hình để trở thành điểm cuối của pipeline, hay của một nhánh trong pipeline. thực hiện nó trong config của startup.
- có thể thêm một điểm cuối app.Run(RequestDelegate) làm điểm cuối trong pipeline hay nhánh của pipe.
- Rẽ nhánh bởi EndpointRoutingMiddleware: nó có chức năng phân tích yêu cầu gửi đến (Url, Method) và chuyển hướng đến một RequestDelegate phù hợp. định nghĩa bới endpoints - điểm cuối của nhánh. có ngĩa là tại middleware EndpointRoutingMiddleware có thể rẽ ra nhiều nhánh
- enpoints là một IEndpointRouteBuilder có nhiều phương thức để điều hướng thêm vào các đối tượng lớp RouteEndpoint phù hợp với yêu cầu gửi đến (Get, Post, Patch, Put, Delete)
- các phương thức của enpoints là MapGet("/Url", RequestDelegate), với "/Url" là mẫu tuyển định( route template) (hay là các url với các giá trị query của url). thay các hậu tố Post, Delete, Put để có các phương thức truy vấn phù hợp.
- MapMethods(pattern, HttpMethods,requestDelegate) tương tự, khác ở chỗ, httpMethods chỉ định danh sách các phương thức truy vấn. ví dụ: endpoints.MapMethods("/abc",new string[] {"put", "post","delete"},async context =>{})
- Rẽ nhánh truy vấn với IApplicationBuilder.Map
- Rẽ nhánh trực tiếp bằng app.Map(pathMatch, IApplicationBuilder app=>{ // sử dụng app để xử lý yêu cầu});
- Ứng dụng Route: nghĩa là sử dụng các phương thức trên ta có thể điều hướng đến các địa chỉ Url. như vậy gọi là Route.
- khi truy vấn đến web, thông tin của nó sẽ chứa trong đối tượng HttpRequest, lấy được từ HttpContext là tham số của RequestDelegate. các thông tin đọc được là scheme http, header, pathbase, path, querytring, method, protocol, contentType, cookie ...
- Làm việc với Upload file, Cookie, Json
- đọc thông tin post từ form: khi form submit, dữ liệu gửi đến đối tượng bằng kiểu IFormCollection tại thuộc tính HttpRequest.Form, đối với File thì dùng HttpRequest.Files, chúng đều là danh sách các phần tử form hay file nên chúng dùng indexer để truy cập. toàn bộ dữ liệu file có thể chuyển qua phương thức IFormFile.CopyToAsync(stream).
- dùng Cookie: cookie là mẩu tin được lưu ở máy người dùng nhằm theo dõi, lưu lại hoạt động truy cập của người dùng. có thể đọc được bằng thuộc tính request.Cookies hay respone.Cookies
- trả về nội dung Json: cần add package Newtonsoft.Json, ở đây có thể chuyển đổi đối tượng lớp thành json thì dùng JsonConvert.SerializeObject.
- cấu hình là cách lưu thông tin cần thiết, cung cấp cho ứng dụng khi nó chạy
- toàn bộ cấu hình mặc định lưu ở dịch vụ với tên IConfiguration - đối tượng này có thể đọc config .
để lấy đối tượng này dùng : app.IApplication.GetService<IConfiguration>()
- đối với json nó sẽ lưu dưới dạng key:value những khối dạng key:{...} thì gọi là section..
để lấy section dùng phương thức GetSection(Key) của đối tượng IConfiguration
- hoặc có thể lấy Section sau đó convert thành một đối tượng lớp(lớp này có cấu trúc thuộc tính tương đương với Section) với phương thức:
IConfiguration.Get<ClassName>()
- Inject option config vào dịch vụ DI
- IServiceCollection-Session-ISesstion
- Là cơ chế để lưu dữ liệu của phiên làm việc cho ứng dụng - ứng với từng khách truy cập (phiên làm việc). ĐỂ TRAO ĐỔI DỮ LIỆU GIỮA CÁC TRANG
- Giao diện ISession và lớp DistributedSession có một số phương thức
- ID - lấy ID của Session, gửi ID về lưu ở Cookie
- Clear() - Xóa bỏ các giá trị lưu trong Session
- Set(string key, byte[]) - lưu mảng byte vào Session với key
- SetString(string key, string s) - lưu chuỗi vào key
- TryGetvalue(string key, byte[]) - lấy dữ kiệu trong key
- GetString(string key) - lấy chuỗi trong key
- SetInt32(string key, Int32 val) - lưu số kiểu int32 vào key
- GetInt32(string key) - lấy số int32 trong key
- ServiceCollection - IServiceColection
- ASP.NET Core tích hợp sẵn một DI container. đối tượng này thuộc kiểu IServiceCollection(quản lý dịch vụ như đăng ký, tự động inject, hay servicelifetime )
- Các đăng ký sẽ thưc hiện ở phương thức ConfigureServices của lớp startup. add các dependency bằng tham số services. dùng
AddSingleton<ServiceType,Implementationtype>()
AddTransient<ServiceType,Implementationtype>()
- ServiceType: là kiểu dịch vụ
- ImplementationType: là kiểu sẽ tạo ra đối tượng dịch vụ theo tên Servicetype, cần đảm bảo nó là lớp triển khai kế thừa từ serviceType, hoặc chính là ServiceType
- Triệu gọi ra các dịch vụ này trực tiếp thì dùng đối tượng IApplicationBuilder.ApplicationServices.GetService<dịch vụ>()
hoặc có thể thông qua httpcontext context.RequestServices.GetService<dịch vụ>()
- Map, MapWhen: giống như app.Map, tạo ra điểm rẽ nhánh. tuy nhiên, nó không trực tiếp tạo mẫu route rồi so sánh với Url gửi đến rồi rẽ nhánh mà nó thực hiện với một điều kiện logic nào đó.
MapWhen(Func<HttpContext, bool> predicate, Action<IApplicationBuilder> configuration);
nếu predicate trả về true thì thực hiện configuration.
- nội dung file Programe.cs với hàm main là điểm mồi chạy.
HostBuilder thiết lập các tính năng, cấu hình chính thức của webhost. phương thức Build trả về giao diện IWebHost. sử dụng Interface này để truy cập các dependency được inject bằng cách truy cập thuộc tính services, các đặc tính của server với thuộc tính ServerFeature, gọi Run để bắt đầu lắng nghe trên cổng thiết lập
- Routing: là quá trình xử lý thông tin, qua nó ứng dụng xác định được cần thực thi các phương thức nào cho mỗi URL gửi đến. ASP.NET Core sử dụng một middleware để ánh xạ các url tương ứng với phương thức nào của ứng dụng.
- sử dụng lớp SmtpClient chuyển email đến máy chủ SMTP, và đối tượngMailMessage để biên tập và dùng phương thức SendMailAsync để chuyển đi