,分为白盒测试、黑盒测试和灰盒测试 从测试执行方式上,分为手动测试和自动化测试 从测试所涉及的层次上,分为单元测试、集成测试和系统测试 单元测试由开发人员完成,主要用来测试程序中的类以及其中的方法是否能够正确运行...在添加单元测试方法时,应遵循 Arrange-Act-Access 模式,使测试方法的代码更加规范,该模式指明了每个测试方法由以下3部分组成: Arrange:为测试进行准备操作,如设置测试数据、变量和环境等...Act:执行要测的方法,如调用要测试的函数和方法 Assert:断言测试结果,验证被测试方法的输出是否与预期的结果一致 我们使用 xUnit 测试框架,为项目命名为 Library.API.Testing...由于 AuthorController 的构造函数中引用了多个其他依赖项,如 IRepositoryWrapper 和 IMapper 等,可以使用 Moq 库来模拟 namespace Library.API.Testing...Email = "author1@xxx.com" }; var authorDto = new AuthorDto { Id = author.Id,
在Asp.net Core之前所有的Action返回值都是ActionResult,Json(),File()等方法返回的都是ActionResult的子类。...并且Core把MVC跟WebApi合并之后Action的返回值体系也有了很大的变化。 ActionResult类 ActionResult类是最常用的返回值类型。...基本沿用了之前Asp.net MVC的那套东西,使用它大部分情况都没问题。比如用它来返回视图,返回json,返回文件等等。如果是异步则使用Task。...同样异步的话使用Task包起来做为返回值。...同样异步的话使用Task包起来做为返回值。
下面看几个异步方法: 6.Task类型 public async Task GetTaskNoResult() { await Task.Run(() => { });...; await Task.Run(() => { rtn = "Hello Core"; }); return rtn; } 与string类型一样,返回字符串...对应的Content-Type类型有空、text/html、text/plain、application/json几种。 异步Action的返回结果,和其对应的同步Action返回结果类型一致。...这样的派生类还有常见的JsonResult和ContentResult等,他们都继承了ActionResult,而ActionResult实现了IActionResult接口。...图 2被两行虚线分隔为三行,第一行基本都介绍过了,第二行是第一行对应的异步方法,上一节介绍常见的返回类的时候说过,这些异步方法的返回结果和对应的同步方法是一样的。
0} WHERE @UtcNow > ExpiresAtTime 值得注意的是,在异步方法中使用同步调用不会触发缓存逐出,因为其线程退出导致 Task.Run 未能运行,比如下面的代码 [HttpGet...,而各种配置都可以通过连接字符串进行设置,这和使用 StackExchange.Redis 的方式是完全一致的 2.2 使用缓存 [Route("api/Home")] [ApiController...> NewId() { var id = Guid.NewGuid().ToString("N");...("GetId")] public async Task> GetId() { var id = await...,如 SqlServer 和 Redis 了解到了如何使用不同的缓存类型客户端进行注册 了解到如何实现自定义缓存客户端 还知道了在调用 SqlServer 缓存的时候,异步方法中的同步调用会导致 SqlServerCache
}")] public async Task> GetAsync(string id, CancellationToken cancellationToken...}/answers")] public async Task GetWithAnswerAsync(string id, CancellationToken...}")] public async Task UpdateAsync([FromRoute] string id, [FromBody] QuestionUpdateRequest...}/answer")] public async Task> AnswerAsync([FromRoute] string id, [FromBody...); } [HttpPost] [Route("{id}/down")] public async Task
视图通过两种方式可以拿到数据: 1)通过控制器操作返回的结果(控制器返回结果是数据和视图的结合。 2)将结果赋给控制器属性并在View中使用这些属性。...原理: ASP.NET从线程池获得线程处理异步请求,异步调用完后,该线程回到线程池以便可以处理其他请求,同时通知ASP.NET重新抓取一个线程(不一定是处理异步请求的线程)来完成具体的异步操作(输出数据等...使用异步控制器的情形: 可能引发瓶颈的长操作,网络或I\O密集型操作,可取消长操作的情形。...构建异步控制器: 控制器继承AsyncController,控制器操作返回Task,并用async 修饰。...public class AnysController : AsyncController { // GET: Anys public async Task<ActionResult
转换同步Action方法 该功能通过两个关键字就可实现:“async “和” await” 1: [AdminFilter] 2: public async Task<ActionResult...worker线程会使Action 方法执行 Worker方法在 Task.Factory.StartNew方法的辅助下,开启异步操作 使用async关键字将Action 方法标记为异步方法,由此会保证异步操作一旦开启...其他,如“{controller}/{action}/{id}”,”id“是路径的参数。...“http://localhost:8870/BulkUpload/Index” Route 参数和Query 字符串有什么区别?...Query 字符串本身是有大小限制的,而无法定义Route 参数的个数。 无法在Query 字符串值中添加限制,但是可以在Route 参数中添加限制。
从数据一致性和可靠性的角度来看,在分布式系统中实现事务处理是至关重要的。...创建EntityBase公共类 一个公共的具有相同特性和行为的基类。...Mongo处理从字符串到ObjectId的转换。...ObjectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程...[HttpPut("{id}")] public async Task> UpdateUserInfo(string id, [FromBody
在.NET的早期版本中,编写和测试异步代码是复杂的、易于出错的,且难以调试。但在.Net 4.5中,编写、测试和调试异步代码是如此简单,所以你应该经常使用异步代码。...查看Index方法中添加的异步代码 public async Task Index() { var departments = db.Departments.Include...: 方法使用了async关键字,它告诉编译器为方法体生成回调方法,并自动创建返回的Task对象。...将返回类型由ActionResult更改为Task,Task类型表示正在进行的工作会返回T类型的结果。...public async Task Details(int?
注意:Magicodes.IE是从框架的易用性和体验的角度对Excel导出进行了封装,但是希望大家先理解原理后再使用。...值得注意的是: 使用XlsxFileResult需引用包Magicodes.IE.Excel.AspNetCore XlsxFileResult继承自ActionResult,目前支持字节数组、流和泛型集合为参数的...最后 教程已上传Github,有兴趣有精力的朋友可以帮忙PR一下单元测试,由于精力有限,先手测了,可参考: ASP.NET Core 中的测试控制器逻辑 | Microsoft Docs 写个功能几分钟到十几分钟...github.com/dotnetcore/Magicodes.IE 码云(手动同步,不维护):https://gitee.com/magicodes/Magicodes.IE 相关库会一直更新,在功能体验上有可能会和本文教程有细微的出入...,请以相关具体代码、版本日志、单元测试示例为准。
作为演示,我们定义了如下这个ContentResult类型,它将指定的字符串作为响应主体的内容,具体的内容类型(媒体内容或者MIME类型)则可以灵活指定。...,除了Task和Void,Action方法的返回类型还可以是IActionResult、Task和ValueTask。...如下面的代码片段所示,我们将Action方法FooAsync和Bar的返回类型分别替换成Task和IActionResult,具体返回的都是一个ContentResult对象...、ValueTask,ContentResult对象的内容和直接返回的字符串都是一段相同的HTML。...由于Action方法Baz和Qux返回的是一个字符串,按照ActionResultTypeMapper类型提供的转换规则,最终返回的将是以此字符串作为响应内容,内容类型为 “text/plain” 的ContentResult
注意:Magicodes.IE是从框架的易用性和体验的角度对Excel导出进行了封装,但是希望大家先理解原理后再使用。...值得注意的是: 使用XlsxFileResult需引用包Magicodes.IE.Excel.AspNetCore XlsxFileResult继承自ActionResult,目前支持字节数组、流和泛型集合为参数的.../dotnetcore/Magicodes.IE 最后 有兴趣有精力的朋友可以帮忙PR一下单元测试,由于精力有限,先手测了,参考: ASP.NET Core 中的测试控制器逻辑 | Microsoft...github.com/dotnetcore/Magicodes.IE 码云(手动同步,不维护):https://gitee.com/magicodes/Magicodes.IE 相关库会一直更新,在功能体验上有可能会和本文教程有细微的出入...,请以相关具体代码、版本日志、单元测试示例为准。
Task类型的返回值和在Action方法使用Task.Factory.StartNew()等方法来调用异步的Action,主要用于I/O绑定等操作。...这里省略MVC4版本前的老式异步Action调用,Task返回值的Action如下所示: 1 public Task Article(string name) 2 {...接下来,介绍Action的执行过程,在Controller中,包括Model绑定和验证在内的整个Action的执行是通过一个名为ActionInvoker的组件来完成的,也包含同步异步两个版本,实现类为...在View中通过调用AntiForgeryToken方法,在页面中生一个值为防伪令牌字符串的hidden类型的元素,并且设置一个具有HttpOnly的Cookie。...正向执行时,一旦某一个ActionFilter将AcionExecuteingContext的Result设置为ActionResult对象,后续ActionFilter和目标Action将不会执行。
对话/问答 Copilot 的基本能力,比如写单元测试等,其实在以前的文章已经演示过了,这次不在重复。既然新版叫 Copilot Chat 那么肯定是跟 ChatGPT 一样是问答模式了。...context.ToDos.Remove(existingTodo); _context.SaveChanges(); } } } minjie: 把所有方法改成异步...[HttpGet("{id}")] public async Task> GetToDoById(int id) { var todo...在安装时,你需要登录你的 GitHub 帐户和选择你喜欢的语言。 准备工作 我们将使用 Entity Framework Core 和 ASP.NET Core 创建 To-Do 应用程序。...同时还将添加一个连接字符串以及一些模型构建代码。
• 单元测试能力 ASP.NET Identity 能让 Web 应用程序能够更好地进行单元测试。你可以为你应用程序使用了 ASP.NET Identity 的部分编写单元测试。...UserManager提供了创建和操作用户的一些基本方法并且全面支持C# 异步编程,所以你可以使用CreateAsync(Create),FindAsync(Find)、DeleteAsync(Delete...方法将AppUser对象将它持久化到数据库: [HttpPost] public async Task Create(UserViewModel model)...] public async Task Delete(string id) { AppUser user = await UserManager.FindByIdAsync...PasswordHash属性赋值,当密码策略验证通过时再去验证Email策略,这样确保没有脏数据,如下所示: [HttpPost] public async Task<ActionResult
多出来的对事务、连接池、迁移、种子数据等一些功能 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好 Repository 仓储 在领域层和数据映射层之间,像一个内存级别的领域对象集合 为领域业务的单元测试提供替换点...工作单元) DB Set(Repository 仓储) EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的 ORM 框架 EF Core快速开始示例 创建一个空的...web api 项目 添加 Pomelo.EntityFrameworkCore.Mysql 的 nuget 包引用 创建实体 创建 DbContext 配置连接字符串并且注入 DbContext 使用.../// public string Id { get; set; } /// /// 全局唯一的身份...> CreateAsync([FromBody] Project project, CancellationToken cancellationToken
多出来的对事务、连接池、迁移、种子数据等一些功能 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好 Repository 仓储 在领域层和数据映射层之间,像一个内存级别的领域对象集合 为领域业务的单元测试提供替换点...DB Set DB Context(UnitOfWork 工作单元) DB Set(Repository 仓储) EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的...配置连接字符串并且注入 DbContext 使用 DbContext 完成数据查询与插入 创建实体 Entity namespace LighterApi.Data { public class...Entity { /// /// 主键Id /// public string Id...> CreateAsync([FromBody] Project project, CancellationToken cancellationToken
1 配置MongoDB 首先,请参照之前的文章安装部署好一个MongoDB节点或集群。 然后,手动创建一个数据库BookStoreDB 和 一个集合 Books。...:这里的连接字符串指向的是一个没有设置用户名密码的MongoDB节点。...如果你的MongoDB节点设置了用户名密码 或者 复制集分片集 之类的,请修改为匹配的连接字符串。...实例获取MongoDB连接字符串、数据库名 和 集合名。...)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<ActionResult
Action方法Article的返回类型为Task,我们将异步文件内容的读取体现在返回的Task对象中。...对文件内容呈现的回调操作则通过调用该Task对象的ContinueWith方法进行注册,该操作会在异步操作完成之后被自动调用。...实现了两个基本的功能,即在异步操作和回调操作之间传递参数和向ASP.NET MVC发送异步操作开始和结束的通知。...操作计数通过只读属性Count表示,当我们开始和完成异步操作的时候分别调用Increment和Decrement方法作增加和介绍计数操作。...如果我们以返回类型为Task的形式定义异步Action,通过Task体现的异步操作的执行时间不受AsyncManager的Timeout属性的限制。
领取专属 10元无门槛券
手把手带您无忧上云