2.4使用属性在 ASP.NET Web API 2 路由创建一个 REST API
Web API 2 支持一种新型的路由,称为属性路由。属性路由的一般概述,请参阅属性路由 Web API 2 中。在本教程中,您将使用属性路由创建一个 REST API 集合的书。API 将支持以下操作 ︰
行动 | URI 的示例 |
---|---|
得到的所有书的列表。 | / api/书 |
得到一本书的 id。 | /api/books/1 |
获得一本书的详细信息。 | /api/books/1/details |
按流派获得书籍的列表。 | /api/books/fantasy |
按出版日期获取书籍的列表。 | /api/books/date/2013-02-16 /api/books/date/2013/02/16 (备用窗体) |
获取一个特定作者的书籍列表。 | /api/authors/1/books |
所有方法都是只读的 (HTTP GET 请求)。
对于数据层,我们将使用实体框架。本书记录将有以下字段 ︰
- ID
- 标题
- 体裁
- 出版日期
- 价格
- 描述
- 作者 Id (Authors 表的外键)
然而,对于大多数请求,API 将返回此数据 (标题、 作者和流派) 的一个子集。要获得完整的记录,客户端请求/api/books/{id}/details
.
系统必备组件
创建 Visual Studio 项目
首先运行 Visual Studio。从文件菜单中,选择新建,然后选择项目.
在模板窗格中,选择已安装的模板和展开Visual C#节点。在Visual C#,选择Web。在项目模板的列表中,选择ASP.NET MVC 4 Web 应用程序。"BooksAPI"为项目命名。
在新的 ASP.NET 项目对话框中,选择的空模板。在"添加文件夹和核心的参考文件"下选择Web API复选框。单击创建项目.
这将创建一个为 Web API 功能配置的骨架项目。
域模型
接下来,添加域模型的类。在解决方案资源管理器中,右键单击模型文件夹。选择添加,然后选择类别。名称类Author
.
Author.cs 中的代码替换为以下内容 ︰
using System.ComponentModel.DataAnnotations;
namespace BooksAPI.Models
{
public class Author
{
public int AuthorId { get; set; }
[Required]
public string Name { get; set; }
}
}
现在,添加名为Book
的另一个类.
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace BooksAPI.Models
{
public class Book
{
public int BookId { get; set; }
[Required]
public string Title { get; set; }
public decimal Price { get; set; }
public string Genre { get; set; }
public DateTime PublishDate { get; set; }
public string Description { get; set; }
public int AuthorId { get; set; }
[ForeignKey("AuthorId")]
public Author Author { get; set; }
}
}
添加 Web API 控制器
在此步骤中,我们将添加一个 Web API 控制器,使用实体框架和数据层。
按 CTRL + SHIFT + B 来生成项目。实体框架使用反射来发现性能的模型,所以它需要在编译的程序集来创建数据库模式。
在解决方案资源管理器中,右键单击控制器文件夹。选择添加,然后选择控制器.
在添加脚手架对话框中,选择"Web API 2 控制器读取/写入操作,使用实体框架。"
在添加控制器对话框中,为控制器的名称,输入"例子"。选中"使用异步控制器操作"复选框。对于模型类,请选择"书"。(如果你看不到下拉列表中列出的Book
类,请确保生成项目时。然后单击"< 新数据上下文...>"按钮。
在新的数据上下文的对话框中,单击添加。
在添加控制器对话框中,单击添加。脚手架将添加一个名为BooksController
定义 API 控制器类。它还添加了一个名为BooksAPIContext
模型文件夹,为实体框架定义的数据上下文类。
种子的数据库
从工具菜单中,选择库软件包管理器,然后选择程序包管理器控制台.
在程序包管理器控制台窗口中,输入以下命令 ︰
enable-migrations
此命令创建迁移文件夹并添加一个名为 Configuration.cs 的新代码文件。打开此文件并将下面的代码添加到Configuration.Seed
方法。
protected override void Seed(BooksAPI.Models.BooksAPIContext context)
{
context.Authors.AddOrUpdate(new Author[] {
new Author() { AuthorId = 1, Name = "Ralls, Kim" },
new Author() { AuthorId = 2, Name = "Corets, Eva" },
new Author() { AuthorId = 3, Name = "Randall, Cynthia" },
new Author() { AuthorId = 4, Name = "Thurman, Paula" }
});
context.Books.AddOrUpdate(new Book[] {
new Book() { BookId = 1, Title= "Midnight Rain", Genre = "Fantasy",
PublishDate = new DateTime(2000, 12, 16), AuthorId = 1, Description =
"A former architect battles an evil sorceress.", Price = 14.95M },
new Book() { BookId = 2, Title = "Maeve Ascendant", Genre = "Fantasy",
PublishDate = new DateTime(2000, 11,