,分为白盒测试、黑盒测试和灰盒测试 从测试执行方式上,分为手动测试和自动化测试 从测试所涉及的层次上,分为单元测试、集成测试和系统测试 单元测试由开发人员完成,主要用来测试程序中的类以及其中的方法是否能够正确运行...在添加单元测试方法时,应遵循 Arrange-Act-Access 模式,使测试方法的代码更加规范,该模式指明了每个测试方法由以下3部分组成: Arrange:为测试进行准备操作,如设置测试数据、变量和环境等...AuthorController 的 Response 属性默认为空,通过设置 ControllerContext,使得 AuthorController 对象的 Request 和 Response...authorController.GetAuthorsAsync(parameters); // Assert List resourceCollection = actionResult.Value...当数据准备好后,调用待测试的方法,并得到该方法的返回值,之后使用 Assert 类提供的静态方法来验证结果是否符合预期
AddUser(User user) { return Ok(); } 4、使用 Postman 调用,没有添加任何参数,返回的结果为 200 ?...错误状态码详细信息 之前的版本中,如果接口返回一个 BadRequest,是没有内容的,只有状态码,如下: ? 加上 [ApiController] 特性后,结果如下: ?...HTTP 状态码 正确的返回状态码有助于客户端分析请求返回结果和问题排查,常用的状态码如下: ?...正确的做法应该是对参数做相关校验最终返回相应的 4XX 的状态码。...同样的接口在前端不同的场景下需要返回不一样的字段数据,一种方式是创建很多不同的接口,返回不同的 Dto 的结果,但这样做非常繁琐,可以通过 ExpandoObject 来实现按客户端的需要进行返回结果,
因此,我们既可以在Action中返回视图,还可以返回文件流、重定向、空内容等结果。...,通过访问浏览器端的源代码,发现是一个空内容; public ActionResult Empty() { return new EmptyResult(); } ? ...(3)在MapRoute方法中为所有URL请求定义了一个defaults默认值:controller为空则指向Home,action为空则指向Index,而id则是可选的,非必须要的。 ...我们可以通过为RouteValueDictionary字典对象添加键为"httpMethod", 值为一个HttpMethodConstraint对象来为路由规则添加HTTP 谓词的限制,比如限制一条路由规则只能处理...: ①访问 www.mywebsite.com/hotels/list-chengdu-100,200-3 会访问酒店频道的列表页,并传入查询参数(price为100,200,star为3);
[Bind] 指定要包含的前缀和属性,以进行模型绑定。 [Consumes] 指定某个操作接受的数据类型。 [Produces] 指定某个操作返回的数据类型。...前端提交的是 Json 对象,遵循 Json 的格式规范,那么 [FromBody] 把它转为 Object 对象。...下面使用这些属性来指定 Controller 或 Action 接受的 HTTP 方法、返回的数据类型或状态代码。...:xxx/aaa 四,返回类型 1, 查询备忘表 Microsoft.AspNetCore.Mvc 命名空间中,包含控制 MVC 的各种操作方法和类型,笔者从命名空间中抽出与 MVC 或 API 返回类型有关的类型...2, 返回的数据类型 特定类型 IActionResult 类型 ActionResult 类型 Action 的 return ,返回的数据类型必定是上面三种。
通过上面的代码片断可以看出ViewContext是ControllerContext的子类,用于表示状态数据的ViewData、ViewBag和TempData对应着ControllerBase的同名属性...也就是说当执行从Controller的某个Action方法返回的ViewResult的时候,通过创建的ViewContext保持的状态数据直接来源于Controller对象。...IView接口的类型的对象,而是一个类型为System.Web.Mvc.ViewEngineResult对象。...实际上当这两个方法被调用的时候,会先采用缓存的方式调用相应的ViewEngine,如果返回为Null,则以不采用缓存的方式再次调用它们。...在FindView方法的内部会直接调用ViewEngineCollection属性的FindView方法,如果返回的ViewEngineResult包含一个具体的View(View属性不为空),则直接返回该
,正常情况下返回“200 OK”。...System.Web.Mvc.HttpStatusCodeResult使我们很容易地返回一个指定状态的HTTP响应。...如下面的代码片断所示,HttpStatusCodeResult具有StatusCode和StatusDescription两个只读的属性分别表示响应状态码和状态描述信息。...,第7章“Action的执行”中筛选器AuthorizeAttribute在授权检验失败的情况下返回的就是一个HttpUnauthorizedResult对象。...如下面的代码片断所示,RedirectResult具有两个只读属性Permanent和Url,前者表示采用永久重定向还是暂时重定向,默认值为False,后者表示重定向的目标地址,既可以采用绝对地址(比如
《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。...我们在《[上篇]:路由整合》将定义在Controller类型中的Action方法简化成只返回Task或者Void的方法,并让方法自身去完成包括对请求予以相应的所有请求处理任务,但真实的MVC框架并非如此...如下面的代码片段所示,我们将Action方法FooAsync和Bar的返回类型分别替换成Task和IActionResult,具体返回的都是一个ContentResult对象...由于FooAsync方法将内容类型设置为 “text/html” ,所以浏览器会将返回的内容作为一个HTML文档进行解析,但是Bar方法将内容类型设置为 “text/plain” ,所以返回的内容会原封不动地输出到浏览器上...如代码片段所示,Convert方法将返回个内容类型为“text/plain”的ContentResult对象,原始对象字符串描述(ToString方法的返回值)将作为响应主题的内容。
返回类型为JavaScriptResult的Action方法一般用于处理Ajax请求。...我们在默认的Action方法Index中创建一个包含三个商品的ShoppingCart对象,并将其作为Model呈现在对应的View中。...但是对于后台程序来说,数据却是通过一个基于某种CLR类型的对象来承载,当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON...如下面的代码片断所示,JsonResult具有一个object类型的属性Data表示需要被转换成JSON格式的数据对象。...RecursionLimit用于设置被序列化对象和反序列化生成对象结构的允许的层级数,默认值为100。
在Rest风格中使用状态码来标识返回结果,其中常用200、201、400、401、404、410、500等。...返回状态码 在RPC中Post请求我们习惯如果请求已经在服务器处理,不管处理结果是否正确,我们都返回200状态码。然后在返回数据中用其它信息来标识业务结果。...因此我们在实际设计中可能会进行Rest裁剪,我们既使用RPC的返回结果,同时多用准确的状态码,不用什么都返回200。...使用RPC风格,尽量使用合理谓词,不知道使用什么谓词的时候就用POST,Get Delete参数尽量用资源定位URL,业务错误服务端返回合适的状体吗,不知道返回什么就返回400,如果请求处理成功就用200...并且保留了参数URL的方式。 关于返回状态码的问题可以有两种方式,一种是直接在ControllerBase.Response 响应中指定返回状态码。
首先来说几种常见的返回类型的例子,并用Fiddler请求这几个例子看一下结果,涉及到的一个名为Book的类,代码为: public class Book { public...例如SyncActionResultExecutor会通过EnsureActionResultNotNull方法确保返回的结果不能为空。 如果是sting类型呢?...=======>OnResultExecuting 同时返回结果也不再是JSON值了,返回结果以及Content-Type全部为空。...但却将正确的结果返回给了客户端。 Result Filter介绍完了,看一下核心的IActionResult的执行。 4....ViewResult会有对应的ViewExecutor来执行,会通过相应的规则生成一个 Html页面。 而EmptyResult的ExecuteResult方法为空,所以不会返回任何内容。
在Execute方法中,通过作为方法参数的RequestContext对象创建ControllerContext对象,并通过包含在RequestContext中的RouteData得到目标Action的名称...如果参数类型为字符串或者简单的值类型,我们直接根据参数名称和Key进行匹配;对于复杂类型(比如之前例子中定义的包含Contrller和Action名称的数据类型SimpleModel),则通过反射根据类型创建新的对象并根据属性名称与...和真正的ASP.NET MVC一样,定义在Contrller的Action方法返回一个ActionResult对象,我们通过指定它的Execute方法是先对请求的响应。...三、ActionResult 我们为具体的ActionResult定义了一个ActionResult抽象基类。...context); 4: } 在之前创建的例子中,Action方法返回的是一个类型为RawContentResult的对象。
17 context.RemapHandler(httpHandler); 18 } 19 } 20 } 看到了吧,通过路由规则,返回的不为空,说明匹配正确...匹配成功后,返回一个RouteData类型的对象,RouteData对象都有些什么属性呢?...顺理成章的返回了MvcHandler对象。记得我们前面说过,请求最终是被相对应的HttpHander对象处理的。MvcHandler就是那个用来处理Mvc请求的HttpHandler。...方法,返回ActionResult实例。...所有的Action方法有一个特性,就是返回一个ActionResult类型的数据。
OnAuthentication方法的这个参数类型为AuthenticationContext,如下面的代码片断所示,它是ControllerContext的子类。...AuthenticationContext的ActionDescriptor返回的自然是用于描述目标Action方法的ActionDescriptor对象。...这个AuthenticationChallengeContext对象的Result属性最终返回的ActionResult对象将被用来对请求予以响应。...客户端向服务端发送一个HTTP请求,服务端返回一个状态为“401, Unauthorized”的响应。该响应具有一个“WWW-Authenticate”的报头标明采用的是Basic认证方案。...,那么客户端最终会接收到一个状态为“401, Unauthorized”的响应。
最后一个参数是一个匿名对象(anonymous object),用来生成路由数据 (在本例中,ID 为 4 的)。...查看App_Start\RouteConfig.cs文件中的以下代码。 MapRoute方法是使用HTTP请求路由查找到正确的控制器(controller)和行动方法,并提供了可选ID的参数。...他们得到一个电影对象(或对象列表中,如本案例的Index),并把模型数据传递给视图。Create方法传递一个空的影片对象给Create视图。...前几行的代码会创建一个List对象来保存数据库中的电影流派。 下面的代码是从数据库中检索所有流派的 LINQ 查询。...下面的代码演示如何检查movieGenre参数。如果它不是空的,代码进一步指定了所查询的电影流派。 if (!
在ASP.NET MVC中,会调用MvcHandler的ProcessRequest()方法,此方法会激活具体请求的Controller类对象,触发Action方法,返回ActionResult实例。...② 花样的返回类型 : ActionResult 以及它的子类们 ? ...在以往的ASP.NET MVC开发中,我们在Action方法的编写中,总会看到它们的返回类型都是以ActionResult为基类的各种Result类型。.../// /// Action统一的返回类型 /// public abstract class ActionResult {...它们的区别就在于是不同的返回类型,因此有不同的处理。 这里以ContentResult 和 JsonResult 为例,来看看具体做了什么处理。
201 Created 状态码,并在响应消息头中包含 Location 项,它的值是新创建资源的 URL // 第一个参数是要调用 Action 的路由名称 // 第二个参数是包含要调用...{ authorId = authorCreated.Id }, authorCreated); } 当数据发生变化时,EF Core 会将实体对象的属性及其状态修改,只有在调用 DbContext...var bookDto = Mapper.Map(book); return bookDto; } 当添加一个子级资源,将 BookForCreationDto 对象映射为...Map 方法的另一个重载 object Map(object source, object destination, Type sourceType, Type destinationType); 它能将源映射到一个已经存在的对象...,不同的是获取需要部分更新的 Book 实体后,首先将它映射为 BookForUpdateDto 类型的对象,其次使用 JsonPatchDocument 的 ApplyTo 方法将更新信息应用到映射后的
这个示例展示数据库的运行状态,他在其验证数据库连接并返回相应的结果 [Route("health")] public ActionResult Health()...,如果连接到数据库时出现任何连接问题,它将显示一条包含200状态代码和503状态代码的空消息。...现在基于这些结果状态码,我们可以监视系统采取相关的操作。 从.NET Core2.2开始,我们不需要为运行状态在去自定义检查控制器和接口,而是框架本身已经为我们提供了运行状况的检查服务。...,结果是HealthCheckResult对象,该对象包含3个选项 Healthy 健康 Unhealthy 不良 Degraded 降级 option 2 实现IHealthCheck接口并实现CheckHealthAsync...自定义状态码 在之前我们也说过200为健康,503为不健康那么Healthcheck服务甚至通过以下方式使用其options对象提供自定义状态代码,为我们提供了更改此默认的状态码。
领取专属 10元无门槛券
手把手带您无忧上云