文档章节

Visual Studio 2019教程:如何将Web API添加到ASP.NET Core应用程序中

沫沫77
 沫沫77
发布于 2019/11/19 17:10
字数 1121
阅读 10
收藏 0

打开项目

在Visual Studio 2019中打开ASP.NET Core应用程序。

添加一个API控制器

右键单击该项目,然后添加一个名为Api的新文件夹。然后,右键单击此文件夹,然后选择Add > New Scaffolded Item。使用Entity Framework选择带有操作的API Controller。现在选择一个现有的模型类,然后单击Add。

vs2019-add-scaffold-api.png

查看生成的控制器

生成的代码包括一个新的控制器类。类定义的顶部是两个属性。

[Route("api/[controller]")]
[ApiController]
public class GamesController : ControllerBase
  • 第一个指定这个控制器中动作的路由为api/[controller],这表示如果控制器名为GamesController,则路由为api/Games。
  • 第二个属性[ApiController]向类添加了一些有用的验证,比如确保每个action方法都包含自己的[Route]属性。

public class GamesController : ControllerBase
{
    private readonly AppDbContext _context;

    public GamesController(AppDbContext context)
    {
        _context = context;
    }

控制器使用现有的AppDbContext,并传递到其构造函数中。每个操作都将使用此字段来处理应用程序的数据。

// GET: api/Games
[HttpGet]
public IEnumerable<Game> GetGame()
{
    return _context.Game;
}

第一种方法是使用[HttpGet]属性指定的简单GET请求。它不带任何参数,并返回数据库中所有游戏的列表。点击下载VS 2019

// GET: api/Games/5
[HttpGet("{id}")]
public async Task<IActionResult> GetGame([FromRoute] int id)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var game = await _context.Game.FindAsync(id);

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

    return Ok(game);
}

下一个方法指定路由中的{id},它将被添加到/之后的路由中,因此完整的路由将类似于api/Games/5,如顶部的注释所示。该id输入被映射到方法上的id参数。在方法内部,如果模型无效,则返回一个BadRequest结果。否则,EF将尝试查找与提供的id匹配的记录。如果找不到,将返回NotFound结果,否则将返回相应的游戏记录。

// PUT: api/Games/5
[HttpPut("{id}")]
public async Task<IActionResult> PutGame([FromRoute] int id, [FromBody] Game game)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    if (id != game.Id)
    {
        return BadRequest();
    }

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

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

    return NoContent();
}

接下来,使用[HttpPut]对API的请求来执行更新。新Game记录在请求的正文中提供。执行一些验证和错误检查,如果一切顺利,数据库中的记录将使用请求体中提供的值进行更新。否则,将返回适当的错误响应。

// POST: api/Games
[HttpPost]
public async Task<IActionResult> PostGame([FromBody] Game game)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _context.Game.Add(game);
    await _context.SaveChangesAsync();

    return CreatedAtAction("GetGame", new { id = game.Id }, game);
}

一个[HttpPost]请求用于向系统添加新记录。与[HttpPut]一样,记录被添加到请求的正文中。如果有效,则EF Core将记录添加到数据库中,并且该操作将返回更新后的记录(带有数据库生成的ID)和一个指向API记录的链接。

// DELETE: api/Games/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteGame([FromRoute] int id)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var game = await _context.Game.FindAsync(id);
    if (game == null)
    {
        return NotFound();
    }

    _context.Game.Remove(game);
    await _context.SaveChangesAsync();

    return Ok(game);
}

最后,[HttpDelete]使用带有ID 的路由来删除记录。如果请求有效,并且存在具有给定ID的记录,那么EF Core从数据库中将其删除。

添加Swagger

Swagger是一个API文档和测试工具,可以作为一组服务和中间件添加到ASP.NET Core应用程序中。要做到这一点,请先右键单击该项目,然后选择Manage NuGet Packages。单击Browse,搜索Swashbuckle.AspNetCore并安装相应的软件包。

