[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

时间:2022-09-07 12:40:36

本文转自:https://www.cnblogs.com/inday/p/6288707.html

HTTP is not just for serving up web pages. It’s also a powerful platform for building APIs that expose services and data. HTTP is simple, flexible, and ubiquitous. Almost any platform that you can think of has an HTTP library, so HTTP services can reach a broad range of clients, including browsers, mobile devices, and traditional desktop apps.

现在的HTTP协议不再只是为浏览网页而服务,还能构建一个强大的APIs平台提供数据服务。HTTP是简单的、灵活的、无处不在的。几乎你所知的所有平台都有自己的HTTP库,所以HTTP服务拥有众多用户,包括浏览器、移动设备和传统的桌面应用等。

In this tutorial, you’ll build a simple web API for managing a list of "to-do" items. You won’t build any UI in this tutorial.

在本教程中,你将建造一个简单的web api去管理“to-do”项目,在整个过程中不需要构建UI。

ASP.NET Core has built-in support for MVC building Web APIs. Unifying the two frameworks makes it simpler to build apps that include both UI (HTML) and APIs, because now they share the same code base and pipeline.

Asp.Net Core已经内置了使用MVC创建Web APIs。统一了两个框架可以更轻松的创建应用,包括UI(Html)和APIs,因为现在它们共用了相同的基类和管道。

概况

Here is the API that you’ll create:

以下是所需要创建的API:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

The following diagram shows the basic design of the app.

以下是这个应用的基础设计图解:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

  • The client is whatever consumes the web API (browser, mobile app, and so forth). We aren’t writing a client in this tutorial. We'll use Postman to test the app.

  • 在这里我们将用Postman来测试应用,其他任何支持web api(浏览器,移动应用等等)在这里不再讲述。

  • model is an object that represents the data in your application. In this case, the only model is a to-do item. Models are represented as simple C# classes (POCOs).

  • 在这个应用中一个模型代表一个对象,在这个范例里,仅仅只有TO-DO item模型。这个模型就是简单的C#类

  • controller is an object that handles HTTP requests and creates the HTTP response. This app will have a single controller.

  • 控制器就是控制HTTP请求和返回的对象,这个应用只有简单的控制器。

  • To keep the tutorial simple, the app doesn’t use a database. Instead, it just keeps to-do items in memory. But we’ll still include a (trivial) data access layer, to illustrate the separation between the web API and the data layer. For a tutorial that uses a database, see Building your first ASP.NET Core MVC app with Visual Studio.

  • 为了保持简单范例,这个应用不使用数据库,我们仅需要把对象保存在内存中。但是我们还是应该保持创建一个数据访问层,这样能更好的表示web API和数据层之间的分离。如果需要使用数据库,可以参考:Building your first ASP.NET Core MVC app with Visual Studio

创建项目

Start Visual Studio. From the File menu, select New > Project.

打开Visual Studio,从File目录中,选择New > Project。

Select the ASP.NET Core Web Application (.NET Core) project template. Name the project TodoApi, clear Host in the cloud, and tap OK.

选择ASP.NET Core Web Application (.NET Core) 项目模板,名字为:TodoApi,不勾选Host in the cloud,点击OK。

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

In the New ASP.NET Core Web Application (.NET Core) - TodoApi dialog, select the Web API template. Tap OK.

在New ASP.NET Core Web Application (.NET Core) - TodoApi对话框中,选择Web Api模板,点击OK。

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

添加一个模型类

Add a folder named "Models". In Solution Explorer, right-click the project. Select Add > New Folder. Name the folder Models.

在解决方案目录中,添加一个名为“Models”文件夹,右键项目-选择Add > New Folder,取名:Models。

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

Add a TodoItem class. Right-click the Models folder and select Add > Class. Name the class TodoItem and tap Add.

添加TodoItem类,右键Models目录,选择Add > Class ,取名:TodoItem,点击添加。

Replace the generated code with:

把以下代码替换自动生成的代码:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
namespace TodoApi.Models
{
public class TodoItem
{
public string Key { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

添加Repository类

repository is an object that encapsulates the data layer. The repository contains logic for retrieving and mapping data to an entity model. Even though the example app doesn’t use a database, it’s useful to see how you can inject a repository into your controllers. Create the repository code in the Models folder.

Repository是一个封装了数据访问的对象。这个Repository包含了检索逻辑和数据映射到实体对象的功能。虽然在这个范例中我们不使用数据库,但你能看到在你的controller中注入repository,在Models文件夹中创建Repository代码。

Defining a repository interface named ITodoRepository. Use the class template (Add New Item > Class)

定义一个名为:ITodoRepository的repository接口,使用类模板(Add New Item > Class)

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
using System.Collections.Generic;

namespace TodoApi.Models
{
public interface ITodoRepository
{
void Add(TodoItem item);
IEnumerable<TodoItem> GetAll();
TodoItem Find(string key);
TodoItem Remove(string key);
void Update(TodoItem item);
}
}
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

This interface defines basic CRUD operations.

这个接口定义了基本的CRUD操作。

Add a TodoRepository class that implements ITodoRepository:

添加一个TodoRepository类继承自ITodoRepository接口:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
using System;
using System.Collections.Generic;
using System.Collections.Concurrent; namespace TodoApi.Models
{
public class TodoRepository : ITodoRepository
{
private static ConcurrentDictionary<string, TodoItem> _todos =
new ConcurrentDictionary<string, TodoItem>(); public TodoRepository()
{
Add(new TodoItem { Name = "Item1" });
} public IEnumerable<TodoItem> GetAll()
{
return _todos.Values;
} public void Add(TodoItem item)
{
item.Key = Guid.NewGuid().ToString();
_todos[item.Key] = item;
} public TodoItem Find(string key)
{
TodoItem item;
_todos.TryGetValue(key, out item);
return item;
} public TodoItem Remove(string key)
{
TodoItem item;
_todos.TryRemove(key, out item);
return item;
} public void Update(TodoItem item)
{
_todos[item.Key] = item;
}
}
}
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

Build the app to verify you don't have any compiler errors.

生成这个应用,检查下是否有编译错误。

注入这个Repository

By defining a repository interface, we can decouple the repository class from the MVC controller that uses it. Instead of instantiating a TodoRepository inside the controller we will inject an ITodoRepository using the built-in support in ASP.NET Core for dependency injection.

因为定义了一个repository接口,我们能够使repository类和MVC控制器能够分离使用。我们不需要在controller中实例化一个TodoRepository类,只需要使用ASP.NET Core内置的依赖注入即可。

This approach makes it easier to unit test your controllers. Unit tests should inject a mock or stub version of ITodoRepository. That way, the test narrowly targets the controller logic and not the data access layer.

这种方式能够让你更简单的对你的控制器进行单元测试。在单元测试中只需要注入一个mock的ITodoRepository。这样我们测试的时候就不需要访问数据层就能测试目标控制器的逻辑代码。

In order to inject the repository into the controller, we need to register it with the DI container. Open the Startup.cs file. Add the following using directive:

我们需要注册一个DI容器以方便我们的repository注入到这个控制器中。打开Startup.cs文件,添加引用代码:

using TodoApi.Models;

In the ConfigureServices method, add the highlighted code:

在ConfigureServices方法中,添加以下高亮代码:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(); services.AddSingleton<ITodoRepository, TodoRepository>();
}
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

添加控制器

In Solution Explorer, right-click the Controllers folder. Select Add > New Item. In the Add New Item dialog, select the Web API Controller Class template. Name the class TodoController.

在解决方案面板中,右键Controllers目录,选择Add > New Item。在添加对话框中,选择Web Api Controller Class模板,取名:TodoController。

Replace the generated code with the following:

替换以下代码:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using TodoApi.Models; namespace TodoApi.Controllers
{
[Route("api/[controller]")]
public class TodoController : Controller
{
public TodoController(ITodoRepository todoItems)
{
TodoItems = todoItems;
}
public ITodoRepository TodoItems { get; set; }
}
}
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

This defines an empty controller class. In the next sections, we'll add methods to implement the API.

这里定义了一个空的控制类,下一步我们会添加API相关方法。

获取to-do项

To get to-do items, add the following methods to the TodoController class.

在TodoController类中添加以下方法获取一个to-do项:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
[HttpGet]
public IEnumerable<TodoItem> GetAll()
{
return TodoItems.GetAll();
} [HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(string id)
{
var item = TodoItems.Find(id);
if (item == null)
{
return NotFound();
}
return new ObjectResult(item);
}
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

These methods implement the two GET methods:

这些方法包含了以下两个方法:

  • GET /api/todo

  • GET /api/todo/{id}

Here is an example HTTP response for the GetAll method:

下面是使用GetAll方法所返回的内容:

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/10.0
Date: Thu, 18 Jun 2015 20:51:10 GMT
Content-Length: 82 [{"Key":"4f67d7c5-a2a9-4aae-b030-16003dd829ae","Name":"Item1","IsComplete":false}]
[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

Later in the tutorial I'll show how you can view the HTTP response using Postman.

在范例后面,我将演示如何使用Postman查看HTTP response。

路由和URL路径

The [HttpGet] attribute (HttpGetAttribute) specifies an HTTP GET method. The URL path for each method is constructed as follows:

HttpGet特性提供了一个HTTP Get方法。这个方法构造了如下的URL路径:

  • Take the template string in the controller’s route attribute, [Route("api/[controller]")]
  • 在控制器的路由特性中查看模板字符串,[Route("api/[controller]")]
  • Replace "[Controller]" with the name of the controller, which is the controller class name minus the "Controller" suffix. For this sample, the controller class name is TodoController and the root name is "todo". ASP.NET Core routing is not case sensitive.
  • 替换Controller名,类必须以Controller结尾。这个范例里我们使用TodoController作为类名,Asp.Net Core路由是不区分大小写的。
  • If the [HttpGet] attribute has a template string, append that to the path. This sample doesn't use a template string.
  • 如果这个HttpGet特性含有模板字符的话,添加相应路径,我们不使用默认字符。

In the GetById method:

在这个GetById方法中:

[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(string id)

"{id}" is a placeholder variable for the ID of the todo item. When GetById is invoked, it assigns the value of "{id}" in the URL to the method's id parameter.

{id}是todo项ID的占位符,当GetById调用时,URL相应的{id}值会赋予方法中id参数。

Name = "GetTodo" creates a named route and allows you to link to this route in an HTTP Response. I'll explain it with an example later. See Routing to Controller Actionsfor detailed information.

[Name="GetTodo" ]创建了一个名为GetTodo的路由名,它允许在HTTP响应中链接到你的路由上。稍后会做演示,详见:Routing to Controller Actions

返回值

The GetAll method returns an IEnumerable. MVC automatically serializes the object to JSON and writes the JSON into the body of the response message. The response code for this method is 200, assuming there are no unhandled exceptions. (Unhandled exceptions are translated into 5xx errors.)

GetAll方法返回了一个IEnumerable。MVC会自动的把这个对象序列化成JSON格式并把格式化后的内容写入到响应消息的body中。如果没有一场,这个响应返回代码为200。(如果有为止错误将返回5xx错误信息)。

In contrast, the GetById method returns the more general IActionResult type, which represents a wide range of return types. GetById has two different return types:

相比之下,GetById方法返回了一个IActionResult类型,这样能返回更多不同的返回类型。GetById有2个不同的返回类型:

  • If no item matches the requested ID, the method returns a 404 error. This is done by returning NotFound.

  • 如果没有匹配到响应的item,这个方法返回404错误,返回NotFound。

  • Otherwise, the method returns 200 with a JSON response body. This is done by returning an ObjectResult

  • 相反,这个方法返回200代码并响应一个JSON对象,类型为:ObjectResult。

原文链接

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api

邮箱:james@taogame.com
QQ:785418
微信:jamesying1
QQ群:376248054 通关:cnblogs 
技术改变生活,技术改变人生!用技术来创造价值,拥有技术,不仅仅是开发,您将获得更多!

[转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)的更多相关文章

  1. 【翻译】在Visual Studio中使用Asp&period;Net Core MVC创建你的第一个Web API应用(一)

    HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expo ...

  2. 【翻译】在Visual Studio中使用Asp&period;Net Core MVC创建第一个Web Api应用(二)

    运行应用 In Visual Studio, press CTRL+F5 to launch the app. Visual Studio launches a browser and navigat ...

  3. 使用Visual Studio Code开发Asp&period;Net Core WebApi学习笔记(二)-- Web Api Demo

    在上一篇里,我已经建立了一个简单的Web-Demo应用程序.这一篇将记录将此Demo程序改造成一个Web Api应用程序. 一.添加ASP.NET Core MVC包 1. 在project.json ...

  4. 006&period;Adding a controller to a ASP&period;NET Core MVC app with Visual Studio -- 【在asp&period;net core mvc 中添加一个控制器】

    Adding a controller to a ASP.NET Core MVC app with Visual Studio 在asp.net core mvc 中添加一个控制器 2017-2-2 ...

  5. 在 Visual Studio 中部署 ASP&period;NET Core 应用

    另一篇:在 Docker 中手工部署 ASP.NET Core 应用 操作步骤 1. 安装 Docker For Windows(安装之前 Windows 需要 开启 Hyper-V 虚拟机功能 ) ...

  6. 在Chrome&plus;Visual Studio中调试asp&period;net程序很慢的问题(Firefox也有类似问题)

    在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题) 今天开始起在Chrome中调试,发现问题主要出在菜单栏(layout文件)中,google了 ...

  7. 002&period;Create a web API with ASP&period;NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp&period;net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  8. 使用 ASP&period;NET Core MVC 创建 Web API(五)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  9. 使用 ASP&period;NET Core MVC 创建 Web API(二)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 六.添加数据库上下文 数据库上下文是使用Entity Framewor ...

随机推荐

  1. js中实现中文按字母拼音排序

    js中实现中文按字母拼音排序 var Pinyin = (function (){ var Pinyin = function (ops){ this.initialize(ops); }, opti ...

  2. centos下安装php环境

    centos下安装php环境 安装apache yum install httpd-devel 启动apache /etc/init.d/httpd start 安装mysql yum install ...

  3. HDU 4630 No Pain No Game 树状数组&plus;离线查询

    思路参考 这里. #include <cstdio> #include <cstring> #include <cstdlib> #include <algo ...

  4. sass和compass实战 读书笔记(一)

    sass优势: 不做重复的工作 一  消除样式表冗余(通过变量赋值的方式) 1. 通过变量来复用属性值 2. 使用嵌套来快速写出多层级的选择器 3. 通过混合器来复用一段样式 4. 使用选择器继承来避 ...

  5. flex 布局实现固定头部和底部,中间滚动布局

    关键词:display: flex,flex: 1,  overflow-y: scroll; 实现:head 和footer 固定,中间body多了滚动,少了撑满: head和footer宽度根据内 ...

  6. shiro 介绍和基本使用

    一.什么是shiro 它是一个功能强大且易于使用的Java安全框架,可以执行身份验证.授权.加密和会话管理.使用Shiro易于理解的API,您可以快速且轻松地保护任何应用程序——从最小的移动应用程序到 ...

  7. 弹出的 Dialog 里,包含 Form,如何在关闭 Dialog 时,执行 resetFields(对整个表单进行重置,将所有字段值重置为初始值并移除校验结果)

    做法: before-close 事件中,调用 resetFields 取消按钮事件中,调用 resetFields <el-dialog title="弹出窗口" :vis ...

  8. DHacker 汉化

  9. silverlight 进行本地串口调用的一种可行的解决方法

    silverlight 是一个很不错的开发平台,我们可以设计出很绚丽的界面,用户可以拥有很好的体验,但是就目前来说,进行本地串口的直接调用时不行的,因为安全的原因,有没有相对简单的调用方式呢? 答案是 ...

  10. 创建第一个MySQL数据库earth及表area

    Windows 10家庭中文版,MySQL 5.7.20 for Win 64,2018-05-08 数据库earth描述: 用于记录地球上的事物,一期包含地理区域信息——表area. 字符集编码:u ...