• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【译】ASP.NETCoreWebAPIs(一):使用ASP.NETCore创建WebAPIs【上篇】 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文链接:传送门

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 请求。举个例子,ControllerBase.CreatedAtAction返回一个201状态码。

[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提供的方法的更多例子:

方法 注意
BadRequest 返回400状态码
NotFound 返回404状态码
PhysicalFile 返回一个文件
TryUpdateModelAsync 激活模型绑定
TryValidateModel 激活模型验证

所有可用的方法和属性的列表,请查看 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);
}

如下是可用的特性的更多示例:

TABLE 2
Attribute Notes
[Route] 为控制器或者动作方法指定URL模式
[Bind] 指定为模型绑定所包含的前缀和属性
[HttpGet] 标识一个动作方法仅支持HTTP GET动作谓词
[Consumes] 指定一个动作方法所接收的数据类型
[Produces] 指定一个动作方法返回的数据类型

获取包含所有可用特性的列表,请参考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
    {
        ...
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net组件(3):RenderControl,Render,RenderChildren三者的关系发布时间:2022-07-10
下一篇:
ASP.NET获取MSSQLServer安装实例发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap