彩票走势图

如何使用ASP.NET Core创建Web API(上)

翻译|使用教程|编辑:陈津勇|2019-08-28 14:25:30.720|阅读 537 次

概述:本教程介绍了使用ASP.NET Core构建Web API的基础知识。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

在本教程中,您将学习如何:

创建一个Web API项目
添加模型类和数据库上下文
添加控制器
添加CRUD方法
配置路由和URL路径
指定返回值
使用Postman调用Web API
使用jQuery调用Web API

最后,您有一个Web API,可以管理存储在关系数据库中的“待办事项”。

本教程将创建以下API:

QQ截图20190828101910.png

下图显示了应用程序的设计:

使用Visual Studio 2019创建Web项目

大家都知道,Visual Studio 2019具有ASP.NET和Web开发工作负载,那么如何使用VS 2019创建一个Web项目呢?只需以下四个步骤:

  • 从文件菜单中,选择新建 > 项目。

  • 选择ASP.NET Core Web Application模板,然后单击Next。

  • 将项目命名为TodoApi,然后单击“ 创建”。

  • 在“ 创建新的ASP.NET核心Web应用程序”对话框中,确认已选中.NET Core和ASP.NET Core 2.2。选择API模板,然后单击“ 创建”,不要选择启用Docker支持。

vs.png

点击下载Visual Studio试用版

测试API

项目模板创建一个values API。从浏览器中调用Get方法来测试应用程序。

按Ctrl + F5运行该应用程序。Visual Studio启动浏览器并导航到//localhost:

如果出现一个对话框,询问您是否应该信任IIS Express证书,请选择“ 是”。在接下来出现的“ 安全警告”对话框中,选择“ 是”。

返回以下JSON:

["value1","value2"]

添加模型类

模型是一组表示应用程序管理的数据的类。这个应用程序的模型是一个单独的TodoItem类。

  • 在解决方案资源管理器中,右键单击项目。选择添加 > 新建文件夹。将文件夹命名为Models。

  • 右键单击Models文件夹,然后选择Add > Class。将类命名为TodoItem并选择Add。

  • 使用以下代码替换模板代码:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

该Id属性用作关系数据库中的唯一键。

模型类可以在项目中的任何位置,但模型文件夹按惯例使用。

添加数据库上下文

该数据库上下文是协调实体框架功能的数据模型的主要类。该类是通过派生类创建的Microsoft.EntityFrameworkCore.DbContext。

  • 右键单击Models文件夹,然后选择Add>;Class,将类命名为TodoContext,然后单击“添加”。

  • 使用以下代码替换模板代码:

using Microsoft.EntityFrameworkCore;
namespace TodoApi.Models
{
    public class TodoContext : DbContext
    {
        public TodoContext(DbContextOptions options)
            : base(options)
        {
        }
        public DbSet TodoItems { get; set; }
    }
}

注册数据库上下文

在ASP.NET Core中,必须使用依赖注入(DI)容器注册DB上下文等服务。容器为控制器提供服务。

使用以下突出显示的代码更新Startup.cs:

// Unused usings removed
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TodoApi.Models;

namespace TodoApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the 
        //container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext(opt =>
                opt.UseInMemoryDatabase("TodoList"));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP 
        //request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for 
                // production scenarios, see //aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}

上面的代码:

  • 删除未使用的using声明。

  • 将数据库上下文添加到DI容器。

  • 指定数据库上下文将使用内存数据库。

添加控制器

  • 右键单击“控制器”文件夹。

  • 选择添加>新项。

  • 在“添加新项”对话框中,选择“API控制器类”模板。

  • 将类命名为TodoController,然后选择Add。

new_controller.png

使用以下代码替换模板代码:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TodoApi.Models;

namespace TodoApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TodoController : ControllerBase
    {
        private readonly TodoContext _context;

        public TodoController(TodoContext context)
        {
            _context = context;

            if (_context.TodoItems.Count() == 0)
            {
                // Create a new TodoItem if collection is empty,
                // which means you can't delete all TodoItems.
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        }
    }
}

上面的代码:

  • 定义没有方法的API控制器类。

  • 使用[ApiController]属性装饰类,此属性指示控制器响应Web API请求。

  • 使用DI将数据库context(TodoContext)注入控制器,数据库上下文用于控制器中的每个CRUD方法。

  • 如果数据库为空,则向数据库添加名为Item1的项。此代码位于构造函数中,因此每次有新的HTTP请求时它都会运行。如果删除所有项目,构造函数将在下一次调用API方法时再次创建Item1。所以当删除操作真正起作用的时候,它可能看起来并没有起作用。

添加Get方法

要提供检索待办事项的API,请将以下方法添加到TodoController类中:

// GET: api/Todo
[HttpGet]
public async Task GetTodoItems()
{
    return await _context.TodoItems.ToListAsync();
}
// GET: api/Todo/5
[HttpGet("{id}")]
public async Task GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

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

这些方法实现了两个GET端点:

  • GET /api/todo

  • GET /api/todo/{id}

如果应用程序还在运行,就停止它,然后再次运行,这样才能包含最新的更改。

通过从浏览器调用这两个端点来测试应用程序。例如:

  • //localhost:

  • //localhost:

调用GetTodoItems生成以下HTTP响应:

[
  {
    "id": 1,
    "name": "Item1",
    "isComplete": false
  }
]

路由和URL路径

该[HttpGet]属性表示响应HTTP GET请求的方法。每个方法的URL路径构造如下:

  • 从控制器的Route属性中的模板字符串开始:

namespace TodoApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TodoController : ControllerBase
    {
        private readonly TodoContext _context;
  • 用控制器的名称替换[controller],按照惯例,控制器类名减去“controller”后缀。例如控制器类名是TodoController,因此控制器名是“todo”。ASP.NET核心路由不区分大小写。

  • 如果[HttpGet]属性有一个路由模板(例如[HttpGet("products")]),则将其附加到路径。

在下面的GetTodoItem方法中,“{id}”是一个占位符变量,用于to-do项的唯一标识符。当调用GetTodoItem时,URL中的“{id}”值将提供给itsid参数。

// GET: api/Todo/5
[HttpGet("{id}")]
public async Task GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

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

*由于内容过多,本文分为上、下篇发布,若想了解更多,请点击如何使用ASP.NET Core创建Web API(下)查看。



想要了解 Visual Studio 更多资源的伙伴,请点这里。

想要获取 Visual Studio 正版授权的伙伴,


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP