1. webApi属于RESTful架构风格, 而RESTful风格, 是以资源为视角来描述服务的

2. 创建webAPI项目

3. 选择webAPI, 然后mvc会自动引用

4. 点击确定, 就创建好一个WebAPI项目, 项目目录如下:

5. 现在就可以尝试访问了:

6. 简单介绍:

  a) 此时controller中有两个默认的controller

  b) webAPI的访问方式, 这里返回的是xml, 而ie下返回的是 json; 这是由response的返回头决定的, 可以f12看看返回头的定义

7. 在浏览器输入http://localhost:4071/api/values, 请求的过程是什么?

a) 一个网站启动的时候, 第一个启动的肯定是Global.asax文件中的WebApiApplication下面的Application_Start()站启动的时

  b)    路由注册:

8. webAPI的运转流程:

  1 启动的时候:  Application_Start-→WebApiConfig.Register-→把路由规则写入一个容器(routeTable)

  2 运行的时候: 请求会去容器匹配--找到第一个满足的控制器--然后按照以下规则去找action(http method):

a 优先查找方法时候标记了特性 [HttpGet], 如果有标记, 则优先找参数最佳匹配的

b 如果都没有有标记[HttpGet]特性, 则找方法以Get开头

c (找方法时)优先参数最匹配  api/values/1--→Get(int id); 也就是说当请求过来的时候, 又能找到以[HttpGet]特性的方法, 又能找到以 Get开头的方法, 那么则使用参数做为最佳匹配

d 如果没有 [HttpGet] 特性, 也没有以 Get开头的方法, 则直接会报错了

9. 基于WebAPI中的普通路由,访问时带来的两个问题:

  a)    对一个资源(webAPI中所说的资源可以理解为一条数据)做同一种操作, 可能有多种方式; 比如根据用户Id修改用户密码, 根据用户Id修改用户名称, 根据用户Id修改用户邮箱

  b)   WebAPI中经常会有版本的问题, 比如在一个values控制器里, 对某个方法进行升级, 表示v1版本, v2版本; 那么如果只使用webAPI的默认路由来调用的话, 就不能区分了

  以上两种问题, 只使用webAPI中的默认路由已经办不到了, 所以webAPI又提供了一种特性路由

  c)   特性路由的写法:

   1 在Global文件的config.MapHttpAttributeRoutes()中写;

  2 也可以直接在 控制器下的action上打特性路由标记, 比如    [Route("api/values")](下图) ; 参考 ValuesController.cs 中的路由特性标记

10. 添加控制器:

  a)  右键Controllers目录

b)  选择一个控制器类型

c)   命名控制器

d) 等待完成

e)  完成

20181124_webAPI基础01_创建一个基础的WebAPI项目的更多相关文章

  1. 规范化创建一个vs2017 Mvc框架项目

    vs2107 + dapper + MiniUi 标准化分层封装使 3.1 规范化创建一个vs2017 Mvc框架项目 此时创建的项目勾选 添加单元测试. 添加一个类库,主要用于实体类操作,类库名称 ...

  2. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  3. 以sb7code为基础创建一个基本的OpenGL项目

      以sb7code为基础创建一个基本的OpenGL项目   从github上面下载sb7code代码: https://github.com/openglsuperbible/sb7code 打开H ...

  4. 通过beego快速创建一个Restful风格API项目及API文档自动化(转)

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  5. 创建一个简单的Django项目

    1.首先,启动pycharm,点击File->New Project,如下图所示. 2.在New Project对话框中,选择Django,在Location中设置项目路径以及项目名称,在App ...

  6. 简单创建一个SpringCloud2021.0.3项目(四)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上三篇教程 3. 日志处理 1. 创建日志公共模块 2. Eureka引入日志模块 4. 到此的功能代码 5. 注册中心换成naco ...

  7. 简单创建一个SpringCloud2021.0.3项目(三)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上俩篇教程 3. Gateway集成sentinel,网关层做熔断降级 1. 超时熔断降级 2. 异常熔断 3. 集成sentine ...

  8. 简单创建一个SpringCloud2021.0.3项目(二)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上一篇教程 3. 创建公共模块Common 4. 网关Gateway 1. 创建Security 2. Security登陆配置 3 ...

  9. 简单创建一个SpringCloud2021.0.3项目(一)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 新建父模块和注册中心 1. 新建父模块 2. 新建注册中心Eureka 3. 新建配置中心Config 4. 新建两个业务服务 1. ...

随机推荐

  1. GET 和 POST 方法的区别

    GET 和 POST 是 HTTP 请求的两种基本方法,最直观的区别就是 GET 把参数包含在 URL 中,POST 通过 request body 传递参数. 一些标准的区别: 1. GET 在浏览 ...

  2. python 随机整数

    # Program to generate a random number between and # import the random module import random print(ran ...

  3. Facade(外观)

    意图: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性: 当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变 ...

  4. 【Docker】Windows下docker环境搭建及解决使用非官方终端时的连接问题

    背景 时常有容器方面的需求,经常构建调试导致测试环境有些混乱,所以想在本地构建一套环境,镜像调试稳定后再放到测试环境中. Windows Docker 安装 安装docker toolbox 博主的电 ...

  5. Rails-Treasure chest1 (自定义Model网址;多语言包; 时区设置, TimeZone类; 格式日期时间; 表单单选UI; 表单多选UI;Select2 Plugin)

    自定义Model网址: 随机值网址SecureRandom.base58 多语言包, 包括默认语言设置和user自设置. 时区设置, TimeZone类 ,增加user自选时区功能 格式日期时间: x ...

  6. Java线程状态分析

    Java线程的生命周期中,存在几种状态.在Thread类里有一个枚举类型State,定义了线程的几种状态,分别有: NEW: 线程创建之后,但是还没有启动(not yet started).这时候它的 ...

  7. nyoj1273 河南省第九届省赛_"宣传墙"、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  8. ES6学习笔记(一)——扩展运算符和解构赋值

    前言 随着前端工程化的快速推进,在项目中使用ES6甚至更高的ES7等最近特性早已不是什么新鲜事.之前还觉得既然浏览器支持有限,那了解一下能看懂就好,然而仅仅了解还是不够的,现在放眼望去,那些成熟框架的 ...

  9. MHA-ATLAS-MySQL高可用2

    六,配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...

  10. 使用Array类处理基本数组对象

    java里面的Arrays类有个asList方法,参数是1或多个Object对象,如果传入一个Object数组,则可以将该数组转化为List,但如果传入的是一个基本类型的数据(int,long,sho ...