19 câu hỏi phỏng vấn Asp.net Core
1. Làm để để thiết lập Session trong Asp.net Core?
Middleware cho Session được cung cấp bởi gói Microsoft.AspNetCore.Session. Để sử dụng session trong ứng dụng Asp.net Core, chúng ta cần thêm gói này tới file .csproj và thêm Session Middleware tới Asp.net Core Request pipeline.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//
//
services.AddSession();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//
//
app.UseSession();
//
//
}
}
2. Startup class trong ASP.NET Core là gì?
Startup class là điểm vào của ứng dụng APS.NET Core. Mỗi ứng dụng .NET Core phải có class này. Nó không bắt buộc phải có tên class là “Startup”, tên class có thể là bất kỳ tên gì, chúng ta có thể cấu hình startup class trong Program class.
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<TestClass>();
}
3. Tag-helper trong Asp.net Core là gì?
Nó là một tính năng được cung cấp bởi Razor view-engine cho phép chúng ta viết mã server-side để tạo và hiển thị các phần tử HTML trong view (Razor). Tag-helper là các lớp C# thường được dùng để tạo view bằng cách thêm các phần tử HTML. Chức năng của tag-helper rất giống với HTML-helper của Asp.net MVC.
//HTML Helper
@Html.TextBoxFor(model => model.FirstName,
new { @class = "form-control", placeholder = "Enter Your First Name" })
//content with tag helper
<input asp-for="FirstName" placeholder="Enter Your First Name"
class="form-control" />
//Equivalent HTML
<input placeholder="Enter Your First Name" class="form-control"
id="FirstName" name="FirstName" value="" type="text">
4. Metapackage là gì?
.NET Core 2.0 đã giới thiệu Metapackage, nó bao gồm tất cả các package được hỗ trợ bởi mã ASP.NET với các dependency của chúng vào trong 1 package. Nó giúp chúng ta phát triển nhanh vì chúng ta không yêu cầu include các package ASP.NET Core riêng lẻ. Microsoft.AspNetCore.All một Metapackage được cung cấp bởi ASP.NET Core.
5. ASP.NET Core cung cấp các tính năng nào?
ASP.NET Core cung cấp các tính năng chính như sau:
- Hỗ trợ Dependency Injection.
- Hỗ trợ cho Logging framework và có thể được mở rộng.
- Giới thiệu web server mới: Kestrel, nó nhanh và hỗ trợ đa nền tảng. Vì vậy, một ứng dụng web có thể chạy mà không cần IIS, Apache và Nginx.
- Hỗ trợ nhiều cách Hosting.
- Hỗ trợ hướng module, vì vậy các developer cần import các module mình cần vào trong ứng dụng. Tuy nhiên, .NET Core framework cũng cung cấp Meta package trong các thư viện.
- Command-line hỗ trợ tao, build và chạy ứng dụng.
- Không có file web.config. Chúng ta có thể lưu trữ các thông tin cấu hình vào file appsettings.json.
- Không có file Global.asax. Chúng ta có thể đăng ký và sử dụng các services vào startup class.
- Hỗ trợ tốt cho lập trình bất đồng bộ.
- Hỗ trợ WebSocket và SignalR.
- Cung cấp bảo vệ chống CSRF ( Cross-Site Request Forgery )
6. Công dụng của hàm “Map” trong IApplicationBuilder trong việc thêm Middleware vào Asp.net Core Pipeline là gì?
Nó thường dùng để chia nhánh Pipeline. Nó phân nhánh Asp.net Core Pipeline dựa vào việc khớp đường dẫn Request. Nếu đường dẫn Request bắt đầu với đường dẫn đã cho, Middleware trên nhánh đó sẽ được thực thi.
public void Configure(IApplicationBuilder app)
{
app.Map("/path1", Middleware1);
app.Map("/path2", Middleware2);
}
7. Middleware là gì?
Middleware là thành phần của phần mềm đóng vai trò tác động vào request pipeline (luồng request) để xử lý chúng và tạo ra response phản hồi lại client. Mỗi một tiến trình middleware thao tác với các request nhận được từ middleware trước nó. Nó cũng có thể quyết định gọi middleware tiếp theo trong pipeline hoặc trả về response cho middleware ngay trước nó. (ngắt pipeline).
8. Làm sao chúng ta có thể thực hiện model-binding tự động trong Razor Pages?
Razor Pages cung cấp tùy chọn để liên kết thuộc tính một cách tự động khi truyền dữ liệu sử dụng thuộc tính BindProperty. Mặc định nó chỉ liên kết các thuộc tính với các method không phải GET. Chúng ta cần gán thuộc tính SupportsGet thành “true” để liên kết 1 thuộc tính với method GET.
public class Test1Model : PageModel
{
[BindProperty]
public string Name { get; set; }
}
9. Ứng dụng ASP.NET Core có thể làm việc với framework .NET 4.x full không?
Có, thông qua thư viện chuẩn .NET
10. Làm sao để disable tag-helper ở cấp phần tử?
Chúng ta có thể disable tag-helper ở cấp phần tử bằng cách sử dụng ký tự “!”. Ký tự này phải được dùng ở tag đóng và mở.
<!span asp-validation-for="phone" class="divPhone"></!span>
11. Hàm ConfigureServices trong startup class dùng để làm gì?
Đây là một hàm tùy chọn của startup class. Nó được dùng để cấu hình các sevice được sử dụng trong ứng dụng. Hàm này được gọi đầu tiên khi ứng dụng được request lần đầu. Sử dụng hàm này, chúng ta có thể thêm các service vào DI-container, như vậy các service sẽ có sẵn như 1 dependency trong constructor của controller.
12. Các file JSON nào có sẵn trong Asp.net Core?
- global.json
- launchsettings.json
- appsettings.json
- bundleconfig.json
- bower.json
- package.json
13. Hàm Configure trong startup class dùng để làm gì?
Nó định nghĩa cách mà ứng dụng sẽ hồi đáp tới mỗi HTTP request. Chúng ta có thể cấu hình Request Pipeline bằng cách cấu hình Middleware. Nó chấp nhận IApplicationBuilder như là 1 parameter và nó cũng có thêm 2 parameter tùy chọn: IHostingEnvironment và ILoggerFactory. Sử dụng hàm này, chúng ta có thể cấu hình Middleware có sẵn như Routing, authentication, session, … cũng như các Third-party Middleware.
14. Làm sao để thêm một Service Dependency vào Controller?
Có 3 bước đơn giản để thêm một custom Service Dependency vào một Controller.
Bước 1: Tạo service.
public interface IHelloWorldService
{
string SaysHello();
}
public class HelloWorldService: IHelloWorldService
{
public string SaysHello()
{
return "Hello ";
}
}
Bước 2: Thêm service này vào Service container ( bằng Singleton, hoặc Transient hoặc Scoped).
public void ConfigureServices(IServiceCollection services)
{
//
//
services.AddTransient<IHelloWorldService, HelloWorldService>();
//
//
}
Bước 3: Sử dụng service này trong Controller.
public class HomeController: Controller
{
IHelloWorldService _helloWorldService;
public HomeController(IHelloWorldService helloWorldService)
{
_helloWorldService = helloWorldService;
}
}
15. IApplicationBuilder.Use() và IApplicationBuilder.Run() khác nhau như thế nào?
Chúng ta có thể sử dụng cả hai phương thức vào trong phương thức Configure của startup class.
Cả hai thường được sử dụng để thêm Middleware Delegate tới Request Pipeline của ứng dụng.
Việc thêm Middleware bằng cách dùng IApplicationBuilder.Use có thể gọi Middleware tiếp theo trong Pipeline, trong khi đó việc dùng IApplicationBuilder.Run để thêm Middleware thì sẽ không bao giờ gọi được Middleware tiếp theo.
Sau khi gọi phương thức IApplicationBuilder.Run, hệ thống ngừng thêm Middleware trong Request Pipeline.
16. Razor Pages trong Asp.net Core là gì?
Đây là một tính năng mới được giới thiệu trong Asp.net Core 2.0. Nó tuân theo một mô hình phát triển tập trung như Asp.net Web forms. Nó hỗ trợ tất cả tính năng của Asp.net Core.
@page
<h1> Hello, Book Reader!</h1>
<h2> This is Razor Pages </h2>
Razor Pages bắt đầu với directive “@page”. Directive này xử lý các yêu cầu trực tiếp mà không phải thông qua Controller. Razor Pages có thể có file code-behind, nhưng không thật sự là file code-behind. Nó là lớp kế thừa từ lớp PageModel.
17. Asp.net core là gì?
ASP.NET Core không phải là một phiên bản nâng cấp của ASP.NET. ASP.NET Core hoàn toàn được tạo ra để làm việc với .NET Core framework.
Nó nhanh hơn, dễ cấu hình chi tiết hơn, theo hướng module, dễ mở rộng và hỗ trợ đa nền tảng. Nó có thể làm với cả .NET Core và .NET framework thông qua .NET standard framework.
ASP.NET Core là thích hợp nhất để phát triển các ứng dụng cloud-based như web, mobile, IoT.
18. Trình bày về routing trong Asp.net Core?
Routing là chức năng ánh xạ các request tới bộ xử lý định tuyến. Route có thể có nhiều giá trị ( được trích xuất ra từ URL) thường được dùng để xử lý request. Tất cả các Route được đăng ký khi ứng dụng bắt đầu. Asp.net Core hỗ trợ 2 loại Routing:
- Định tuyến thông thường
- Định tuyến thuộc tính (Attribute routing)
Routing sử dụng các Route trong việc ánh xạ các Request với bộ xử lý tuyến và Generate URL được dùng trong việc hồi đáp request. Hầu hết ứng dụng có 1 bộ tập hợp Route và bộ tập hợp này được dùng trong việc xử lý request. Phương thức RouteAsync thường được dùng để ánh xạ request (ứng với URL) có sẵn trong bộ tập hợp Route.
19. Những ưu điểm nào của ASP.NET Core so với ASP.NET ?
- Hỗ trợ đa nền tảng, có thể chạy được trên Windows, Linux, Mac.
- Không có dependency trong cài đặt framework bởi vì tất cả các dependency bắt buộc đều được gửi cùng ứng dụng.
- ASP.NET Core có thể xử lý nhiều request hơn APS.NET.
- Nhiều tùy chọn deloy web có sẵn trong ASP.NET Core.