在默认情况下,大多数异常都被转换为一个带有状态码500的内部服务器错误的HTTP响应。 这个HTTPResponseException类型是一个特殊的类型。...这种异常会返回你在异常构造器中指定的任何HTTP状态码。例如,在以下方法中,如果这个id参数无效,那么会返回“404——未找到”。...ASP.NET Web API中的异常过滤器与Asp.Net MVC中的是极为类似的。然后,他们被声明在不同的命名空间中,且功能也是独立的。...特别强调一下,Asp.Net MVC中使用的HandleErrorAttribute类不会处理Web API控制器中抛出的异常。...HttpError对象为在响应正文中返回错误消息提供了相应的方式。
控制器就是控制HTTP请求和返回的对象,这个应用只有简单的控制器。 To keep the tutorial simple, the app doesn’t use a database....这种方式能够让你更简单的对你的控制器进行单元测试。在单元测试中只需要注入一个mock的ITodoRepository。这样我们测试的时候就不需要访问数据层就能测试目标控制器的逻辑代码。...(如果有为止错误将返回5xx错误信息)。...如果没有匹配到响应的item,这个方法返回404错误,返回NotFound。...This is done by returning an ObjectResult 相反,这个方法返回200代码并响应一个JSON对象,类型为:ObjectResult。
前言 总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel,出于从框架的体验和易用性的角度,决定对Excel的导出进行独立封装,以便于大家更易于使用,开箱即用。...Excel文件下载 支持传递下载文件名,参数名fileDownloadName,如不传则自动生成唯一的文件名 核心实现 在Magicodes.IE.Excel.AspNetCore中,我们添加了自定义的...知识点总结 敲黑板,麻烦有空帮点点,为了德玛西亚: ASP.NET Core Web API 中控制器操作的返回类型 | Microsoft Docs Reference https://github.com.../dotnetcore/Magicodes.IE 最后 有兴趣有精力的朋友可以帮忙PR一下单元测试,由于精力有限,先手测了,参考: ASP.NET Core 中的测试控制器逻辑 | Microsoft...相关库会一直更新,在功能体验上有可能会和本文教程有细微的出入,请以相关具体代码、版本日志、单元测试示例为准。
下面是编写 ASP.NET Core 控制器的简单单元测试的一般步骤: 创建测试类: 在测试项目中创建一个测试类,该类将包含用于测试控制器行为的测试方法。...1.4 示例:编写ASP.NET Core Web Api Controller 的单元测试 下面是一个示例,演示如何编写 ASP.NET Core Web API 控制器的单元测试。...以下是一个简单的示例,演示如何编写一个集成测试: 假设你有一个简单的 ASP.NET Core Web API 应用程序,其中有一个控制器 ValuesController,它有一个 GET 方法返回一组固定的值...假设你有一个简单的 ASP.NET Core Web API 应用程序,其中包含一个控制器 TodoController,它用于管理待办事项。我们将编写一个集成测试来测试该控制器的行为。...在测试方法中,我们发送一个 GET 请求到 /api/todo 路径,并验证响应的状态码是否是成功的。
对于ASP.NET Web API的简单demo、安全认证、异常处理、内容协商、寄宿方式、错误处理等等,在这里就不再过于介绍,如果有时间博主会单独讲解这些内容。...在ASP.NET Web API中,一个控制器是处理HTTP请求的类。控制器的公共方法被称为动作方法或简单的动作。当Web API框架接收到一个请求,它请求路由到一个动作。...ASP.NET Web API的路由运行机制如下: (1).找到控制器,网络API将“控制器”的值 {}控制变量。 ...ApiController是ValuesController类的父类,是整个ASP.NET Web API的核心类,继承该类可以用来创建ASP.NET Web API控制器。...(3).运行各种筛选器,这些筛选器可以是为操作方法或控制器配置,也可以是全局的。 (4).为控制器类的操作方法提供适当的上下文状态。
在默认情况下,大多数异常都会转换为一个带有状态码500的内部服务器错误的HTTP响应。 这个HTTPResponseException类型是一个特殊的类型。...这种异常会返回你在异常构造器中指定的任何HTTP状态码。...注意:ASP.NET Web API中的异常过滤器与ASP.NET MVC中是及其相似的。然后,它们被声明在不用的命名空间下,且功能也是独立的。...特别强调以下,ASP.NET MVC中使用的HandlerErrorFilterAttribute不会处理Web API控制器抛出的异常。 ...HttpError对象为在响应正文中返回错误消息提供了响应的方法。
中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化 b) 比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API 分别编写代码...如果需要进行旧项目升级的,可以参考文章:《.NET项目迁移到.NET Core操作指南》 VS和.NET Core安装 VS2019安装教学 VS2019正式版注册码秘钥 修改nuget包默认存放路径,...Core 中使用多个环境(开发、预发布、生产)- 默认为 Production ASP.NET Core 动作结果(ActionResult) ASP.NET Core 中控制器操作的多路径返回类型(...Core 中访问 HttpContext 的方法 ASP.NET Core 中通过IHttpContextAccessor实现公用静态HttpContext 状态管理 常见方式:Cookie、Session...、TempData、查询字符串、HttpContext.Items、缓存、依赖关系注入 ASP.NET Core 中的会话和应用状态 #、session ASP.NET Core 在通用数据保护条例规则下使用
理想情况下,我们希望的HTTP响应。包含以下内容: 响应代码:在默认情况下,这个Web API框架设置响应状态码为200(OK)。...默认情况下,ASP.NET Web API框架从路由获取简单的参数类型,从请求正文获取复杂的类型。 第五个方法:删除产品,在控制器添加代码如下。...200(OK)与实体的描述该状态;如果删除依然挂起,则返回状态202(已接受);或状态与没有实体正文204(无内容)。...在这种情况下,DeleteProduct方法具有void返回类型,因此ASP.NET Web API自动转换此状态代码204(无内容) 运行测试 方法创建完毕后我们就可以运行服务端进行测试了 ? ...上述测试我们发现我们的路由只是“api/{controler}”就成功返回了GetProducts方法中的数据,这也是ASP.NET Web API与ASP.NET MVC 之间的区别。
在Asp.Net Core 上面由于现在前后端分离已经是趋势,所以asp.net core MVC用的没有那么多,主要以WebApi作为学习目标。...按照以前asp.net习惯和项目清晰度维护性我们一般是使用Controller的方式,并且不使用顶级语句。 而最小 API,是创建具有最小依赖项的 HTTP API。...如果同一控制器必须支持视图和 Web API,则派生自 Controller。...[ApiController] [ApiController] 属性可应用于控制器类,以启用下述 API 特定的固定行为: 1)属性路由要求:不能通过由 UseEndpoints、UseMvc 或...4)、错误状态代码的问题详细信息: 将错误结果(状态代码为 400 或更高的状态码)转换为为 ProblemDetails 的结果。也就是说状态码会转换如下json格式返回信息。
ASP.NET WEB API 功能 它支持基于约定的CRUD操作因为它支持HTTP 动词 GET, POST, PUT , DELETE。 响应包含http状态码和Accept header。...主要有以下区别: ASP.NET MVC 用来创建web应用返回视图和数据;但是ASP.NET WEB API 是用来创建完整的HTTP服务,仅返回数据无视图返回。...WEB API 的请求映射到Http动词对应的action;MVC 的请求直接映射到对应的action name。 ASP.NET WEB API是新的框架和ASP.NET框架核心的一部分。...您可以在单个项目中混合使用WEB API和MVC控制器来处理高级AJAX请求并以JSON,XML或任何其他格式返回数据,并构建完整的HTTP服务。通常,这将是WEB API自承载。...像ASP.NET MVC5那样,可以在WEB API2的controller级别和action级别定义特性路由: Controller level routing(控制器级别路由) 在控制器级别定义的特性路由将应用到所有
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。让我们通过本文的学习,好好了解一下状态码的工作机制。...1 状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。 借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。...这里写图片描述 表示从客户端发来的请求在服务器端被正常处理了。 在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。...比如,用户把 URI 保存成书签,但不会像 301 状态码出现时那样去更新书签,而是仍旧保留返回 302 状态码的页面对应的 URI 4 4XX 客户端错误 4XX 的响应结果表明客户端是发生错误的原因所在...这里写图片描述 该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
控制器的改进 全局的 Action 过滤器 有的时候你希望能够在在一个 Action 方法执行之前或者执行之后执行一些处理逻辑,在 ASP.NET MVC2 中,提供了 Action 过滤器,允许对特定控制器的...新的 ActionResult 类型 下面的 ActionResult 类型在 MVC3 中是新增的或者被扩展的。 . 向客户端返回 404 HTTP 状态....返回用户指定的 HTTP 状态码。...,并且允许你提供整个模型状态的验证错误信息,或者基于 Model 的两个属性。...无 Session 的控制器支持 MVC3 中可以指定控制器是否使用 Session 状态,进而,Session 是否是读写还是只读。
学习·进步 在平时的开发中,我们很少会关注到测试的问题,更别说集成测试了,除非是公司有硬性要求或者是自己的开源项目中,为了整体架构的完整性,需要用测试来做辅助点缀,而更多的也仅仅是单元测试(说的就是我自己...),最近在写书的时候才进一步考虑到这一点,如何在一个ASP.NET Core框架中,引入集成测试呢?...这里我结合这三年开源的经验,总结了一些心得,给大家分享一下,如果有更好的建议,欢迎在评论区进行留言哟。 PS:单元测试就不说了,比较简单,最多就是依赖注入和MOCK的问题,不会的话也可以留言。...,生成一个服务器,就可以发起请求了,核心的还是我们的WebHostBuilder。...page=1&pageSize=5"); // Assert 确保接口状态码是200 response.EnsureSuccessStatusCode(); 这种方案不仅兼容了第二种方案的优点
; 这是很难去做单元测试的因为控制器中硬编码了对数据库的查询,对于一个单元测试,你可以在没有确切设计之前,使用一个仿制的桩存储体。...,ASP.NET Web API在为请求映射了路由之后创建控制器,而且现在他不知道任何关于IProductRepository的细节,这是通过API依赖器解析到的。...ASP.NET Web API依赖解析器 ASP.NET Web API定义了一个IDependencyResolever用来解析依赖项目,以下是这个接口的定义: public interface IDependencyResolver...当ASP.NET Web API创建一个controller实例的时候,它首先调用IDependencyResolver的GetService方法,传回一个Controller实例,你可以使用一个扩展的钩子去创建控制器并且解析依赖...假如GetService方法返回NULL,ASP.NET Web API将查找一个无参的构造函数。
MVC 编程模式 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心(比如数据库记录列表)...Visual C# --> Web --> ASP.NET Web应用程序 MVC此时处于选中状态,勾选“添加单元测试”(最好选上,利于后期调试)。...全局应用程序控制文件 3、MVC中的约定: 视图访问和寻址规则 1)、在控制器中使用View()方法调用视图,返回和“动作方法同名”的视图 2)、寻址规则:View()方法默认从“View文件夹”下寻找和控制器同名的文件夹...,该参数的名称为ID,如果操作方法中有名为ID的参数,那么Asp.Net MVC 会自动将这个URL片段作为参数传进来,就是ID的值!...3 ,在MVC中,控制器才是核心,每一个请求都必须通过控制器处理,而且有些请求不需要模型和视图! 控制器就是MVC应用程序中的“指挥员”,它紧密的编排用户、模型对象和视图的交互。
HTTP 状态码为 200 或是 400,当状态码为 200 时,代表数据获取成功,接口可以正常返回数据,当状态码为 400 时,则代表接口访问出现问题,此时则返回错误信息对象。 ...在 ASP.NET Core Web API 中,我们可以通过在 Action 上添加 ProducesResponseType 特性来定义接口的返回状态码。...可能这里你可能会有疑问,当接口返回的 HTTP 状态码为 400 时,返回的信息是什么鬼,与我们定义的错误信息对象字段不同啊?...原来,在 ASP.NET Core 2.1 之后的版本中,对于 API 接口返回 400 的 HTPP 状态码会默认返回 ProblemDetails 对象,因为这里我们并没有将接口中的返回 BadRequest...同时,除了上面示例的接口中通过返回 OK 方法和 BadRequest 方法来表明接口的返回 HTTP 状态码,在 ASP.NET Core Web API 中还有下列继承于 ObjectResult
本文介绍 ASP.NET 中内置的验证功能,并介绍如何自定义验证返回信息,最后以统一社会信用代码为例,实现自定义的数据验证。...下面我们来实际使用一下: 项目演示 创建项目 首先我们创建一个 ASP.NET Core Web API 项目,记得不要使用最小 API,因为最小 API 没有对验证的内置支持,参见《最小 API 与具有控制器的..."data": "Any" } 对应错误返回使用 200 还是 400 的 HTTP 状态码,项目中协商一致按照统一标准即可。...不过,错误的状态码,可以通一进入错误的处理逻辑进行处理,也是比较好的方案,主要还是看个人喜好,有的前端框架,比如使用前端低代码的时候,会要求你后端出错要怎么返回。 如何统一错误返回呢?...与具有控制器的 API 之间的差异》: https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/min-web-api?
测试驱动 ASP.NET MVC Keith Burnell 下载代码示例 模型-视图-控制器 (MVC) 模式的核心是将 UI 功能划分成三个组成部分。模型表示您的领域的数据和行为。...该函数接受泛型参数 T,该参数表示为其查找具体实现的接口;并且返回 T,这是传入接口的实际实现。...通常,这意味着它具有 void 方法的空实现,并且函数实现包含返回硬编码值的返回语句,如下所示: public class LoggingServiceFake : ILoggingService {...这样做使我能够在不受到日志记录服务状态的影响下完成编码和单元测试,并且编写不依赖于任何依赖关系的真正的单元测试代码。...使用 StructureMap 作为默认的控制器工厂 ASP.NET MVC 提供了一个扩展点,使您能够添加在您的应用程序中实例化控制器的方式的自定义实现。
另一个阵营是本文的主角,如 ASP.NET Core 的 MVC 模式,通过路由配合参数传递,进行控制器处理的模式,此方式的优良设计已被 ASP.NET Core 所证明,本文也就不多说了 默认下,如此妙的...以下将演示 GET 和 POST 方法和对应的路由和参数调用方法 在服务端 PipeMvcServerDemo 项目上添加一个 FooController 控制器,代码如下 [Route("api/[controller...里面,将通过 ASP.NET Core MVC 框架层进行调度,分发到对应的控制器处理 // 控制器处理完成之后,将由 MVC 框架层将控制器的输出交给 PipeMvcServer...ASP.NET Core 层,再通过 MVC 框架之后拿到请求的返回值,将返回值封装为 IpcResponseMessageResult 返回给客户端 IpcServer =...那就是为了单元测试编写的 TestHost 机制 在 TestHost 机制里,开发者可以在单元测试里面开启 ASP.NET Core 主机,但是不需要监听任何网络的端口,所有对此主机的测试完全通过 TestHost
领取专属 10元无门槛券
手把手带您无忧上云