在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文链接:传送门。 ASP.NET Core 支持使用C#创建Restful风格的服务,也被称之为 Web APIs。一个Web API 使用 Controller 来处理请求。在Web API中Controller是继承自ControllerBase的类。这篇文章介绍了如何使用Controller来处理web API 的请求。 ControlleBase类 一个web API项目包括一个或者多个继承自ControllerBase的控制器。web API项目模板提供了一个作为开始的Controller: [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase 不要通过继承 Controller 类来创建web API控制器。Controller继承自ControllerBase并且添加了对于试图的支持,因此其是用来处理web页面请求的,而不是web API请求。 但这个规则也有例外,如果你打算使用同一个控制器来服务于页面和web API,那么便继承Controller。 ControllerBase提供了许多属性和方法,其可用于处理HTTP 请求。举个例子, [HttpPost] [ProducesResponseType(StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public ActionResult<Pet> Create(Pet pet) { pet.Id = _petsInMemoryStore.Any() ? _petsInMemoryStore.Max(p => p.Id) + 1 : 1; _petsInMemoryStore.Add(pet); return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet); } 如下是ControllerBase提供的方法的更多例子:
所有可用的方法和属性的列表,请查看 ControllerBase。 特性 Microsoft.AspNetCore.Mvc 命名空间提供了一些特性,其可用于配置web API控制器和动作方法的行为。如下例子使用特性来指定支持的HTTP动作谓词以及任何已知的可被返回的HTTP状态码。 [HttpPost] [ProducesResponseType(StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public ActionResult<Pet> Create(Pet pet) { pet.Id = _petsInMemoryStore.Any() ? _petsInMemoryStore.Max(p => p.Id) + 1 : 1; _petsInMemoryStore.Add(pet); return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet); } 如下是可用的特性的更多示例:
获取包含所有可用特性的列表,请参考Microsoft.AspNetCore.Mvc 命名空间。 ApiController 特性 [ApiController]特性可被用于一个控制器类以启用如下固定的,API特定的行为:
其中,Problem details for error status codes 特性需要的兼容性版本为2.2及以后,其他特性所需要的兼容性版本为2.1及以后。 在特定控制器上的特性 [ApiController]特性可被用于特定的控制器上,就如同如下来自于工程模板的示例: [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase 应用于多个控制器的特性 在超过一个控制器上使用特性的一个方案是创建自定义的基类控制器类并使用[ApiController]特性类标记它。如下实例展示了一个自定义的基类以及一个继承于它的控制器类: [ApiController] public class MyControllerBase : ControllerBase { } [Produces(MediaTypeNames.Application.Json)] [Route("[controller]")] public class PetsController : MyControllerBase 应用于程序集的特性 如果兼容性版本被设置为2.2及以后,[ApiController]可用于程序集上。在这种方式下,标记将web API的行为应用到程序集的所有控制器中。没有办法挑选单独的控制器。将程序集级别的特性应用于包围着Startup类的命名空间声明: [assembly: ApiController] namespace WebApiSample { public class Startup { ... } }
|
请发表评论