C# Core 创建第一个API 项目

1. 安装VS 2019,SQL Server 2019(Optional)

2. 打开VS,选择新建 ASP.NET Core Web Application 项目

C# Core 创建第一个API 项目_第1张图片

3. 填写项目名称,解决方案名称,修改存放路径等。

4.选择.NET Core 的版本,我们默认选择 3.1,选择 API。

 C# Core 创建第一个API 项目_第2张图片

这是创建后默认的目录结构

C# Core 创建第一个API 项目_第3张图片

5.Core 3.1 自带一个名为weatherforecast的api,创建后,我们可以直接运行看看效果,如下:

6. 使用NuGet添加Entity framework core 。 Tools --> NuGet Manager Packager-->Manage NuGet Packages for Solution.

C# Core 创建第一个API 项目_第4张图片

Browse --> Search Microsoft.EntityFrameworkCore.SqlServer--> 勾选项目-->install.

Browse --> Search Microsoft.EntityFrameworkCore.Tools--> 勾选项目-->install.

安装成功后,可以在项目的dependencies 里面查看

C# Core 创建第一个API 项目_第5张图片

7. 在 NuGet Packager Console 里面使用 Scaffold-DbContext 命令创建数据库上下文。

C# Core 创建第一个API 项目_第6张图片

成功以后,会在Models 文件夹中生成Model和DB-Context

C# Core 创建第一个API 项目_第7张图片

打开DB-Context 文件,里面有一个warning,提示建议把数据库连接字符串移出DB-Context。我们把连接字符串放到Stupup.cs文件里。

C# Core 创建第一个API 项目_第8张图片

C# Core 创建第一个API 项目_第9张图片

8. 创建Controller 

  自动创建

右键Controller, 选择Add,选择 New Scaffolded Item

 C# Core 创建第一个API 项目_第10张图片

选择 API Controller Wtih actions,using Entity Framework

C# Core 创建第一个API 项目_第11张图片

选择Model 和DB-Context

C# Core 创建第一个API 项目_第12张图片

在Controller 文件夹里就会生成一个UsersController的 CS文件。里面有对Table Users 的CRUD 操作的方法。

C# Core 创建第一个API 项目_第13张图片

运行项目,可以查看到结果。自此简单的API就创建完成了。

 

手动创建

右键 Controller, Add --> Controller-->Empty Controller

C# Core 创建第一个API 项目_第14张图片

C# Core 创建第一个API 项目_第15张图片

填写Controller name,必须于Entity的name相同。

编写代码如下:

C# Core 创建第一个API 项目_第16张图片

运行结果如下:

C# Core 创建第一个API 项目_第17张图片

9.   postman  测试API

 

https://localhost:44317/api/TODOITEM/3  3--FromRout

Parms --FromQuery

Headers --FromHeader

Body -- FromBody

如果想传JSON 格式的数据(对象)给API, Header 里面添加请求头:“Content-Type"为"application/json”

C# Core 创建第一个API 项目_第18张图片

"Body"里面,选择"raw",手动输入json格式参数即可。

C# Core 创建第一个API 项目_第19张图片

返回结果如下:

C# Core 创建第一个API 项目_第20张图片

10. 截至到目前为止,我们已经完成的API抽象出模型,可以参考如下。 

C# Core 创建第一个API 项目_第21张图片

下面我们将完成Repository Patten 。至于Ropository Patten 的好处嘛,毕竟多封装了一层,在某种程度上讲起到了数据隔离的作用。对于Controller而言,是处理逻辑的, 不应该直接操纵数据。同时也为data cashing的实现提供了一种可能。

C# Core 创建第一个API 项目_第22张图片

11. Repository Patten

12. 创建一个名为DataRepository的文件夹。

  在文件夹里创建一个IUsersRepository的接口。

C# Core 创建第一个API 项目_第23张图片

创建 UsersRepository实现上面创建的接口。

  C# Core 创建第一个API 项目_第24张图片

修改代码,主要是把Controller 里面的代码移植出来。

UerRepository.cs:

 public class UsersRepository : IUsersRepository
    {
        private NPT_DataHub_DEVContext _context;

        public UsersRepository(NPT_DataHub_DEVContext context)
        {
            _context = context;
        }
        public async Task Add(User user)
        {
            await  _context.User.AddAsync(user);
            await  _context.SaveChangesAsync();

            return user;
        }

        public bool Exist(int UserId)
        {
            return _context.User.Any(user => user.UserId == UserId);
        }

        public async Task Find(int UserId)
        {
            return await _context.User.FindAsync(UserId);
           
        }

        public IEnumerable GetAll()
        {
            return _context.User;
        }

        public async Task Remove(int UserId)
        {
            var user = await _context.User.FindAsync(UserId);
        
            _context.User.Remove(user);
            await _context.SaveChangesAsync();

            return user;
            
        }

        public async Task Update(User user)
        {
            _context.User.Update(user);
            await _context.SaveChangesAsync();
            return user;
           
        }
    }

UsersController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using NPT_API_Test.Models;
using NPT_API_Test.DataRepository;

namespace NPT_API_Test.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        
        private readonly IUsersRepository _userRepository;

        public UsersController( IUsersRepository usersRepository)
        {
           
            _userRepository = usersRepository;
        }

        // GET: api/Users
        [HttpGet]
        public ActionResult> GetUser()
        {
            return new ObjectResult(_userRepository.GetAll());
        }
        // GET: api/Users/5
        [HttpGet("{id}")]
        public async Task> GetUser(int id)
        {
            var user = await _userRepository.Find(id);

            if (user == null)
            {
                return NotFound();
            }

            return user;
        }

        // PUT: api/Users/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see https://aka.ms/RazorPagesCRUD.
        [HttpPut("{id}")]
        public async Task PutUser(int id, User user)
        {
            if (id != user.UserId)
            {
                return BadRequest();
            }

            try
            {
                await _userRepository.Update(user);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (! UserExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return NoContent();
        }

        // POST: api/Users
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see https://aka.ms/RazorPagesCRUD.
        [HttpPost]
        public async Task> PostUser(User user)
        {
            await  _userRepository.Add(user);
            return CreatedAtAction("GetUser", new { id = user.UserId }, user);
        }

        // DELETE: api/Users/5
        [HttpDelete("{id}")]
        public async Task> DeleteUser(int id)
        {
          
            await _userRepository.Remove(id);
            return Ok();
        }

        private bool UserExists(int id)
        {
            return _userRepository.Exist(id);
        }
    }
}

测试结果:

C# Core 创建第一个API 项目_第25张图片

 

 

 

 

 

你可能感兴趣的:(C#,c#)