Please enable JavaScript.
Coggle requires JavaScript to display documents.
Razor page - Coggle Diagram
Razor page
- Khái niệm: Các Controller cần các dữ liệu gửi bởi truy vấn, từ các thông tin gửi đến chuỗi query của url, tham số route, post form... ứng dụng có thể đọc các dữ liệu này, trích xuất được nó bằng cách sử dụng phương thức cung cấp bởi đối tượng HttpRequest
- Model binding: hoạt động như sau
- 1. lấy dữ liệu từ các nguồn gửi đến(Route dât, Form data, chuỗi query, File tải lên).
- 2. tiến hành chuyển và thiết lập dữ liệu đó cho Controller( thiết lập vào các handler, Action hay thuộc tính public).
- 3. chuyển đổi chuỗi dữ liệu nhận được thành kiểu phù hợp với .NET
- Binding bằng tham số: khi khai báo các handler hoặc action, nếu có tham số thì .NET tự động tìm trong dữ liệu gửi đến xem có phần tử nào có tên(không phân biệt hoa thường) cùng tên tham số này không, nếu có dữ liệu sẽ chuyển kiểu cùng kiểu tham số và gán giá trị cho tham số này.
- Binding bằng thuộc tính(property): việc tự động lấy từ nguồn dữ liệu gửi đến thiết lập cho thuộc tính public của lớp Model đó là property . việc này được thiết lập bằng cách sử dụng thuộc tính bổ sung [BinProperty] trên thuộc tính cần binding. chỉ các thuộc tính với phạm vi truy cập là public mới sử dụng được binding. chỉ hoạt động trên thuộc tính lớp, có các tham số
1.Name - chỉ ra chuỗi tên của nguồn dữ liệu, nếu thiếu lấy theo thuộc tính.
2. SupportsGet- kiểu boolean, mặc định là false - không binding khi truy cập là get, nếu true thì hỗ trợ
- BindingProperties: tác dụng vào lớp, kích hoạt binding cho tất cả các thuộc tính (giúp cho không phải thiết lập nhiều lần, tuy nhiên có tùy chọn riêng vẫn có thể dung [BindProperty])
- chỉ định nguồn Binding cụ thể: để chỉ định rõ nguồn dùng các thuộc tính bổ sung.
1. [FromQuery] - lấy giá trị từ chuỗi query URL
2. [FromRoute] - lấy giá trị từ Route
3. [FromForm] - từ form
4. [FromBody] - từ body của http request
5. [FromHeader] - lấy giá từ header của http request
chúng có thuộc tính Name để thiết lập key của dữ liệu.
thay đổi tiền tố khác với tên thuộc tính bằng [Bind(Prefix = "tiento")]
- Binding dữ liệu phức tạp: yêu cầu chỉ định củ thể dữ liệu binding cho thuộc tính.
1 . [Bind("thuoctinh1","Thuoctinh2"...)] - chỉ định thuộc tính nào dc binding.
2. [BindRequired] - áp dụng cho một thuộc tính của lớp phức tạp, phát sinh trạng thái lỗi nếu không thực hiện binding cho thuộc tính này
3. [BindNever] - không thực hiện binding.
- Tạo Model biding: tạo ra một lớp triển khai từ giao diện IModelBinder sau đó sử dụng thuộc tính [ModelBinder] để chỉ ra sẽ áp dụng cơ chế binding tùy chọn.
- Layout: bố cục chung cho các trang Razor. các file có tên bắt đầu bằng _ đó là các file được phối hợp đẻ tạo ra các layout của trang khác. dữ liệu truyền từ Razor page sang layout có thể sử dụng đối tượng lớp ViewDataDictionanry có tên ViewData
- Partial Page/View: sử dụng để chia nhỏ các trang Razor, sử dụng được các phần chung cho các nhóm.
- View Component: cung cấp khả năng phát sinh HTML được sử dụng lại nhiều lần, trong nhiều trang. thường hay sử dụng thay Partial. một View phải có một file khai báo lớp, lớp này kế thừa từ ViewComponent có chức năng xử lý logic và một file .cshtml là thành phần sinh ra html.
- tên lớp phải có hậu tố ViewComponent hoặc thuộc tính [ViewComponent]
- lớp triên khai phương thức Invoke trả về IViewComponentResult hoặc với bản bất đồng bộ của nó
- TagHelper: là các phần tử của ngôn ngữ đánh dấu, nó được viết trong các view, qua đó phát sinh mã HTML một cách thích hợp. (giống thuộc tính của các thẻ trong html) để nạp hoặc loại bỏ taghelper dùng **(@addTagHelper,@removeTagHelper, thêm ! vào trước thẻ để hủy tác dụng taghelper)** (còn tacg nào thì tra gg đi, nhừ dc thì chắc thành senior mịa r)
- HtmlHelper: phát sinh ra html thực hiện qua thuộc tính Html
ví dụ: **@Html.Label("inputcontroller", "ĐÂY LÀ LABEL", new {@class = "text-danger"})**
- PageModel: phân tách giữa xử lý dữ liệu bằng C# và mã Html. khi này nó tách thành 2 file .cshtml để chứa và sinh ra html còn .cshtml.cs để xử lý dữ liệu xong truyền dữ liệu đến .cshtml (cách này còn gọi là code-behide). dữ liệu truyền qua 2 file nằm ở thuộc tính Model.
1. trong lớp model có các phương thức tiền tố là On như OnGet,OnPut,OnPost... thì chúng gọi là handle, tự động chạy theo phương thức http truy cập(GET,PUT,POST...) (chúng cũng có các bản bất đồng bộ)
2. chúng thường trả về kiểu Void, Task, ActionResult. và có tham số truyền vào là các query trong url hoặc đến từ form.
- NameHandler: có nhiều handler phục vụ truy vần, handler trả về IActionResult thì có nhiều phương thức giúp tạo đối tượng trả về, tùy ngữ cảnh mà dùng.
có một số phương thức để tạo IA:
1. - Challenge - 401 - trả về khi xác thực không thành công
2. - Content - 200 - thiết lập nội dung trả về trực tiếp
3. - File - 200 - trả về nội dung file
4. - Forbib - 403 - cấm truy cập
5. - LocalRedirect... - 302,301,307,308 - chuyển hướng
6. - NotFound - 404 - không thấy
7. - Page - 200 - trả về nội dung trang Razor
8. - Partial - 200 - trả về nội dung từ một partial page
9 - RedirectToPage... - 301,302,307,308 - chuyển hướng
- Tác Dụng: Identity được sử dụng để quản lý tài khoản người dùng trong ứng dụng. nó cung cấp các tính năng cần thiết để quản lý tài khoản user(tạo,sửa,xóa), vai trò, claim, đăng ký, đăng nhập...
claim là thông tin về User - diễn tả các thuộc tính của User nhằm sử dụng trong quá trình xác minh, xác thực. lưu các thông tin dạng key - value, thông thường là ID, email, username
- Authentication và Authorization: xác thực và ủy quyền
- IEmailSender: sử dụng dịch vụ này để gửi mail, ví dụ người dùng đăng ký thì gửi mail kích hoạt, hay gửi mail để xác thực. ta cần xây dựng một lớp từ giao diện này sau đó đăng ký vào hệ thống để identity cần thì gọi dịch vụ
- inject tên_dịch_vụ: inject dịch vụ vào tran Razor page. trong Controller, page,odel,view , razor page đều có thuộc tính User kiểu ClaimsPrincipal là mẩu tin về User của phiên làm việc , để kiểm tra có User đăng nhập gọi SignInManager.IsSignedIn(User). còn để lấy tên UserName của User của phiên làm việc UserManager.GetUserName(User)
- [ALLowAnonymous] để xác nhận người dùng không đăng nhập vẫn có thể truy cập trang.
để tạo mới một user dùng phương thức UserManager.CreateAsync(user,pasword) - nó trả về IdentityResult, nếu Succeeded bằng true thì thêm user thành công. còn UserManager.GenerateEmailConfirmationTokenAsync để phát sinh một token theo thông tin user
- các chức năng của identity cần phải có
- Register - login - logout :
- Lockout - reset password -
- login with google, facebook
-
- Chỗ nào cần chỉ ra là code C# thì viết ký hiệu @ và tiếp đến là những từ khóa dành cho Razor như: page, namespace, functions, inherits, model, section hoặc các từ khóa C# như case, do, default, for, foreach, if, else, lock, switch, try, catch, finally, using, while
- Để xuất ra ký tự HTML @ thì cần escape viết là @.
- Khối lệnh Razor Page:
{
// lệnh C#
}
khối lệnh không thực hiện render. trong khối lệnh có thể khai báo biến, thực hiện các logic và biểu thức. các thành phần html trong này sẽ tự dc nhận biết là html.
- Các chỉ thị directive:
1.@attribute, - để thêm thuộc tính mô tả vào lớp sinh ra bởi Razor
2.@funtions, - dùng để thêm trường, thuộc tính, phương thức vào lóp sinh ra bởi Razor
3.@implements và .@inherits - khai báo lớp sinh ra bởi Razor triển khai một giao diện nào đó, @ inherits để kế thừa
4.@model - xác định kiểu dữ liệu được truyền đến Razor Page trong thuộc tính model của lớp Razor
5.@namespace - khai báo namespace cho lớp sinh ra bởi Razor
6.@page - cho biết file.cshtml là một Razor page khác
7.@section - chỉ thị này kích hoạt khối view, page xuất HTML ở chỗ khác bằng .@RenderSection(ten_section),
8.@using... - khai báo namespace trong lớp sinh ra bởi Razor
Authorization
- Định nghĩa: là chức thực quyền theo role, để sử dụng ta dùng thuộc tính [Authorize], nó được áp dụng cho Controller, Action Controller, PageModel để chỉ thị cho phép các user được xác thực mới được quyền truy cập vào chúng
- khi áp dụng [Authorize] cho Controller thì nó sẽ áp dụng cho tất cả các action trong đó, còn với action thì sẽ từng action, với PageModel thì áp dụng cho tất các các handler. không áp dụng riêng từng handler
- [Authorize] có 2 loại, loại cơ bản không có tham số: sẽ cho phép chứng thực quyền với các user đã đăng nhập có thể truy cập. loại có tham số: cho phép chứng thực theo role với tham số ex: [Authorize(Roles ="Admin")] chỉ những user có role là Admin mới có thể truy cập. có thể dùng [AllowAnonymous] để bỏ qua kiểm tra quyền
- [Authorize(Roles/Policy="...")] or [Authorize("namePolicy")]
Thự hành tương tự với Form, Login,
- hãy nhớ các attribute/annotation cho dữ liệu như [Required], [Display()], [EmailAddress], [StringLength(min,Max)], [Range(min,max,ErroMessage)], [phone] để validation
-