April 05, 2017

Hi dotnet - Phần 2 - ASP.net

Trước hết xin lỗi mọi người vì từ Phần 1 tới giờ đã 5 tháng, mình mới có thời gian để viết phần tiếp theo này. Trong phần này mình sẽ giới thiệu về cách tạo một project ASP.net chạy trên .NET Core, tương tự phần trước mình không dùng template mà chỉ sử dụng những yêu cầu tối thiểu nhất để project hoạt động được. Sau đó sẽ bổ sung MVC và WebAPI vào project vào phần tiếp theo. Cũng xin nói trước luôn mình là Node Developer nên mình sẽ làm mọi thứ theo phong cách giống như khi mình làm với Node, đơn giản, vừa đủ và không bao gồm những thành phần thừa/không dùng đến. Bạn có thể theo dõi mã nguồn trên github (thư mục 2-ASP).

Đầu tiên chúng ta cần có một project .NET Core trống, bạn có thể sử dụng tiếp project trong Phần 1. Do Microsoft đã quyết định đơn giản hóa định dạng .csproj thay vì tiếp tục sử dụng project.json, do đó bạn nên đặt tên ten-project.csproj giống với thư mục chứa nó. Mã nguồn trên github mình đặt tên theo thứ tự 2-ASP do đó tên tập tin project sẽ là 2-ASP.csproj. Ngoài ra bạn cần thay thay đổi SDK sang Microsoft.NET.Sdk.Web và phần bỏ đi OutputType exe để dotnet xuất ra DLL.

Trong project .NET bạn sử dụng lệnh dotnet add package [ten-package] để bổ sung package vào project tương tự như npm install –save của Node. Để có thể có thể chạy được project ASP Hello world bạn cần có package Microsoft.AspNetCore:

dotnet add package Microsoft.AspNetCore

Sau đó chúng ta có tập tin project như sau, bạn thấy là package đã được thêm vào tập tin project, cũng tương tự như tập tin package.json của Node. Nhưng bạn sẽ không thấy các package do chúng nằm tập trung trong cache của hệ thống dùng chung chứ không tạo ra một loạt thư mục riêng như node_modules:

2-ASP.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
  </ItemGroup>
</Project>

Tiếp tục chỉnh sửa tập tin Program.cs:

Program.cs

using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;

namespace WebApplication
{
  public class Program
  {
    public static void Main(string[] args)
    {
      var host = new WebHostBuilder()
        .UseKestrel()
        .Configure(app =>
        {
            app.Run(async (context) => {
              await context.Response.WriteAsync("Hello world from ASP.net Core");
            });
        })
        .UseUrls("http://*:3000")
        .Build();

      host.Run();
    }
  }
}

Khác với ASP.net chuẩn, phiên bản .NET Core sử dụng một Web Server được tích hợp sẵn tên là Kestrel, tương tự với Node và thực tế dựa trên cùng một thư viện IO của Node tên là livuv. Nói chung lại là hiệu năng của Web Server này được đánh giá cao ngang ngửa hoặc hơn Node nhờ vào lợi thế ngôn ngữ biên dịch. Mã nguồn trên tạo một Host sử dụng Kestrel, chạy ở port 3000 và đơn giản trả về một đoạn text “Hello world from ASP.net Core”. Nhìn tổng quan thì di nhiên không đơn giản bằng Hello World của Node nhưng với mình dễ hiểu hơn rất nhiều so với một project ASP.net thông thường trước đây. Sử dụng các lệnh để tải các package và chạy project:

dotnet restore
dotnet run

Và chúng ta có kết quả như sau:

ASP.net Core Hello world

Trong phần tiếp theo (sẽ nhanh có thôi) mình sẽ bổ sung MVC, Web API cho project ASP.net Core và sau đó nữa là Entity Framework (EF) Core với MySQL hoặc SQLite.

Hẹn gặp lại phần tiếp theo :)