郝 玉华

郝 玉华

1657897500

如何在 ASP.NET Core Web API 中使用 DynamoDB 实现 CRUD

在本文中,我们将学习如何在 ASP.NET Core Web API 中使用 DynamoDB 实现 CRUD。本文是我在博客上写的整个“使用 AWS 的无服务器应用程序”的一个组成部分。在之前的文章中,我们介绍了使用 .NET 6 运行时的 AWS Lamba等等。今天,我们将介绍 DynamoDB 的基础知识,通过 AWS 控制台创建表和分区键,使用 AWS DynamoDB Nuget 包,并从我们的 .NET 6 应用程序连接到表,执行基本的 CRUD 操作等等。

您可以在此处找到实现的完整源代码

关于 AWS DynamoDB

AWS Dynamo DB 是由 Amazon Web Services 提供的高度可用、完全托管的数据库服务。它是 NoSQL 数据库,这意味着它不是关系数据库。它也是整个 AWS 无服务器应用模型的重要和旗舰部分。由于它是可自动扩展的,它每秒可以处理数百万个请求并在其行中存储 TB 的数据。很有趣,对吧?数据检索发生的速度也非常令人印象深刻,延迟非常小。除此之外,它还与 AWS IAM 集成以提高安全性(就像所有其他 AWS 服务一样)。

作为符合 NoSQL 的数据库,它是一个键/值数据库。主键通常由 1 个或 2 个键组成。DynamoDB 表的其他属性(列)在内部称为属性。

另一个非常重要的功能是,Amazon 提供近 25 GB 的存储空间和每月多达 2 亿次读/写请求的免费套餐,如果您想开始 AWS 之旅,这已经绰绰有余了。如果您还没有,请在此处获取您的免费等级帐户 – https://aws.amazon.com/free/

CRUD 与 ASP.NET Core 中的 DynamoDB

在此处阅读有关 Dynamo DB 的更多信息 – https://aws.amazon.com/dynamodb/

我们将建造什么?

因此,我们将构建一个简单的 .NET 6 WEB API,它可以基于我们通过本地 AWS CLI 设置的某些配置连接到我们的 AWS DynamoDB,并对实体执行一些基本的 CRUD 操作。在此演示中,我们的实体将是 Student,具有 Id、Name、Class、Country 等属性,只是基本属性。而且,我们将编写代码来创建、获取单个学生、获取所有学生、删除和更新学生。

清楚了,让我们开始吧!

AWS 控制台 – Dynamo 数据库

我假设您已经有一个 AWS 帐户(最好是一个免费帐户,这对于我们的学习来说绰绰有余)。让我们使用 Amazon DynamoDB 进行一些动手练习以更好地了解它!

登录到您的 AWS 控制台,在顶部的服务搜索栏中搜索 DynamoDB,然后将其打开。

接下来,单击表或创建表。

图 2 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

通过控制台在 DynamoDB 中创建新表

如前所述,我们必须创建一个名为students的新表。点击“创建表”。

图 3 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

在这里,将表名设置为“ students ”,将分区键设置为“id”(数字)。因此,这将是“学生”表的主键。另请注意,通过使用排序键,我们可以进一步调整主键格式。这更像是一个复合 Primary,它是由 Partition Key 和 Sort Key 组合而成的。

目前,我们没有设置任何排序键。保持其他字段不变并创建表。

图 11 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

这就是一切。将您的表完全预置到 DynamoDB 可能需要几秒钟。完成后,您的表格状态将变为活动。

图 12 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

通过控制台将数据添加到 AWS DynamoDB

配置表后,让我们通过控制台向其中添加一些数据。单击表格并点击“探索表格项目”。

图 13 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

因此,您可以在此处查询该表中的数据(如果存在任何数据)。UI 对于处理数据似乎非常直观。点击“创建项目”。

图 7 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

现在,AWS DynamoDB 允许您以 JSON 格式定义数据或将数据添加为表单字段。单击 JSON 选项卡以切换到以下视图。在这里,我添加了 Id、First Name、Last Name、Class 和 Country 等属性。

图 14 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

您可以切换回表单视图以获得以下外观。不过我更喜欢使用 JSON 视图。

图 15 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

输入值并单击创建后,AWS DynamoDB 会将项目插入到学生表中,如下所示。

图 16 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

这就是 DynamoDB 界面的工作原理。现在让我们编写一些代码。

入门 - 在 ASP.NET Core 中使用 DynamoDB 进行 CRUD

现在我们已经对 AWS DynamoDB 进行了基本的实践,让我们构建一个可以使用此 AWS 服务的 Web API。

打开您的 Visual Studio IDE(我正在使用 Visual Studio 2022 社区并安装了最新版本的 .NET SDK,即 6.0.2)。确保您的开发环境已设置好。

创建一个新的 ASP.NET Core Web API 项目并将其命名如下。

在 ASP.NET Core 中使用 DynamoDB 的图像 CRUD - 简化 AWS DynamoDB 入门

确保选择 .NET 6 并选中“使用控制器”复选框。此外,请确保您已启用 OpenAPI 支持,因为我们将通过 Swagger 测试我们的应用程序。

图 1 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

现在您已经完成了项目,让我们来谈谈配置 AWS 凭证。

AWS CLI 配置

因此,对于您在本地使用的每项 AWS 服务,您都需要一组凭证来访问 AWS 端点,对吗?如果您阅读过我之前关于 AWS(S3Lambda)的文章,我已经展示了一种将 AWS 凭证安全地存储到您的本地计算机上并避免在您的项目中包含这些详细信息的方法。

导航到 AWS IAM 以创建有权访问 Dynamo DB 的用户。要在 AWS IAM 上创建新用户,您可以按照我之前文章的这一部分进行操作。唯一的区别是,您必须选择与 Dynamo DB 相关的策略,而不是选择 AmazonS3FullAccess Policy。确保您具有所选策略中包含的读取、写入和删除权限。以下是与 DynamoDB 相关的策略。

图 19 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

您可以暂时选择AmazonDynamoDBFullAccess。但请始终记住只选择您的应用程序实际需要的内容。

创建用户后,将生成一组凭据。确保下载此生成的 CSV 以妥善保管。

接下来,要在本地计算机上配置这些凭据,请按照我上一篇文章的这一部分进行操作。

我将我的个人资料命名为 aws-admin。这就是我的样子。

图 18 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

请务必注意,您必须设置正确的 AWS 区域。例如,我将我的区域设置为印度孟买的 ap-south-1。导航 AWS 控制台时必须选择相同的区域。如果区域名称不匹配,很可能您将无法在 DDB 上看到您配置的表。

所以,现在我们已经配置了 AWS 凭证,让我们在项目中打开我们的 appsettings.json 并进行如下修改。

请注意,我的个人资料名称是 aws-admin,离我最近的 AWS 区域是 ap-south-1。相应地进行更改。

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AWS": {
"Profile": "aws-admin",
"Region": "ap-south-1"
}
}

完成后,AWS SDK 将能够从 appsettings.json 读取配置文件名称并提取配置的凭证详细信息,并在我们的应用程序运行时使用它。

创建学生模型

还记得我们在 AWS DynamoDB 上创建具有某些属性的表吗?我们也需要在我们的 .NET 项目上构建相同的模型类。

创建一个名为 Models 的新文件夹,并在其下创建一个名为 Student.cs 的类

using Amazon.DynamoDBv2.DataModel;
namespace DynamoStudentManager.Models
{
[DynamoDBTable("students")]
public class Student
{
[DynamoDBHashKey("id")]
public int? Id { get; set; }

[DynamoDBProperty("first_name")]
public string? FirstName { get; set; }

[DynamoDBProperty("last_name")]
public string? LastName { get; set; }

[DynamoDBProperty("class")]
public int Class { get; set; }

[DynamoDBProperty("country")]
public string? Country { get; set; }
}
}

请注意,我们将 DynamoDB 表命名为“students”,但我们的班级名称是“Student”(甚至可以是完全不同的名称)。因此,为了让 AWS 开发工具包了解这两者本质上是相同的模型,我们需要对其进行映射。

第 4 行:这里我们告诉 SDK“学生” DynamoDB 表必须映射到“学生”C# 类。

第 7 行:DynamoDBHashKey 定义表的主键。在这里,我们指出 Id 将是我们在 DDB 表中属性名称为“id”的主键。

第 10、13、16、19 行:我们定义了表的其他属性以及它们各自的 DDB 属性名称。

