Phần còn lại của lõi .net api mysql

Trong bài viết này, chúng ta sẽ xây dựng một biểu mẫu quản lý tác vụ MVC với. NET lõi 2. 2. Chúng tôi cũng sẽ trình bày cách tích hợp với cơ sở dữ liệu MySQL từ MVC và cách sử dụng Twilio để gửi tin nhắn SMS đến ứng dụng của bạn sẽ thêm tác vụ mới vào danh sách của bạn

NET Core và MySQL đều là công nghệ mã nguồn mở và miễn phí. ASP mới. NET Core có thể chạy trên Linux và trong Bộ chứa Linux và MySQL là một trong những cơ sở dữ liệu dễ dàng nhất để bắt đầu sử dụng. Điều này làm cho sự kết hợp của ASP. NET Core và MySQL một sự kết hợp khá hấp dẫn. Hãy xem những gì bạn cần để bắt đầu

điều kiện tiên quyết

  • Tài khoản nhà phát triển Okta miễn phí
  • MySQL đã cài đặt và sẽ cần biết thông tin đăng nhập máy chủ và quyền truy cập của bạn trong giây lát
  • Tài khoản Twilio

Giàn giáo ASP của bạn. Ứng dụng NET Core MVC

Hãy bắt đầu với một số giàn giáo và phụ thuộc cơ bản. Để bắt đầu, hãy mở Visual Studio và tạo một ASP mới. NET Core Web Application có tên là

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
7 và chọn mẫu Ứng dụng web (Model-View-Controller), được định cấu hình cho ASP. NET lõi 2. 2. Nhấp vào biểu tượng Bắt đầu gỡ lỗi hoặc nhấn F5 để khởi động ứng dụng và theo dõi URL để sử dụng trong giây lát

Cài đặt MySQL. Gói Nuget dữ liệu

Cài đặt MySql. Gói dữ liệu Nuget do Oracle xuất bản. Bài viết này sử dụng phiên bản 8. 0. 17 - phiên bản mới nhất tại thời điểm xuất bản

Cài đặt Okta để quản lý người dùng trong ASP của bạn. ứng dụng NET

Cài đặt Ota. Gói Sdk NuGet được xuất bản bởi Okta, Inc. Bài viết này sử dụng phiên bản 1. 2. 2 - phiên bản mới nhất tại thời điểm xuất bản

Cũng cài đặt Okta. Gói AspNetCore NuGet được xuất bản bởi Okta, Inc. Bài viết này sử dụng phiên bản 1. 2. 0 - phiên bản mới nhất tại thời điểm xuất bản

Chúng tôi sẽ sử dụng quản lý Đăng nhập một lần (SSO) của Okta cho ứng dụng MVC của bạn. Điều này sẽ cho phép bạn hạn chế quyền truy cập vào ứng dụng của mình chỉ đối với những người dùng mà bạn cấp quyền truy cập

Nếu bạn chưa có, hãy tạo tài khoản nhà phát triển Okta miễn phí. Okta là một dịch vụ dành cho nhà phát triển lưu trữ an toàn tài khoản người dùng và giúp đơn giản hóa việc thêm chức năng quản lý người dùng thông thường. Khi bạn có tài khoản Okta, hãy đăng nhập vào bảng điều khiển của bạn

Đăng nhập và chọn Ứng dụng từ menu chính, sau đó chọn Thêm ứng dụng

Chọn Web làm loại ứng dụng của bạn

Phần còn lại của lõi .net api mysql

Tiếp theo, bạn sẽ cần URL mà bạn đã lưu trước đó vào ứng dụng MVC đang chạy cục bộ của mình. Định cấu hình các cài đặt sau cho ứng dụng mới của bạn thay thế “{yourLocalUrl}” bằng URL cục bộ thực tế của bạn (e. g.

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
8)

  • URI cơ sở.
    USE TextTasks;
    
    CREATE TABLE IF NOT EXISTS Tasks (
      TaskId INT AUTO_INCREMENT,
      Text TEXT NOT NULL,
        Created DATE NOT NULL,
        Completed DATE,
        Archived DATE,
      PRIMARY KEY(TaskId)
    );
    
    INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
    INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
    INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
    
    9
  • URI chuyển hướng đăng nhập.
    using System;
    using MySql.Data.MySqlClient;
    
    namespace TextTasks
    {
      public class MySqlDatabase : IDisposable
      {
        public MySqlConnection Connection;
    
        public MySqlDatabase(string connectionString)
        {
          Connection = new MySqlConnection(connectionString);
          this.Connection.Open();
        }
    
        public void Dispose()
        {
          Connection.Close();
        }
      }
    }
    
    0
  • Bắt đầu URI đăng nhập.
    using System;
    using MySql.Data.MySqlClient;
    
    namespace TextTasks
    {
      public class MySqlDatabase : IDisposable
      {
        public MySqlConnection Connection;
    
        public MySqlDatabase(string connectionString)
        {
          Connection = new MySqlConnection(connectionString);
          this.Connection.Open();
        }
    
        public void Dispose()
        {
          Connection.Close();
        }
      }
    }
    
    0
  • Cho phép các loại trợ cấp
    • Mã ủy quyền
    • Tiềm ẩn (Kết hợp)

