标签:
在Mac下创建ASP.NET Core Web API 在Mac下创建ASP.NET Core Web API这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢?
原因如下:
官方文档涉及的内容相当全面,属于那种大而全的知识仓库,不太适合初学者,很容易让人失去重要,让人掉入到具体的细节之中。
对于大多数人来讲开发语言只是工具,程序员都有一个通病,就是死磕工具,把工具学深。我认为在工具上没有必要投入太多时间,以能高效地完成日常的工作项> 目为准即可。要需求驱动学习,你需要什么学什么。如果你学的新技术新特性只是屠龙之技或者只需要用到的时候去查一下即可的话,这种死磕这又有什么用。没有必> 要花120%的时间去学100%的知识,你只需要花20%的时间去学习80%的知识就可以了,剩下的等实际的项目中用到的时候去查就可以了,工具只是工具,不是工作本身。
目前基本所有的文章都是基于Windows平台的Visual Studio IDE来介绍的。而我用的是一台Mac,所以我将基于Mac平台的Visual Studio Code讲解适合我们实际项目中遇到的知识。
还有一点,就是这是我个人的学习总结。
这系列文章就是让你去花20%的时间去学80%的东西,剩下的20%再去看官方文档。
在.NET Core里面MVC和WebAPI两者被整合成一个框架,分享同一套代码和管线。这样我们就可以更方便地开发MVC应用程序和Web API接口。
创建项目在这篇文章中我们将要创建的API如下:
API描述GET /api/user 获取所有的用户信息
GET /api/user/{id} 根据ID获取指定的用户
POST /api/user 添加新的用户
PUT /api/user/{id} 更新用户信息
PATCH /api/user/{id} 更新用户信息
DELETE /api/user/{id} 删除用户信息
根据上一篇文章,我们通过Yeoman创建一个WebAPI项目,命名为UserWebAPI:
添加模型类然后在项目根目录下面新建一个Models文件夹,在该文件夹下面利用yo aspnet:class UserItem新建一个UserItem类。
namespace UserWebAPI.Models { public class UserItem { public string Key { get; set; } public string Name { get; set; } public int Age { get; set; } } } 添加仓储类Repository类是封装了数据层的对象,包含了获取数据、并映射到实体模型类的业务逻辑。
首先我们在Models文件夹下面定义一个IUserRepositoryrepository接口。
通过运行yo aspnet:interface IUserRepository命令来创建该接口。
namespace UserWebAPI.Models { public interface IUserRepository { void Add(UserItem item); IEnumerable<UserItem> GetAll(); UserItem Find(string key); UserItem Remove(string key); void Update(UserItem item); } }接着再添加一个UserRepository类来实现IUserRepository接口。
namespace UserWebAPI.Models { public class UserRepository : IUserRepository { private static ConcurrentDictionary<string, UserItem> _users = new ConcurrentDictionary<string, UserItem>(); public UserRepository() { Add(new UserItem { Name = "Charlie", Age = 18 }); } public void Add(UserItem item) { item.Key = Guid.NewGuid().ToString(); _users[item.Key] = item; } public UserItem Find(string key) { UserItem user; _users.TryGetValue(key, out user); return user; } public IEnumerable<UserItem> GetAll() { return _users.Values; } public UserItem Remove(string key) { UserItem user; _users.TryRemove(key, out user); return user; } public void Update(UserItem item) { _users[item.Key] = item; } } } 注册仓储