Asp net core web api dengan database mysql

Pada artikel ini, kami akan membuat formulir manajemen tugas MVC. NET Inti 2. 2. Kami juga akan menunjukkan cara mengintegrasikan dengan database MySQL dari MVC, dan cara menggunakan Twilio untuk mengirim pesan SMS ke aplikasi Anda yang akan menambahkan tugas baru ke daftar Anda

NET Core dan MySQL adalah teknologi gratis dan sumber terbuka. ASP baru. NET Core dapat berjalan di Linux dan di Linux Containers, dan MySQL adalah salah satu database termudah untuk memulai. Ini membuat kombinasi ASP. NET Core dan MySQL merupakan kombinasi yang cukup menarik. Mari kita lihat apa yang Anda perlukan untuk memulai

Prasyarat

  • Akun Pengembang Okta Gratis
  • MySQL diinstal dan perlu mengetahui host Anda dan mengakses kredensial untuk sementara waktu
  • Akun Twilio

Perancah ASP Anda. Aplikasi .NET Core MVC

Mari kita mulai dengan beberapa scaffolding dan dependensi dasar. Untuk memulai, buka Visual Studio dan buat ASP baru. .NET Core Web Application bernama

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 dan pilih template Web Application (Model-View-Controller), dikonfigurasi untuk ASP. NET Inti 2. 2. Klik ikon Mulai Debugging atau tekan F5 untuk memulai aplikasi dan lacak URL untuk digunakan sebentar lagi

Instal MySQL. Paket Nuget Data

Instal MySql. Paket Data Nuget diterbitkan oleh Oracle. Artikel ini menggunakan versi 8. 0. 17 - versi terbaru pada saat publikasi

Instal Okta untuk Manajemen Pengguna di ASP Anda. Aplikasi .NET

Instal Okta. Paket Sdk NuGet diterbitkan oleh Okta, Inc. Artikel ini menggunakan versi 1. 2. 2 - versi terbaru pada saat publikasi

Pasang juga Okta. Paket NuGet AspNetCore diterbitkan oleh Okta, Inc. Artikel ini menggunakan versi 1. 2. 0 - versi terbaru pada saat publikasi

Kami akan menggunakan manajemen Single Sign On (SSO) Okta untuk aplikasi MVC Anda. Ini akan memungkinkan Anda untuk membatasi akses ke aplikasi Anda hanya untuk pengguna yang Anda beri akses

Jika Anda belum memilikinya, buat akun pengembang Okta gratis. Okta adalah layanan pengembang yang menyimpan akun pengguna dengan aman dan memudahkan penambahan fungsi manajemen pengguna umum. Setelah Anda memiliki akun Okta, masuk ke dasbor Anda

Masuk dan pilih Aplikasi dari menu utama, lalu pilih Tambah Aplikasi

Pilih Web sebagai jenis aplikasi Anda

Asp net core web api dengan database mysql

Selanjutnya, Anda memerlukan URL yang Anda simpan sebelumnya ke aplikasi MVC yang berjalan secara lokal. Konfigurasikan setelan berikut untuk aplikasi baru Anda dengan mengganti “{yourLocalUrl}” dengan URL lokal Anda yang sebenarnya (mis. 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 dasar.
    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
  • Login pengalihan URI.
    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
  • Mulai login URI.
    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
  • Izinkan jenis hibah
    • Kode Otorisasi
    • Tersirat (Hibrida)

Setelah Anda menyimpan pengaturan Anda, klik Edit oleh Pengaturan Umum, lalu centang dua kotak centang berikut seperti yang ditunjukkan pada gambar di bawah

Asp net core web api dengan database mysql

Setelah aplikasi baru Anda dibuat, gulir ke bawah dan salin ID Klien dan rahasia Klien Anda. Anda akan membutuhkannya nanti saat mengkodekan Okta ke dalam aplikasi MVC Anda

Setup Database MySQL Anda

Sebelum kita menulis aplikasi kita untuk mengakses database kita, kita perlu membuat database kita berdiri dan berjalan. Untuk melakukannya, kami akan terhubung ke server MySQL kami dan menjalankan beberapa skrip. Artikel ini menggunakan MySQL Workbench untuk terhubung ke server database kami, tetapi MySQL IDE apa pun bisa digunakan

Buka MySQL Workbench dan buka

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. Masukkan nama host untuk server database Anda dan kredensial database Anda. Setelah terhubung, jalankan skrip berikut untuk membuat database
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 baru Anda

CREATE DATABASE IF NOT EXISTS TextTasks;

Selanjutnya, Anda harus menyiapkan tabel untuk menyimpan tugas Anda. Di jendela kueri, jalankan skrip berikut untuk membuat tabel

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 yang akan menampung semua tugas dalam daftar tugas kita dan membuat tiga tugas untuk diuji

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'));

Tambahkan Kode untuk Terhubung dengan MySQL dari ASP. BERSIH

Sekarang mari lompat ke kode. Klik kanan pada proyek dan tambahkan kelas baru bernama

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. Kelas ini adalah pembungkus untuk
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 dependensi yang akan kita gunakan untuk mengkueri database 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();
    }
  }
}

Selanjutnya, tambahkan baris kode berikut ke bagian bawah metode

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 dari file
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. Ganti server, nama pengguna, dan kata sandi dengan instance MySQL Anda sendiri

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

Ketergantungan basis data Anda sekarang telah diterapkan sehingga turunan dari kelas

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 akan dihasilkan, menggunakan kode di atas, setiap kali konstruktor pengontrol menerima tipe
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 sebagai parameter

Membangun ASP. Model Inti NET

Kami akan menggunakan dua jenis berikut untuk meneruskan data tentang entitas kami di antara lapisan aplikasi baru Anda. Tambahkan kelas baru ke folder

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
_1 bernama
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
2. Rekatkan kode berikut ke kelas baru Anda

using System;

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

Buat kelas baru lainnya di folder

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
_1 bernama
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
4 dan rekatkan kode berikut ke kelas baru Anda

using System;

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

Tambahkan Pengontrol ke ASP Anda. Aplikasi Inti .NET

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
_5 akan menangani pembuatan rekaman baru, serta memperbarui rekaman yang ada untuk menandainya sebagai lengkap, tidak lengkap, atau diarsipkan

Tambahkan kelas baru bernama

//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
_5 ke folder
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
7. Tempel kode di bawah ini ke kelas baru Anda. Seperti yang Anda lihat, parameter pertama konstruktor adalah tipe
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. Ini adalah kode yang akan menerima turunan dari tipe
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 yang kami buat dalam metode
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 dari
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;
    }
  }
}

Buat Pengontrol Rumah dan Halaman

Selanjutnya, ubah

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
_2 untuk meneruskan
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
3 ke tampilan. Untuk memulai, tambahkan pernyataan using berikut

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

Kemudian, tambahkan konstruktor berikut yang mendeklarasikan

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 sebagai dependensi dan menyimpannya untuk penggunaan di masa mendatang

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

Tambahkan metode privat berikut untuk membantu memuat daftar tugas dari database

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;
}

Ubah metode

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
_5 untuk meneruskan data ke tampilan

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

Terakhir, ubah tampilan untuk menampilkan data dalam formulir kita. Buka

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
_6 dan rekatkan kode berikut ke dalam file

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

Tambahkan Fungsionalitas SMS ke ASP Anda. Aplikasi .NET dengan Twilio

Saat Anda membuat akun Twilio, itu memandu Anda melalui proses penyiapan nomor telepon pertama Anda. Jika saat diminta Anda memilih bahwa Anda ingin mengirim dan menerima pesan SMS dengan nomor telepon Anda, itu dapat digunakan dalam artikel ini. Jika tidak, Anda harus menambahkan nomor telepon baru

Setelah nomor telepon baru Anda diatur, buka menu Semua Layanan dan pilih Nomor Telepon. Klik pada nomor telepon yang baru saja Anda buat dalam daftar

Sekarang setelah kami melihat detail untuk nomor telepon baru ini, kami ingin mengubah setelan webhook saat ada pesan masuk. Ubah tindakan ke

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
_7 dan kemudian kita akan menyetel URL webhook ke tindakan
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
8 dari pengontrol
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. Anda ingin menggunakan URL publik untuk aplikasi MVC Anda sehingga Twilio dapat mengaksesnya (ganti "{yourPublicUrl}" dengan URL publik Anda yang sebenarnya)

Webhook saat pesan masuk.

using System;

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

Asp net core web api dengan database mysql

Uji ASP. NET Secara Lokal dengan Postman

Jika Anda ingin menguji solusi secara lokal dengan cepat (tanpa memanggil webhook Anda melalui Twilio), Anda dapat melakukannya melalui Postman

Persiapkan permintaan tukang pos berikut (ganti “{yourLocalUrl}” dengan URL Anda yang sebenarnya)

[POST]

using System;

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

Tambahkan parameter berikut.

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

Klik Kirim untuk menguji layanan Anda. "Halo Dunia. ” mewakili salinan yang dikirim melalui SMS ke sistem. Layanan akan merespons dengan "OK" atau "Maaf. Saya tidak mengerti. Tanggapan itu adalah pesan yang akan diterima kembali oleh pengirim teks asli "Halo dunia".

