zoukankan      html  css  js  c++  java
  • 路由

    Web API路由与MVC路由非常类似,最主要的差异在于Web API是使用HTTP Method(GET,POST,PUT,DELETE…)而不是使用URI路径来选择Action。Web API中的路由主要分为默认路由,自定义路由和特性路由。

    image

                      图1:Web API

    image

                      图2:MVC

     

    默认路由

    默认情况下,Web API已经自带一个路由,如下图

    1.路由表

    当Web API接收到HTTP请求时,它会去尝试比对URI与路由表,如果找到则mapping到相应的action上,如果没有则会抛出404错误。假如我们定义了如下Controller。

    image

    假如有下面这些请求,看它们是如何匹配的。

    image

    总结:

    ①Web API首先会看请求的HTTP方法,然后去找以该HTTP方法名开头的action。

    ②依约定,我们的方法名最好以HTTP方法名开头,比如 GetAllContacts ()。

     
    自定义路由

    1.指定HTTP方法

    可以显示指定HTTP方法来代替命名约定,如下代码。

    image

    2.指定Action

    如果使用默认的路由,Web API会依请求的HTTP方法去匹配action。我们也可以使用类似于MVC中的路由(带action),方法是在Web API的路由模板中增加以下代码段。

    image

    此时,GET api/contact/001和GET api/contact/searchcontactbyid/001都会映射到同一个action,如下图

    image

    也可以使用特性ActionName来覆写路由模板中的action段,比如,下面有两个action都对应到同一个url,但是一个支持GET方法,另一个支持POST方法,如下图。

    image

    3.隐藏Action

    如果我们不想公开某个action,或者某个action被弃用了,可以使用特性NonAction来标注它即可,如下图。

    image

    再使用GET api/contact/searchprivatedata/001请求,就会出现404错误。

     
    特性路由(attribute routing)

    Web API 2为我们带来了全新的路由方式即特性路由,它使定义URI时更加容易和灵活,同时,它对之前基于命名约定的路由(Web API 1)完全兼容,我们可以在项目中同时使用这两种路由技术。要想使用特性路由有以下步骤。

    1.启用特性路由

    注:必须使用.net framework 4.5+版本

    ①调用MapHttpAttributeRoutes方法

    image

    ②更新Global.cs,如下图。

    image

    2.添加Route特性

    在action上添加Route特性,如下图,匹配的url为:GET api/contact/searchcontactbyid/001

    image

    3.Route前缀

    可以在Controller级别添加统一的路由前缀,如下图。

    image

    4.Route约束

    如果我们要严格限制action参数的传递,可以使用Route约束来实现,语法格式为:{parameter:constraint},比如,要限制该action的参数id必须为string类型,我们可以这么做,如下图。

    image

    GET api/contact/searchcontactbyid/1 匹配

    GET api/contact/searchcontactbyid/aaa 404错误

    转自:http://www.cnblogs.com/mcgrady/p/4701899.html

  • 相关阅读:
    解决无法安装Microsoft .Net Framework 3.5
    day11-15,装饰器
    Xmanager Power Suit 6.0.0009 最新版注册激活
    eth
    MySql 8.0 版本使用navicat连不上解决
    day11
    Mybatis使用规则
    nginx的基本配置
    Mybatis分页插件PageHelper使用
    dubbo的使用
  • 原文地址:https://www.cnblogs.com/luoyedemeng/p/4775671.html
Copyright © 2011-2022 走看看