随着Web API 2的发布,ASP.NET框架带来了一系列新特性,这些特性使得开发RESTful服务变得更加灵活和强大。本文将对这些新特性进行详细解析,包括属性路由、跨域资源共享、OWIN自托管、IHttpActionResult接口以及OData支持。
在传统的基于约定的路由中,可以通过定义多个路由模板来处理请求。当请求到达时,它将与已定义的路由模板进行匹配,并根据匹配的模板转发到特定的控制器动作。这种路由方式的好处是所有路由模板都定义在一个共同的位置,但对于某些URI模式来说,支持起来确实比较困难(例如在同一控制器上的嵌套路由)。
ASP.NET Web API 2引入了属性路由,使得支持上述URI模式以及其他复杂模式变得更加容易。以下是一个使用属性路由的URI模式示例:
[Route("books/{bookId}/authors")]
public IEnumerable<Author> GetAuthorByBook(int bookId) { ... }
通过属性路由,可以更灵活地定义路由,而不需要在路由表中进行复杂的配置。
由于同源策略的限制,浏览器通常不允许进行跨域调用。那么,什么是CORS(跨域资源共享)呢?CORS是一种机制,它允许一个网页发起对其他域的AJAX调用,而不仅仅是渲染该网页的域。CORS符合W3C标准,ASP.NETWeb API 2在版本2中增加了对它的支持。
CORS的引入,使得Web API可以更容易地与其他域的Web页面进行交互,从而提高了Web API的灵活性和可用性。
ASP.NET Web API 2带来了一个新的自托管包,即Microsoft.AspNet.WebApi.OwinSelfHost。根据OWIN官网的定义,OWIN定义了.NET Web服务器和Web应用程序之间的标准接口。OWIN接口的目标是解耦服务器和应用程序,鼓励开发简单的.NET Web开发模块,并通过成为开放标准来刺激.NET Web开发工具的开源生态系统。
OWIN是自托管Web应用程序的理想选择,尤其是在非IIS进程中。有许多OWIN实现可供选择,如Giacomo、Kayak、Firefly等,但Katana是Microsoft服务器和Web API框架推荐的实现。
除了现有的两种从控制器动作创建响应的方法外,ASP.NET Web API 2现在还支持另一种方式。IHttpResponseMessage本质上是一个接口,它充当HttpResponseMessage的工厂。这种方法非常强大,因为它扩展了Web API。使用这种方法,可以组合任何特定类型的响应。
通过IHttpActionResult,可以更灵活地控制响应的内容和格式,从而提供更丰富的API体验。
OData(Open Data Protocol)实际上是一种用于查询和更新数据的Web协议。ASP.NETWeb API 2增加了对OData的$expand、$select和$value选项的支持。通过使用这些选项,可以控制从服务器返回的表示形式。
$expand:通常,当查询一个OData集合时,响应不包括相关实体。通过使用$expand,可以在响应中内联获取相关实体。
$select:如果只想在响应中包含属性的子集而不是全部,可以使用$select。
$value:它允许返回属性的原始值,而不是以OData格式返回。
OData的支持使得Web API可以更灵活地处理数据查询和更新,从而提高了API的灵活性和可用性。