Sau khi bạn lưu cài đặt của mình, hãy nhấp vào Chỉnh sửa bằng Cài đặt chung, sau đó chọn hai hộp kiểm sau như minh họa trong ảnh chụp màn hình bên dưới

Phần còn lại của lõi .net api mysql

Sau khi ứng dụng mới của bạn được tạo, hãy cuộn xuống dưới cùng và sao chép ID khách hàng và Bí mật khách hàng của bạn. Bạn sẽ cần những thứ đó sau này khi mã hóa Okta vào ứng dụng MVC của bạn

Thiết lập cơ sở dữ liệu MySQL của bạn

Trước khi chúng tôi viết ứng dụng để truy cập cơ sở dữ liệu của mình, chúng tôi cần chuẩn bị và chạy cơ sở dữ liệu của mình. Để làm như vậy, chúng tôi sẽ kết nối với máy chủ MySQL của chúng tôi và chạy một số tập lệnh. Bài viết này sử dụng MySQL Workbench để kết nối với máy chủ cơ sở dữ liệu của chúng tôi, nhưng bất kỳ IDE MySQL nào cũng sẽ làm được

Mở MySQL Workbench và truy cập

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
2. Nhập tên máy chủ cho máy chủ cơ sở dữ liệu của bạn và thông tin đăng nhập cơ sở dữ liệu của bạn. Sau khi kết nối, hãy thực thi tập lệnh sau để tạo cơ sở dữ liệu
USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
7 mới của bạn

CREATE DATABASE IF NOT EXISTS TextTasks;

Tiếp theo, bạn sẽ cần thiết lập các bảng để lưu trữ các tác vụ của mình. Trong cửa sổ truy vấn, hãy thực thi tập lệnh sau để tạo bảng

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
4 chứa tất cả các tác vụ trong danh sách tác vụ của chúng ta và tạo ba tác vụ để kiểm tra

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));

Thêm mã để kết nối với MySQL từ ASP. NET

Bây giờ hãy chuyển sang mã. Nhấp chuột phải vào dự án và thêm một lớp mới có tên

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
5. Lớp này là một trình bao bọc cho phần phụ thuộc
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
6 mà chúng ta sẽ làm việc để truy vấn cơ sở dữ liệu MySQL

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}

Tiếp theo, thêm các dòng mã sau vào cuối phương thức

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
7 của tệp
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
8. Thay thế máy chủ, tên người dùng và mật khẩu bằng phiên bản MySQL của riêng bạn

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));

Phần phụ thuộc cơ sở dữ liệu của bạn hiện đã được triển khai để một thể hiện của lớp

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
5 sẽ được tạo, sử dụng mã ở trên, bất cứ khi nào hàm tạo của bộ điều khiển chấp nhận loại
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
5 làm tham số

Xây dựng ASP. NET Core Models

Chúng tôi sẽ sử dụng hai loại sau để truyền dữ liệu về các thực thể của chúng tôi giữa các lớp của ứng dụng mới của bạn. Thêm một lớp mới vào thư mục

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
1 có tên là
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
2. Dán đoạn mã sau vào lớp mới của bạn

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}

Tạo một lớp mới khác trong thư mục

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
1 có tên
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
4 và dán đoạn mã sau vào lớp mới của bạn

using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}

Thêm Bộ điều khiển vào ASP của bạn. ứng dụng NET Core

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
5 sẽ xử lý việc tạo các bản ghi mới, cũng như cập nhật các bản ghi hiện có để đánh dấu chúng là hoàn chỉnh, chưa hoàn chỉnh hoặc đã lưu trữ

Thêm một lớp mới tên là

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
5 vào thư mục
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
7. Dán mã dưới đây vào lớp mới của bạn. Như bạn có thể thấy, tham số đầu tiên của hàm tạo là loại
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
5. Đây là mã sẽ nhận thể hiện của loại
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
5 mà chúng tôi đã tạo trong phương thức
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
7 của
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
8

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using MySql.Data.MySqlClient;

using dto = TextTasks.Models;

namespace TextTasks.Controllers
{
  public class TasksController : Controller
  {
    private MySqlDatabase MySqlDatabase { get; set; }
    public TasksController(MySqlDatabase mySqlDatabase)
    {
      this.MySqlDatabase = mySqlDatabase;
    }

    [HttpPost]
    public void Complete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Incomplete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = NULL WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Archive(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Archived = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }

    [HttpPost]
    public string Sms()
    {
      var input = Request.Form["Body"];
      string response = null;

      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"INSERT INTO Tasks(Text,Created) VALUES (@Text,STR_TO_DATE(@Date, '%Y/%m/%d'));";
      cmd.Parameters.AddWithValue("@Text", input);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();

      if (recs == 1)
        response = "OK";
      else
        response = "Sorry! I didn't get that.";

      return response;
    }
  }
}

Xây dựng Bộ điều khiển Trang chủ và Trang

Tiếp theo, sửa đổi

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
2 để chuyển một
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
3 cho chế độ xem. Để bắt đầu, hãy thêm các câu lệnh sử dụng sau

using MySql.Data.MySqlClient;
using dto = TextTasks.Models;

Sau đó, thêm hàm tạo sau khai báo

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
5 làm phần phụ thuộc và lưu trữ nó để sử dụng trong tương lai

private MySqlDatabase MySqlDatabase { get; set; }
public HomeController(MySqlDatabase mySqlDatabase)
{
  this.MySqlDatabase = mySqlDatabase;
}

Thêm phương thức riêng tư sau để hỗ trợ tải danh sách tác vụ từ cơ sở dữ liệu

private async Task<List<dto.Task>> GetTasks()
{
  var ret = new List<dto.Task>();

  var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
  cmd.CommandText = @"SELECT TaskId, Text, Completed FROM Tasks WHERE Archived IS NULL";

  using (var reader = await cmd.ExecuteReaderAsync())
    while (await reader.ReadAsync())
    {
      var t = new dto.Task()
      {
        TaskId = reader.GetFieldValue<int>(0),
        Text = reader.GetFieldValue<string>(1)
      };
      if (!reader.IsDBNull(2))
        t.Completed = reader.GetFieldValue<DateTime>(2);

      ret.Add(t);
    }
  return ret;
}

Sửa đổi phương thức

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
5 để truyền dữ liệu cho dạng xem

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
0

Cuối cùng, sửa đổi chế độ xem để hiển thị dữ liệu trong biểu mẫu của chúng tôi. Mở

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
6 và dán đoạn mã sau vào tệp

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
1

Thêm chức năng SMS vào ASP của bạn. NET với Twilio

Khi bạn tạo tài khoản Twilio, tài khoản này sẽ hướng dẫn bạn quy trình thiết lập số điện thoại đầu tiên của mình. Nếu khi được nhắc bạn đã chọn rằng bạn muốn gửi và nhận tin nhắn SMS bằng số điện thoại của mình, thì bạn có thể sử dụng số này trong bài viết này. Nếu không, bạn sẽ cần thêm một số điện thoại mới

Khi số điện thoại mới của bạn được thiết lập, hãy chuyển đến menu Tất cả dịch vụ và chọn Số điện thoại. Bấm vào số điện thoại bạn vừa tạo trong danh sách

Bây giờ chúng tôi đang xem chi tiết cho số điện thoại mới này, chúng tôi muốn sửa đổi cài đặt webhook khi có tin nhắn đến. Thay đổi hành động thành

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
7 và sau đó chúng tôi sẽ đặt URL webhook thành hành động
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
8 của bộ điều khiển
using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
4. Bạn sẽ muốn sử dụng URL công khai cho ứng dụng MVC của mình để Twilio có thể truy cập nó (thay thế “{yourPublicUrl}” bằng URL công khai thực tế của bạn)

Webhook khi có tin nhắn đến.

using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
0

Phần còn lại của lõi .net api mysql

Kiểm tra ASP. NET cục bộ với Postman

Nếu bạn muốn thử nghiệm nhanh giải pháp của mình cục bộ (không cần gọi webhook qua Twilio), bạn có thể thực hiện qua Postman

Chuẩn bị yêu cầu Người đưa thư sau (thay thế “{yourLocalUrl}” bằng URL thực của bạn)

[POST]

using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
1

Thêm các thông số sau.

using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
2 =
using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
3