Tambahkan Otentikasi ke ASP Anda. Aplikasi .NET Core MVC

Aplikasi Anda saat ini berfungsi penuh tanpa kode otentikasi Okta. Untuk memulai, tambahkan pernyataan using berikut ke bagian atas kelas

using System;

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

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

Selanjutnya tambahkan yang berikut ke bagian atas metode

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 dari kelas
using System;

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

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

Kemudian tambahkan yang berikut ke bagian atas metode ________23______7 dari kelas

using System;

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

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

Tambahkan pernyataan using berikut ke

using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
_2 dan
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
5. Ini membuatnya agar kita dapat menggunakan singkatan atribut ________31______1 - daripada menggunakan
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

Maka Anda hanya perlu menambahkan atribut

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 ke
using System;

namespace TextTasks.Models
{
  public class Task
  {
    public int TaskId { get; set; }
    public string Text { get; set; }
    public DateTime? Completed { get; set; }
  }
}
2 dan
//MySql
services.AddTransient<MySqlDatabase>(_ => new MySqlDatabase("server=YOUR-MYSQL-ENDPOINT; database=texttasks; uid=YOUR-USER-NAME; pwd=YOUR-PASSWORD;"));
5 Anda. Ini akan terletak di baris tepat di atas deklarasi kelas seperti yang ditunjukkan untuk
using System;

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

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

Sekarang semua halaman Anda aman dan Anda akan dipaksa masuk untuk melihat aplikasi Anda. Anda dapat mengizinkan akses untuk pengguna baru dengan menambahkan mereka sebagai pengguna ke akun Okta Anda. Aplikasi baru Anda berada di titik awal yang sangat mendasar yang dapat terus Anda tambahkan jika Anda mau. Misalnya Anda mungkin ingin menambahkan kemampuan untuk menambah dan mengedit tugas dari halaman web

Pelajari Lebih Lanjut Tentang Bekerja dengan. NET Core dan MySQL

Anda dapat menemukan kode sumber lengkap di GitHub di sini. Gagal lebih awal. Tetap sederhana. Tulis kode bersih. Refaktor, refaktor, refaktor. Tes tes tes. Bersenang-senang membuat kode

Untuk contoh lain menggunakan. NET Core, MySQL, dan Okta SSO periksa tautan berikut

  • Gunakan Spring Boot dan MySQL untuk Melampaui Otentikasi
  • Bangun Aplikasi CRUD dengan ASP. NET Inti 2. 2 dan SQLServer
  • Bangun Aplikasi CRUD Sederhana dengan ASP. .NET Core dan Vue

Seperti biasa, tinggalkan komentar di bawah dan jangan lupa untuk mengikuti kami di Twitter dan berlangganan saluran YouTube kami

Bagaimana menghubungkan database MySQL di. API Web inti .NET?

Cara Menghubungkan ke MySQL dari. .
Instal MySqlConnector. Pertama, instal paket MySqlConnector NuGet. .
Tali Sambungan. String koneksi tipikal untuk MySQL adalah. Server=YOURSERVER;User ID=YOURUSERID;Password=YOURPASSWORD;Database=YOURDATABASE. .
Konfigurasi Layanan (ASP. inti bersih).
Buka dan Gunakan Koneksi

Bisakah saya menggunakan MySQL dengan inti ASP NET?

NET Core dan MySQL adalah teknologi sumber terbuka dan gratis. ASP baru. NET Core dapat berjalan di Linux dan di Linux Containers, dan MySQL adalah salah satu database termudah untuk memulai . Ini membuat kombinasi ASP. NET Core dan MySQL merupakan kombinasi yang cukup menarik.

Bagaimana cara memasukkan data ke dalam database menggunakan Web API di asp net Core?

Memasukkan ASP. NET Membentuk Data Ke Dalam Database Menggunakan Web API .
Langkah 1 Buat Tabel dan Prosedur Tersimpan. .
Langkah 2 Buat Aplikasi Web. .
Langkah 3 Buat Kelas Properti. .
Langkah 4 Tambahkan Kelas Pengontrol API Web. .
Langkah 5 Buat Kelas Repositori. .
Langkah 6 Buat metode Posting
Langkah 7 Konfigurasi ASP. Perutean API Web Bersih. .
Langkah 8 Panggil metode Daftar

Bagaimana cara menghubungkan API ke database MySQL?

Integrasikan Data. Muat data dari REST API ke MySQL dengan memberikan kredensial database MySQL Anda, seperti nama pengguna resmi, kata sandi, informasi tentang IP host Anda, dan nilai nomor port. You will also need to provide a name for your database and a unique name for this destination.