20181124_webAPI基础01_创建一个基础的WebAPI项目
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项目的更多相关文章
- 规范化创建一个vs2017 Mvc框架项目
vs2107 + dapper + MiniUi 标准化分层封装使 3.1 规范化创建一个vs2017 Mvc框架项目 此时创建的项目勾选 添加单元测试. 添加一个类库,主要用于实体类操作,类库名称 ...
- 通过beego快速创建一个Restful风格API项目及API文档自动化
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...
- 以sb7code为基础创建一个基本的OpenGL项目
以sb7code为基础创建一个基本的OpenGL项目 从github上面下载sb7code代码: https://github.com/openglsuperbible/sb7code 打开H ...
- 通过beego快速创建一个Restful风格API项目及API文档自动化(转)
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...
- 创建一个简单的Django项目
1.首先,启动pycharm,点击File->New Project,如下图所示. 2.在New Project对话框中,选择Django,在Location中设置项目路径以及项目名称,在App ...
- 简单创建一个SpringCloud2021.0.3项目(四)
目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上三篇教程 3. 日志处理 1. 创建日志公共模块 2. Eureka引入日志模块 4. 到此的功能代码 5. 注册中心换成naco ...
- 简单创建一个SpringCloud2021.0.3项目(三)
目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上俩篇教程 3. Gateway集成sentinel,网关层做熔断降级 1. 超时熔断降级 2. 异常熔断 3. 集成sentine ...
- 简单创建一个SpringCloud2021.0.3项目(二)
目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上一篇教程 3. 创建公共模块Common 4. 网关Gateway 1. 创建Security 2. Security登陆配置 3 ...
- 简单创建一个SpringCloud2021.0.3项目(一)
目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 新建父模块和注册中心 1. 新建父模块 2. 新建注册中心Eureka 3. 新建配置中心Config 4. 新建两个业务服务 1. ...
随机推荐
- 解决QML Window 增加radius效果
做开发时,突然遇到 一个需要模态展示的对话框,做出来后,发现还要radius属性,增加时发现,Window控件不支持这个属性.如果是以前,原本就打算放弃了,但想一下,这种应该是支持的,既然接口上没有, ...
- python2.7和python3.6共存,使用pip安装第三方库
因为一般情况下,window命令行运行pip,默认的情况是运行python3.6的pip,安装第三方库的路径也是python3.6,安装路径是: 如何运行在2.7环境下安装PIP呢?有网上的教程说需要 ...
- vim 安装vim-airline
在.vimrc中添加 Plugin 'vim-airline/vim-airline' Plugin 'vim-airline/vim-airline-themes' 然后打开vim编辑器执行 :Pl ...
- 使用quartz实现定时器功能
首先导入两个包 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qua ...
- undefined 与 null
typeof null - 'object typeof undefined - 'undefined' Boolean(null) - false Boolean(undefin ...
- Android 自定义注解(Annotation)
现在市面上很多框架都有使用到注解,比如butterknife库.EventBus库.Retrofit库等等.也是一直好奇他们都是怎么做到的,注解的工作原理是啥.咱们能不能自己去实现一个简单的注解呢. ...
- 【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?
原文链接:http://www.51testing.com/html/49/n-3721249.html 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?loc ...
- 读underscore
最近在拜读只有1700行(含注释)代码的Underscore.js 1.9.1,记录一些东西 (参考https://underscorejs.org/underscore.js,https://git ...
- Pave the Parallelepiped CodeForces - 1007B (计数)
大意: 给定A,B,C, 求有多少个三元组$(a,b,c)$, 满足$a \le b \le c$, 且以若干个$(a,b,c)$为三边的长方体能填满边长(A,B,C)的长方体. 暴力枚举出$A,B, ...
- js 文件系统API操作示例
最近有个需求是:自动抓取某网站登录页面的验证码图片并保存,抓取n次.使用chrome插件来实现,其中使用到了js操作文件系统的api,特将代码记录下来,以备查阅. PS:第一次使用js文件系统的api ...