服务注册

设置好模型后,让我们在 ASP.NET Core 容器中注册 AWS 服务和配置。打开 Program.cs 和以下突出显示的行。

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var awsOptions = builder.Configuration.GetAWSOptions();
builder.Services.AddDefaultAWSOptions(awsOptions);
builder.Services.AddAWSService<IAmazonDynamoDB>();
builder.Services.AddScoped<IDynamoDBContext, DynamoDBContext>();
var app = builder.Build();

这实质上是从 appsettings.json 文件加载 AWS 配置,并将与 DynamoDB 相关的 AWS 服务注册到应用程序的容器中。

学生控制器

接下来,让我们编写 API 控制器,该控制器将在 ASP.NET Core 中使用 DynamoDB 实际执行与 CRUD 相关的操作。在 Controllers 文件夹下新建一个空白 API 控制器,名称为 StudentController。

namespace DynamoStudentManager.Controllers;

[Route("api/[controller]")]
[ApiController]
public class StudentsController : ControllerBase
{
private readonly IDynamoDBContext _context;
public StudentsController(IDynamoDBContext context)
{
_context = context;
}
[HttpGet("{studentId}")]
public async Task<IActionResult> GetById(int studentId)
{
var student = await _context.LoadAsync<Student>(studentId);
if (student == null) return NotFound();
return Ok(student);
}
[HttpGet]
public async Task<IActionResult> GetAllStudents()
{
var student = await _context.ScanAsync<Student>(default).GetRemainingAsync();
return Ok(student);
}
[HttpPost]
public async Task<IActionResult> CreateStudent(Student studentRequest)
{
var student = await _context.LoadAsync<Student>(studentRequest.Id);
if (student != null) return BadRequest($"Student with Id {studentRequest.Id} Already Exists");
await _context.SaveAsync(studentRequest);
return Ok(studentRequest);
}
[HttpDelete("{studentId}")]
public async Task<IActionResult> DeleteStudent(int studentId)
{
var student = await _context.LoadAsync<Student>(studentId);
if (student == null) return NotFound();
await _context.DeleteAsync(student);
return NoContent();
}
[HttpPut]
public async Task<IActionResult> UpdateStudent(Student studentRequest)
{
var student = await _context.LoadAsync<Student>(studentRequest.Id);
if (student == null) return NotFound();
await _context.SaveAsync(studentRequest);
return Ok(studentRequest);
}
}

第 7-11 行:在这里,我们将 IDynamoDBContext 注入到控制器的构造函数中。使用此界面,我们将能够访问 AWS DynamoDB。

第 13-18 行:通过 Id 获取项目(这里是我们的主键)。在第 15 行,我们加载 Student 表(它被映射到“students”)并将接收到的 StudentId 作为 HashKey 传递给 DynamoDB。这将返回我们映射的学生记录(如果存在)。

第 20-24 行:从 DDB 表中获取所有学生记录。

第 26-32 行:在这里,我们将一条 Student 记录传递给端点,然后端点尝试使用传递的详细信息在 DDB 中创建一条新记录。它首先检查传递的 ID 是否已存在于数据库中。如果找到它会返回错误请求异常。否则,将按预期创建学生记录。

第 34-40 行:我们将学生 ID 传递到此 Delete 端点。它首先检查是否存在具有传递的 ID 的此类记录。如果未找到,应用程序将引发 NotFound 异常并中断。否则,它将继续从我们的 DynamoDB 表中删除该项目。

第 42-48 行:在这里,我们尝试通过将整个属性传递给端点来更新学生记录。我们先检查studentId是否存在,然后继续更新item。就如此容易。

测试

连接好控制器后,让我们测试我们的应用程序。由于我们为我们的 API 启用了 OpenAPI 支持,因此 Swagger 可以开箱即用,无需任何额外配置。

运行应用程序并在 Web 浏览器上导航到 localhost:xxxx/swagger。这应该会打开 Swagger UI。

图 20 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

请记住,我们之前直接通过 AWS 控制台 DynamoDB 创建了一条新记录。我给它的 ID 为 1。让我们用这个 ID 查询 GET /api/students/1 端点。

图 21 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

就这样,正如我们预期的那样。接下来,让我们使用 POST 端点创建一个新学生。下面是我的 JSON 数据对于 ID 为 2 的新学生的样子。

{
"id": 2,
"firstName": "John",
"lastName": "Musk",
"class": 10,
"country": "USA"
}

您可以看到我们的 API 有一个 200 Ok 响应,这意味着数据已插入到我们的 DDB 表中。让我们检查一下我们的控制台。

图 22 在 ASP.NET Core 中使用 DynamoDB 的 CRUD - AWS DynamoDB Simplified 入门

好了,我们的新学生就创建好了。同样,我将剩余的 API 端点留给您进行测试。您可以在此处找到此实现的完整源代码。随意关注我的 Github 句柄。让我们暂时结束这篇文章。

在本系列的下一篇文章中,我们将了解 API 网关以及通过将 Lambda 附加到网关来创建无服务器 Rest API (HTTP API)。

概括

在本文中,我们了解了在 ASP.NET Core 中使用 DynamoDB 执行 CRUD、AWS DynamoDB 接口的一些实践、分区键、安装和配置 AWS CLI、构建可以与 DDB 通信并使用的 Web API数据等。

如果您觉得这篇文章很有趣,请与您的同事和开发人员圈子分享这篇文章。你可以在这里找到 项目的源代码 。谢谢!

来源:https ://codewithmukesh.com/blog/crud-with-dynamodb-in-aspnet-core/

#crud #dynamodb #aspdotnet #csharp #database #aws 

What is GEEK

Buddha Community

如何在 ASP.NET Core Web API 中使用 DynamoDB 实现 CRUD
Einar  Hintz

Einar Hintz

1602560783

jQuery Ajax CRUD in ASP.NET Core MVC with Modal Popup

In this article, we’ll discuss how to use jQuery Ajax for ASP.NET Core MVC CRUD Operations using Bootstrap Modal. With jQuery Ajax, we can make HTTP request to controller action methods without reloading the entire page, like a single page application.

To demonstrate CRUD operations – insert, update, delete and retrieve, the project will be dealing with details of a normal bank transaction. GitHub repository for this demo project : https://bit.ly/33KTJAu.

Sub-topics discussed :

  • Form design for insert and update operation.
  • Display forms in modal popup dialog.
  • Form post using jQuery Ajax.
  • Implement MVC CRUD operations with jQuery Ajax.
  • Loading spinner in .NET Core MVC.
  • Prevent direct access to MVC action method.

Create ASP.NET Core MVC Project

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N).

From new project window, Select Asp.Net Core Web Application_._

Image showing how to create ASP.NET Core Web API project in Visual Studio.

Once you provide the project name and location. Select Web Application(Model-View-Controller) and uncheck HTTPS Configuration. Above steps will create a brand new ASP.NET Core MVC project.

Showing project template selection for .NET Core MVC.

Setup a Database

Let’s create a database for this application using Entity Framework Core. For that we’ve to install corresponding NuGet Packages. Right click on project from solution explorer, select Manage NuGet Packages_,_ From browse tab, install following 3 packages.

Showing list of NuGet Packages for Entity Framework Core

Now let’s define DB model class file – /Models/TransactionModel.cs.

public class TransactionModel
{
    [Key]
    public int TransactionId { get; set; }

    [Column(TypeName ="nvarchar(12)")]
    [DisplayName("Account Number")]
    [Required(ErrorMessage ="This Field is required.")]
    [MaxLength(12,ErrorMessage ="Maximum 12 characters only")]
    public string AccountNumber { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Beneficiary Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BeneficiaryName { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Bank Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BankName { get; set; }

    [Column(TypeName ="nvarchar(11)")]
    [DisplayName("SWIFT Code")]
    [Required(ErrorMessage = "This Field is required.")]
    [MaxLength(11)]
    public string SWIFTCode { get; set; }

    [DisplayName("Amount")]
    [Required(ErrorMessage = "This Field is required.")]
    public int Amount { get; set; }

    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime Date { get; set; }
}

C#Copy

Here we’ve defined model properties for the transaction with proper validation. Now let’s define  DbContextclass for EF Core.

#asp.net core article #asp.net core #add loading spinner in asp.net core #asp.net core crud without reloading #asp.net core jquery ajax form #asp.net core modal dialog #asp.net core mvc crud using jquery ajax #asp.net core mvc with jquery and ajax #asp.net core popup window #bootstrap modal popup in asp.net core mvc. bootstrap modal popup in asp.net core #delete and viewall in asp.net core #jquery ajax - insert #jquery ajax form post #modal popup dialog in asp.net core #no direct access action method #update #validation in modal popup

Einar  Hintz

Einar Hintz

1602564619

MVC User Registration & Login with ASP.NET Core Identity

User registration and authentication are mandatory in any application when you have little concern about privacy. Hence all most all application development starts with an authentication module. In this article, we will discuss the quickest way to use **ASP.NET Core Identity for User Login and Registration **in a new or existing MVC application.

Sub-topics discussed :

  • How to add ASP.NET Core Identity to MVC application.
  • Customize ASP.NET Core Identity.
  • Identity.UI Design Customization.
  • Next step.

Background

ASP.NET Core Identity is an API, which provides both user interface(UI) and functions for user authentication, registration, authorization, etc. Modules/ APIs like this will really be helpful and fasten the development process. It comes with ASP.NET Core Framework and used in many applications before. Which makes the API more dependable and trustworthy.

ASP.NET Core MVC with user authentication can easily be accomplished using Identity.UI. While creating the MVC project, you just need to select Authentication as Individual User Accounts.

Showing how to create an MVC application with ASP.NET Core Identity API

The rest will be handled by ASP.NET Core Identity UI. It already contains razor view pages and backend codes for an authentication system. But that’s not what we want in most of the cases. we want to customize ASP.NET Core Identity as per our requirement. That’s what we do here.

Create an ASP.NET Core MVC Project

First of all, I will create a brand new ASP.NET Core MVC application without any authentication selected. We could add ASP.NET Core Identity later into the project.

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N). From new project window, select ASP.NET Core Web Application.

Create an ASP.NET Core Web application

Once you provide the project name and location. A new window will be opened as follows, Select _Web Application(Model-View-Controller), _uncheck _HTTPS Configuration _and DO NOT select any authentication method. Above steps will create a brand new ASP.NET Core MVC project.

Select Model View Controller templet under .NET Core

#asp.net core article #asp.net core #add asp.net core identity to existing project #asp.net core identity in mvc #asp.net core mvc login and registration #login and logout in asp.net core

Create Asp Net Web API for CRUD operation | CRUD Using Asp Net Api

#api #api 2 #restful api #asp.net api #asp.net core api

Asp.Net Core MVC CRUD with EF Core

Create Asp.Net Core MVC Project

In Visual Studio, Goto File > New > Project ( Ctrl + Shift + N). Then select Asp.Net Core Web Application.

In template wizard, Select Web Application( MVC ) template. Make sure to select latest Asp.Net Core Version from top dropdown. We don’t need to configure this application with HTTPS (Unchecked corresponding option from bottom).

Setup Database for EF Core

For this application development, we will use EF Core – Code First Approach. First of all, we have to install NuGet Package for EFCore. for that you can right click on project in solution explorer, click on Manage NuGet Packages. In Browse tab, search for Microsoft.EntityFrameworkCore. Install the package with same version as that of Asp.Net Core.

We will create the DBContext class inside Models folder. To demonstrate Asp.Net Core CRUD Operation, we will deal with employee details like Full Name, Employee Code,Position and Office Location. So I have named the DbContext as EmployeeContext.

Copy to Clipboard

public class Employee
{
    [Key]
    public int EmployeeId { get; set; }

    [Column(TypeName ="nvarchar(250)")]
    [Required(ErrorMessage ="This field is required.")]
    [DisplayName("Full Name")]
    public string FullName { get; set; }

    [Column(TypeName = "varchar(10)")]
    [DisplayName("Emp. Code")]
    public string EmpCode { get; set; }

    [Column(TypeName = "varchar(100)")]
    public string Position { get; set; }

    [Column(TypeName = "varchar(100)")]
    [DisplayName("Office Location")]
    public string OfficeLocation { get; set; }
}

Inside the class, we have a DbSet property for Employees Collection of the type Employee class. So we have to define the class with required properties as follows.

#asp.net core #asp.net core article #asp.net core 2.2 #asp.net core crud

Authorization in asp.net core

#Asp.net core #Asp.net core mvc #Core #Asp.net core tutorials #Asp.net core with entity framework