zoukankan      html  css  js  c++  java
  • 2.1WebApi的路由

    这篇文章描述 ASP.NET Web API如何将 HTTP 请求通过路由去访问控制器。

    如果你熟悉 ASP.NET MVC,Web API 路由是非常类似于 MVC 路由。主要的区别是 Web API 使用的 HTTP 方法,而不是 URI 路径,选择的操作。您还可以使用 MVC 那样的路由在Web API 中。这篇文章不承担任何的 ASP.NET MVC 的知识。

    路由表

    在 ASP.NET Web API,控制器是一个类,负责处理 HTTP 请求。控制器的公共方法被称为操作方法或简单地行动当 Web API 框架收到请求时,它将请求路由到行动。

    若要确定要调用哪个操作,框架使用的路由表Web API 的 Visual Studio 项目模板创建一个默认路由 ︰

    1 routes.MapHttpRoute(
    2     name: "API Default",
    3     routeTemplate: "api/{controller}/{id}",
    4     defaults: new { id = RouteParameter.Optional }
    5 );

    这条路线被定义在 WebApiConfig.cs 文件中,放置在 App_Start 目录中 ︰

    更多的信息去向WebApiConfig类,请参见配置 ASP.NET Web API.

    如果你自承载 Web API,您必须直接在HttpSelfHostConfiguration对象上设置的路由表。更多的信息,请参阅自承载 Web API.

    在路由表中的每个条目包含一个路线模板Web API 的默认路由模板是"api / {控制器} / {id}"。在此模板中,"api"是一种文字路径段和 {控制器} 和 {id} 占位符变量。

    当 Web API 框架收到 HTTP 请求时,它尝试匹配的 URI 对路由表中路由模板之一。如果没有路由匹配,客户端收到一个 404 错误。例如,以下 Uri 匹配的默认路由 ︰

    • / api/联系人
    • /api/contacts/1
    • /api/products/gizmo1

    然而,以下的 URI 不匹配,因为它缺乏"api"部分 ︰

    • 联系人/1

    注 ︰在流程中使用"api"的原因是为了避免碰撞与 ASP.NET MVC 路由。这种方式,你可以有"/ 联系人"转到 MVC 控制器和"/ api/联系人"转到 Web API 控制器。当然,如果你不喜欢本公约,您可以更改默认的路由表。

    一旦找到匹配的路由,则 Web API 选择控制器和操作 ︰

    • 若要查找控制器,Web API 中添加"控制器" {控制器}变量的值。
    • 若要查找行动,Web API 看 HTTP 方法,,,然后寻找其名称以该 HTTP 方法名称开始行动。例如,与一个 GET 请求,Web API 查找入手"得到...",如"GetContact"或"GetAllContacts"的行动。本公约只适用于获取、 发布、 放,和删除方法。你可以通过在您的控制器上使用属性启用其他 HTTP 方法。我们会再见的例子。
    • 在路线的模板,例如{id},其他占位符变量映射到操作参数。

    让我们看看一个例子。假设你定义以下控制器 ︰

    1 public class ProductsController : ApiController
    2 {
    3     public void GetAllProducts() { }
    4     public IEnumerable<Product> GetProductById(int id) { }
    5     public HttpResponseMessage DeleteProduct(int id){ }
    6 }

    下面是一些可能的 HTTP 请求,以及获取调用每个行动 ︰

    请注意, {id}部分的 URI,是否存在,映射到行动的id参数。在此示例中,控制器定义两个 GET 方法,一个带id参数,另一个不带参数。

    同时,要注意,POST 请求将失败,因为该控制器未定义"邮政..."方法。

    路由的变化

    上一节描述了 ASP.NET Web API 的基本路由机制。本节描述了一些变化。

    HTTP 方法

    而不是使用 HTTP 方法的命名约定,你可以通过装饰与公共、 HttpPut、 HttpPostHttpDelete属性的操作方法显式指定的 HTTP 方法的行动。

    在以下示例中,FindProduct 方法被映射到 GET 请求 ︰

    1 public class ProductsController : ApiController
    2 {
    3     [HttpGet]
    4     public Product FindProduct(id) {}
    5 }    

    若要允许多个 HTTP 方法采取行动,或不允许 HTTP 方法得到,放,张贴,和删除,使用AcceptVerbs属性,采用 HTTP 方法的列表。

    1 public class ProductsController : ApiController
    2 {
    3     [AcceptVerbs("GET", "HEAD")]
    4     public Product FindProduct(id) { }
    5 
    6     // WebDAV method
    7     [AcceptVerbs("MKCOL")]
    8     public void MakeCollection() { }
    9 }

    路由的操作名称

    与默认路由选择模板,Web API 使用的 HTTP 方法选择的操作。不过,您还可以创建 URI 中包括的操作名称是哪里一条路线 ︰

    1 routes.MapHttpRoute(
    2     name: "ActionApi",
    3     routeTemplate: "api/{controller}/{action}/{id}",
    4     defaults: new { id = RouteParameter.Optional }
    5 );

    此路线模板中的{行动}参数名称在控制器上的操作方法。与这种风格的路由,使用属性来指定允许的 HTTP 方法。例如,假设您的控制器具有以下方法 ︰

  • 相关阅读:
    中文分词算法工具hanlp源码解析
    Hanlp分词1.7版本在Spark中分布式使用记录
    Window离线环境下如何安装pyhanlp
    如何编译运行HanLP自然语言处理包
    函数调用面试题
    构造函数复习
    面向对象的好处
    递归实现查找页面所有节点
    面向对象和原型
    chrome浏览器调试工具的使用
  • 原文地址:https://www.cnblogs.com/duyao/p/5442602.html
Copyright © 2011-2022 走看看