什么以及为什么 Asp.Net Web API2

什么和为什么?

Asp.Net 的 Web API2 是 Web API 的最新版本。使用 Asp.Net 框架提供的所有优点,这是一种实现 RESTful Web 服务的简单方法。一旦理解了 REST 的基本原理,就可以很容易地实现 Asp.net Web API2。Web API2 构建于 Asp.Net 的模块化可插拔管道模型之上。这意味着当托管 Web API2 的服务器收到请求时,它首先通过 Asp.Nets 请求管道。如果你发现默认功能不足以满足你的需求,则可以轻松添加自己的模块。随着最近关于 ASP.net vNext 的公告,这也意味着你可以在 Windows Server 之外托管 Web API2,从而打开了一系列用例。详情请见此处

怎么样?

Web API2 使用 MVC 中的 Controller 和 Action 概念。资源直接映射到控制器; 你通常会为每个主要数据实体(产品,人员,订单等)使用不同的控制器。Web API2 使用 Asp.Net 路由引擎将 URL 映射到控制器。通常,API 保存在/api/路由中,这有助于区分 API 控制器与同一网站中的其他非 API。

操作用于映射到特定的 HTTP 谓词,例如,你通常会有一个返回所有实体的 GET 操作。这个动作会响应/api/Products(其中’products’是你的控制器),看起来像这样:

 public IEnumerable<string> Get()
 {
     return new string[] { "value1", "value2" };
 }

你可能还有一个 GET 操作,它接受特定的 ID 并返回一个特定的实体。它会响应/api/Products/81,看起来像这样:

public string Get(int id)
 {
    return "value";
 }

使用 Web API 有很多隐藏的好处,你可能没有意识到,但实际上为你节省了大量的工作。

Web API2 是’One Asp.Net’的一部分

Web API2 是“One Asp.Net”系列的一部分,这意味着它本身支持你当前可能与 MVC 或 Web 表单一起使用的所有优秀共享功能,这包括(这些仅是几个示例):

  • 实体框架
  • 授权和身份
  • Scaffolding
  • 路由

序列化和模型绑定

Web API2 默认设置为以 XML 或 JSON 格式提供响应(默认为 JSON)。但是,作为开发人员,你不需要进行任何转换或解析 - 你只需返回一个强类型对象,Web API2 将其转换为 XML 或 JSON 并将其返回给调用客户端,这是一个名为 Content Negotiation 的过程。这是一个 GET 动作的示例,它返回一个强类型的 Product 对象。

 public Product GetProduct(int id)
 {
    var product = _products.FirstOrDefault(p => p.ID == id);
    if (product == null)
    {
       throw new HttpResponseException(HttpStatusCode.NotFound);
    }
    return Request.CreateResponse(HttpStatusCode.OK, product);
 }

这也适用于使用称为模型验证的功能的传入请求。通过模型验证,Web API2 能够验证传入的响应正文数据并将其解析为强类型对象,以便你在代码中使用。这是模型绑定的一个示例:

 public HttpResponseMessage Post(Product product)
 {
     if (ModelState.IsValid)
     {
         // Do something with the product (not shown).
 
         return new HttpResponseMessage(HttpStatusCode.OK);
     }
     else
     {
         return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
     }
 }