Nhấp vào Gửi để kiểm tra dịch vụ của bạn. "Chào thế giới. ” đại diện cho bản sao được nhắn tin vào hệ thống. Dịch vụ sẽ phản hồi bằng “OK” hoặc “Xin lỗi. tôi không hiểu. ” Phản hồi đó là thông điệp mà người gửi văn bản “Xin chào thế giới” ban đầu sẽ nhận lại

Thêm xác thực vào ASP của bạn. Ứng dụng NET Core MVC

Ứng dụng của bạn tại thời điểm này có đầy đủ chức năng trừ mã xác thực Okta. Để bắt đầu, hãy thêm các câu lệnh sử dụng sau vào đầu lớp

using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
4 của bạn

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
2

Tiếp theo, thêm phần sau vào đầu phương thức

using System;
using MySql.Data.MySqlClient;

namespace TextTasks
{
  public class MySqlDatabase : IDisposable
  {
    public MySqlConnection Connection;

    public MySqlDatabase(string connectionString)
    {
      Connection = new MySqlConnection(connectionString);
      this.Connection.Open();
    }

    public void Dispose()
    {
      Connection.Close();
    }
  }
}
7 của lớp
using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
4 của bạn

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
3

Sau đó, thêm phần sau vào đầu phương thức

using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
7 của lớp
using System;

namespace TextTasks.Models
{
  public class TaskIdentifier
  {
    public int TaskId { get; set; }
  }
}
4 của bạn

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
4

Thêm các câu lệnh sử dụng sau vào

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
2 và
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
5. Điều này giúp chúng ta có thể sử dụng rút gọn thuộc tính
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using MySql.Data.MySqlClient;

using dto = TextTasks.Models;

namespace TextTasks.Controllers
{
  public class TasksController : Controller
  {
    private MySqlDatabase MySqlDatabase { get; set; }
    public TasksController(MySqlDatabase mySqlDatabase)
    {
      this.MySqlDatabase = mySqlDatabase;
    }

    [HttpPost]
    public void Complete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Incomplete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = NULL WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Archive(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Archived = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }

    [HttpPost]
    public string Sms()
    {
      var input = Request.Form["Body"];
      string response = null;

      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"INSERT INTO Tasks(Text,Created) VALUES (@Text,STR_TO_DATE(@Date, '%Y/%m/%d'));";
      cmd.Parameters.AddWithValue("@Text", input);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();

      if (recs == 1)
        response = "OK";
      else
        response = "Sorry! I didn't get that.";

      return response;
    }
  }
}
1 - thay vì sử dụng
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using MySql.Data.MySqlClient;

using dto = TextTasks.Models;

namespace TextTasks.Controllers
{
  public class TasksController : Controller
  {
    private MySqlDatabase MySqlDatabase { get; set; }
    public TasksController(MySqlDatabase mySqlDatabase)
    {
      this.MySqlDatabase = mySqlDatabase;
    }

    [HttpPost]
    public void Complete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Incomplete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = NULL WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Archive(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Archived = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }

    [HttpPost]
    public string Sms()
    {
      var input = Request.Form["Body"];
      string response = null;

      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"INSERT INTO Tasks(Text,Created) VALUES (@Text,STR_TO_DATE(@Date, '%Y/%m/%d'));";
      cmd.Parameters.AddWithValue("@Text", input);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();

      if (recs == 1)
        response = "OK";
      else
        response = "Sorry! I didn't get that.";

      return response;
    }
  }
}
2

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
5

Sau đó, bạn chỉ cần thêm thuộc tính

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using MySql.Data.MySqlClient;

using dto = TextTasks.Models;

namespace TextTasks.Controllers
{
  public class TasksController : Controller
  {
    private MySqlDatabase MySqlDatabase { get; set; }
    public TasksController(MySqlDatabase mySqlDatabase)
    {
      this.MySqlDatabase = mySqlDatabase;
    }

    [HttpPost]
    public void Complete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Incomplete(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Completed = NULL WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);

      var recs = cmd.ExecuteNonQuery();
    }
    [HttpPost]
    public void Archive(dto.TaskIdentifier input)
    {
      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"UPDATE Tasks SET Archived = STR_TO_DATE(@Date, '%Y/%m/%d') WHERE TaskId = @TaskId;";
      cmd.Parameters.AddWithValue("@TaskId", input.TaskId);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();
    }

    [HttpPost]
    public string Sms()
    {
      var input = Request.Form["Body"];
      string response = null;

      var cmd = this.MySqlDatabase.Connection.CreateCommand() as MySqlCommand;
      cmd.CommandText = @"INSERT INTO Tasks(Text,Created) VALUES (@Text,STR_TO_DATE(@Date, '%Y/%m/%d'));";
      cmd.Parameters.AddWithValue("@Text", input);
      cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy/MM/dd"));

      var recs = cmd.ExecuteNonQuery();

      if (recs == 1)
        response = "OK";
      else
        response = "Sorry! I didn't get that.";

      return response;
    }
  }
}
1 vào
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
2 và
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
5 của mình. Điều này sẽ nằm trên dòng ngay phía trên khai báo lớp như được hiển thị cho
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
2 trong đoạn mã sau

USE TextTasks;

CREATE TABLE IF NOT EXISTS Tasks (
  TaskId INT AUTO_INCREMENT,
  Text TEXT NOT NULL,
    Created DATE NOT NULL,
    Completed DATE,
    Archived DATE,
  PRIMARY KEY(TaskId)
);

INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 1', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 2', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
INSERT INTO Tasks(Text,Created) VALUES ('Initial test task 3', STR_TO_DATE('2019/07/04', '%Y/%m/%d'));
6

Bây giờ tất cả các trang của bạn đều được bảo mật và bạn sẽ buộc phải đăng nhập để xem ứng dụng của mình. Bạn có thể cấp quyền truy cập cho người dùng mới bằng cách thêm họ làm người dùng vào tài khoản Okta của mình. Ứng dụng mới của bạn đang ở điểm bắt đầu rất cơ bản mà bạn có thể tiếp tục thêm vào nếu muốn. Ví dụ: bạn có thể muốn thêm khả năng thêm và chỉnh sửa tác vụ từ trang web

Tìm hiểu thêm về làm việc với. NET lõi và MySQL

Bạn có thể tìm mã nguồn hoàn chỉnh trên GitHub tại đây. Thất bại sớm. Giữ nó đơn giản. Viết mã sạch. Tái cấu trúc, tái cấu trúc, tái cấu trúc. Kiểm tra, kiểm tra, kiểm tra. Chúc các bạn code vui vẻ

Đối với các ví dụ khác sử dụng. NET Core, MySQL và Okta SSO, hãy xem các liên kết sau

  • Sử dụng Spring Boot và MySQL để vượt ra ngoài xác thực
  • Xây dựng ứng dụng CRUD với ASP. NET lõi 2. 2 và máy chủ SQL
  • Xây dựng ứng dụng CRUD đơn giản với ASP. NET Core và Vue

Như mọi khi, hãy để lại bình luận bên dưới và đừng quên theo dõi chúng tôi trên Twitter và đăng ký kênh YouTube của chúng tôi

Cách kết nối cơ sở dữ liệu MySQL trong. NET lõi Web API?

Cách kết nối với MySQL từ. .
Cài đặt MySqlConnector. Đầu tiên, cài đặt gói MySqlConnector NuGet. .
Chuỗi kết nối. Một chuỗi kết nối điển hình cho MySQL là. Máy chủ=YOURSERVER;User ID=YOURUSERID;Mật khẩu=YOURPASSWORD;Cơ sở dữ liệu=YOURDATABASE. .
Cấu hình dịch vụ (ASP. NET Core).
Mở và sử dụng kết nối

MySQL có hỗ trợ API REST không?

MySQL đã là tiêu chuẩn cho điều này trong nhiều thập kỷ. Một nhược điểm là cơ sở dữ liệu chỉ lưu trữ dữ liệu. Nếu bạn muốn làm điều gì đó với dữ liệu đó, API REST của MySQL có thể thực hiện được . Đây là những gì bạn cần biết để sử dụng MySQL REST API trong các dự án của mình.

Bạn có thể sử dụng MySQL với. NET lõi?

NET Core và MySQL đều là công nghệ mã nguồn mở và miễn phí. ASP mới. NET Core có thể chạy trên Linux và trong Bộ chứa Linux và MySQL là một trong những cơ sở dữ liệu dễ dàng nhất để bắt đầu sử dụng . Điều này làm cho sự kết hợp của ASP. NET Core và MySQL một sự kết hợp khá hấp dẫn.

Làm thế nào để kết nối. NET lõi API cho máy chủ SQL?

Đây là các bước chúng ta cần làm theo. .
Tạo dự án API Web trống
Chọn API Web trong cửa sổ chọn mẫu
Tạo bảng và Chèn dữ liệu vào bảng cơ sở dữ liệu
Thêm một dịch vụ web
Thêm một ADO. NET Entity Data Model
Tạo kết nối mới với máy chủ SQL
Tạo các thực thể từ Cơ sở dữ liệu
Thêm bộ điều khiển