vs2019-nuget-swashbuckle.png

安装后,打开Startup.cs并将以下内容添加到ConfigureServices方法的末尾:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
});

同时,还需要在文件的顶部添加Swashbuckle.AspNetCore.Swagger。

接下来,在UseMvc之前,在Configure方法中添加以下内容:

// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();

// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), 
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

现在您应该能够构建和运行应用程序了。

在浏览器中,导航到/swagger地址栏中的,应该看到应用程序的API端点和模型的列表。

vs2019-swagger-browser.png

点击Games下的一个端点,尝试执行它,查看不同端点的行为。

© 著作权归作者所有

沫沫77
粉丝 0
博文 26
码字总数 25118
作品 0
石柱
私信 提问
Visual Studio 2019 for Mac 8.4 Preview 4 发布

微软已经发布了 Visual Studio 2019 for Mac version 8.4 Preview 4。该版本带来了对最新稳定版 .NET Core 的支持,对 ASP.NET Core 项目的脚手架支持以及对整体产品可访问性的其他改进。用户...

白开水不加糖
2019/12/13
2.2K
4
Visual Studio 2019 for Mac 8.4 发布

Visual Studio 2019 for Mac 8.4 已发布,作为开启新年的首个版本,8.4 引入了不少激动人心的增强功能。其中不少是来自社区的呼声,主要包括: 支持 .NET Core 3.1 最新稳定版 提供对 ASP.NE...

局长
01/10
5.1K
5
ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API

ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用。 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API。 如何从空的项目模板中启动,及添加控件到应用中。 ...

葡萄城控件技术团队
2015/02/05
6.7K
0
VS 2019 for Mac 8.2 和 8.3 preview 1 发布

Visual Studio 2019 for Mac 8.2以及 8.3 版的 preview 1 已经发布,下面我们来看它的更新内容: Visual Studio 2019 for Mac 8.2 版 这个版本中,在 IDE 中为 XAML 和 AXML 文件提供一个新的...

afterer
2019/07/26
2.7K
5
ASP.NET Core: 全新的ASP.NET !

背景 最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5) 它颠覆了过去的 ASP.NET。 什么是 ASP.NET Core? ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 We...

葡萄城控件技术团队
2016/07/08
312
0

没有更多内容

加载失败,请刷新页面

加载更多

金蝶EAS DEP 服务端 脚本

1、服务端执行SQL //服务端更新单据状态var imp = JavaImporter(); imp.importPackage(Packages.com.kingdee.eas.scm.im.inv); imp.importPackage(Packages.com.kingdee.eas.srt.comm......

路过饭堂门口
22分钟前
22
0
Hive之导出文件按逗号分隔到本地文件

如下所示,默认导出的是用\t分隔的,需要使用管道符进行转换,经常使用到,记录下. List-1 hive -e "SELECT * from student" | sed 's/\t/,/g' > /tmp/student.csv...

克虏伯
32分钟前
34
0
转置/解压缩功能(zip的反转)?

我有一个2项元组的列表,我想将它们转换为2个列表,其中第一个包含每个元组中的第一个项目,第二个列表包含第二个项目。 例如: original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]# an......

技术盛宴
48分钟前
53
0
小猪o2o系统v14.0升级v14.1攻略含小猪CMS微店铺和智慧店铺及小程序百项升级

首先我们要注意升级前的以下几个内容: 即 对环境的要求 网站需求PHP7.1 MYSQL5.1以上 Sw解密组件 解密组件在swoole-loader内 解压缩网站包 修改Conf/db.php内数据库文件 替换数据库内xxx.com...

my_gode
58分钟前
98
0
「干货来袭」Github最全Nodejs资源集

今天给大家分享一下Github上面最全的Nodejs资源集awesome-nodejs,该项目聚合了nodejs各类优质资源,对自立于全栈开发或者想了解nodejs技术栈的开发同学极有帮助,有想进一步了解nodejs的千万...

gamedilong
今天
56
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部