.Net Core开发学习(五) ——Web API应用

.Net Core开发学习(五) ——Web API应用


简介

Web API,即Web接口(处理请求并返回结果)。也许在之前的Web应用和Mvc等都有这样的功能,但Web API让我们把重心放在了处理请求上,而不是请求与视图。这样的设计有很高的灵活性和扩展性,并且可以兼容在很多不同的项目与系统之上。


创建Web API

创建项目
创建项目
项目结构
项目结构

运行结果

运行结果

配置数据库

打开:菜单栏 > NuGet 包管理器 > 包管理器控制台(PMC)

输入以下命令安装Sqlserver数据驱动

Install-Package Microsoft.EntityFrameworkCore.SqlServer

输入以下命令以支持内存数据库

Install-Package Microsoft.EntityFrameworkCore.InMemory

添加模型

新建类:Models > User.cs

结构如下

public class User
{
    public int ID { get; set; }
    
    public string Name { get; set; }
    
    public DateTime Birthday { get; set; }
}

新建数据上下文类:Data > WebAPIContext.cs

结构如下

public class WebAPIContext : DbContext
{
    public WebAPIContext(DbContextOptions<WebAPIContext> options) : base(options) { 
    
    }

    public DbSet<User> User { get; set; }
}

修改文件:Startup.cs > ConfigureServices()

添加一行,使用内存中数据库,数据库名为WebAPITest

services.AddDbContext<WebAPIContext>(options => options.UseInMemoryDatabase("WebAPITest"));

API控制器

新建API控制器:右键Controllers 文件夹 > 添加 > 控制器
新建API控制器
新建API控制器

选择模型(User) > 选择数据上下文(WebAPIContext) > 输入名称(UsersController)
新建API控制器

添加完成后,生成的代码如下

[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
    private readonly WebAPIContext _context;

    public UsersController(WebAPIContext context)
    {
        _context = context;
    }

    // GET: api/Users
    [HttpGet]
    public async Task<ActionResult<IEnumerable<User>>> GetUser()
    {
        return await _context.User.ToListAsync();
    }

    // GET: api/Users/5
    [HttpGet("{id}")]
    public async Task<ActionResult<User>> GetUser(int id)
    {
        var user = await _context.User.FindAsync(id);

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

        return user;
    }

    // PUT: api/Users/5
    // To protect from overposting attacks, enable the specific properties you want to bind to, for
    // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
    [HttpPut("{id}")]
    public async Task<IActionResult> PutUser(int id, User user)
    {
        if (id != user.ID)
        {
            return BadRequest();
        }

        _context.Entry(user).State = EntityState.Modified;

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!UserExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return NoContent();
    }

    // POST: api/Users
    // To protect from overposting attacks, enable the specific properties you want to bind to, for
    // more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
    [HttpPost]
    public async Task<ActionResult<User>> PostUser(User user)
    {
        _context.User.Add(user);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetUser", new { id = user.ID }, user);
    }

    // DELETE: api/Users/5
    [HttpDelete("{id}")]
    public async Task<ActionResult<User>> DeleteUser(int id)
    {
        var user = await _context.User.FindAsync(id);
        if (user == null)
        {
            return NotFound();
        }

        _context.User.Remove(user);
        await _context.SaveChangesAsync();

        return user;
    }

    private bool UserExists(int id)
    {
        return _context.User.Any(e => e.ID == id);
    }
}

[Route]:指定 Web API 路由。
[ApiController]:标记该控制器响应 Web API 请求。
NotFound():返回 HTTP 404状态码。
BadRequest():返回 HTTP 400状态码。
CreatedAtAction():返回 HTTP 201状态码。


增删改查

使用Postman测试一下,请求/api/Users

Postman测试

现在数据库是没有内容的,所以返回一个空数组,说明项目已经运行并配置成功了。

添加用户
添加用户
运行结果
运行结果

根据Id查询用户

根据Id查询用户

修改用户信息

修改用户信息
修改后查询结果

修改后查询结果

删除用户

删除用户
删除后查询结果

删除后查询结果

OK,一个简单的Web API应用就创建好啦。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值