.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 文件夹 > 添加 > 控制器
选择模型(User) > 选择数据上下文(WebAPIContext) > 输入名称(UsersController)
添加完成后,生成的代码如下
[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
现在数据库是没有内容的,所以返回一个空数组,说明项目已经运行并配置成功了。
添加用户
运行结果
根据Id查询用户
修改用户信息
修改后查询结果
删除用户
删除后查询结果
OK,一个简单的Web API应用就创建好啦。