.NET Core ต่อ Database (Console#2)

สร้างโปรเจ็กส์ Console

> dotnet new console -o ConsoleApp

เพิ่มไฟล์ .gitignore (optional)

*.swp
*.*~
project.lock.json
.DS_Store
*.pyc
nupkg/

# Visual Studio Code
.vscode

# Rider
.idea

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
[Oo]ut/
msbuild.log
msbuild.err
msbuild.wrn

# Visual Studio 2015
.vs/

รันโปรเจ็กส์ด้วยคำสั่ง dotnet run

> cd ConsoleApp
> dotnet run

ติดตั้ง System.Data.SqlClient

> dotnet add package System.Data.SqlClient --version 4.8.2

ติดตั้ง Microsoft.Extensions.Configuration

> dotnet add package Microsoft.Extensions.Configuration --version 5.0.0

ติดตั้ง Microsoft.Extensions.Configuration.Json

> dotnet add package Microsoft.Extensions.Configuration.Json --version 5.0.0

ติดตั้ง Microsoft.Extensions.Configuration.Binder

> dotnet add package Microsoft.Extensions.Configuration.Binder --version 5.0.0

สร้างไฟล์ appsettings.json

{
    "DbConfig": {
        "ServerName": "localhost",
        "DatabaseName": "myDatabase",
        "UserName": "myUsername",
        "Password": "myPassword"
    }
}

เพิ่มไฟล์ Model.Student.cs

using System;

namespace ConsoleApp.Model
{
    public class Student
    {
        public int id { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
        public string email { get; set; }
        public string mobile { get; set; }
    }
}

เพิ่มไฟล์ Data.StudentDAL.cs

using ConsoleApp.Model;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace ConsoleApp.Data
{
    public class StudentDAL
    {
        private string _connectionString;

        public StudentDAL(IConfiguration config)
        {
            string _server = config.GetValue<string>("DbConfig:ServerName");
            string _database = config.GetValue<string>("DbConfig:DatabaseName");
            string _username = config.GetValue<string>("DbConfig:UserName");
            string _password = config.GetValue<string>("DbConfig:Password");
            _connectionString = ($"Server={_server};Database={_database};User ID={_username};Password={_password};Trusted_Connection=False;MultipleActiveResultSets=true;");
        }
        public List<Student> GetList()
        {
            List<Student> students = new List<Student>();
            try
            {
                using (SqlConnection con = new SqlConnection(_connectionString))
                {
                    DataTable dt = new DataTable();
                    string sql = @"
SELECT * 
FROM Student
ORDER BY id";

                    SqlDataAdapter da = new SqlDataAdapter(sql, con);
                    da.Fill(dt);

                    foreach (DataRow row in dt.Rows)
                    {
                        Student std = new Student();
                        std.id = Convert.ToInt32(row["id"]);
                        std.firstname = row["Firstname"] as string;
                        std.lastname = row["Lastname"] as string;
                        std.email = row["Email"] as string;
                        std.mobile = row["mobile"] as string;
                        students.Add(std);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return students;
        }
    }
}

แก้ไขไฟล์ Program.cs

using ConsoleApp.Data;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
using System.Text.Json;

namespace ConsoleApp
{
    class Program
    {
        private static IConfiguration _iconfiguration;
        static void Main(string[] args)
        {
            GetAppSettingsFile();

            var studentDAL = new StudentDAL(_iconfiguration);
            var students = studentDAL.GetList();
            students.ForEach(item =>
            {
                string jsonString = JsonSerializer.Serialize(item);
                Console.WriteLine(jsonString);
            });
        }

        static void GetAppSettingsFile()
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            _iconfiguration = builder.Build();
        }
    }
}

การ Get Client IP Address บน ASP.NET Core 3

สร้างโปรเจ็กส์ทดสอบแบบ WebApplication แล้วเลือก API ตั้งชื่อ WebApi

ทำการ inject HttpContextAccessor ในไฟล์ Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace WebApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

เพิ่ม API Controller ชื่อ ValuesController.cs

ประกาศตัวแปร httpContextAccessor และกำหนดค่าให้ตัวแปรใน Constructor

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

namespace WebApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly IHttpContextAccessor httpContextAccessor;

        public ValuesController(IHttpContextAccessor httpContextAccessor)
        {
            this.httpContextAccessor = httpContextAccessor;
        }

        // GET: api/<ValuesController>
        [HttpGet]
        public IEnumerable<string> Get()
        {
            string clientIpAddress = this.httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
            return new string[] { "clientIpAddress ", clientIpAddress };
        }
    }
}

รันโปรแกรมแล้วลองเรียกไปที่ http://localhost:58691/api/values

จะได้

["clientIpAddress ","::1"]

ถ้าจะจัดเก็บค่า IP Address ลง database ก็กำหนด ขนาด field ไว้ที่ 45 characters

Link

Disable register page

ใช้วิธีนี้ได้กับโปรเจ็กส์แบบ webapi (โปรเจ็กส์ razor) แต่ยังใช้ไม่ได้กับ Blazor App ต้องรอถึง 5.0 release

  1. ติดตั้ง dotnet-aspnet-codegenerator
  2. เพิ่มเพจเกจ Web.CodeGeneration.Design ให้กับโปรเจ็กส์
  3. Scaffold Identity
  4. แก้ไขโค๊ด
Continue reading

โปรเจ็กส์ Web Application เรียกใช้ jQuery

1.อ้างถึง jQuery

ไฟล์ Pages|Shared|_Layout.cshtml

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebApp1</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/site.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
...

2.ทดลองใช้งาน เมื่อคลิกที่ <P> แล้วจะแสดง alert

ไฟล์ Pages|Index.cshtml

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>

    <p>Click on this paragraph.</p>
</div>

<script type="text/javascript">
    $(document).ready(function () {
        $("p").click(function () {
            alert("The paragraph was clicked.");
        });
    });
</script>

Link

สร้างโปรเจ็กส์ Web API ติดต่อ MySQL

  1. สร้างโปรเจ็กส์ด้วย Visual Studio 2019
  2. ไฟล์ต่างๆในโปรเจ็กส์
  3. เพิ่มคลาส Movie
  4. สร้างคอนโทรลเลอร์ MovieController
  5. ติดตั้ง Pomelo.EntityFrameworkCore.MySql
  6. สร้างตารางที่ MySQL
  7. ทดสอบ API
Continue reading

Install .NET Core SDK on Linux Ubuntu 18.04 – x64

Register Microsoft key and feed

Before installing .NET, you’ll need to register the Microsoft key, register the product repository, and install required dependencies. This only needs to be done once per machine.

$ wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb

Install the .NET SDK

Update the products available for installation, then install the .NET SDK.

$ sudo add-apt-repository universe
$ sudo apt-get install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-2.2

ตรวจสอบหลังการติดตั้ง

$ dotnet --version
2.2.402

Link