重温ASP.NET WebAPI(一)初阶

 

前言

本文为个人对WebApi的回顾无参考价值。主要简单介绍WEB api和webapi项目的基本结构,并创建简单地webaapi项目实现CRUD操作。

在商业应用领域中,应用之间的关联是相当重要的,应用之间如移动应用或者单页应用的创建,都需要强大的后端服务提供相应的数据以便进行CRUD操作。

WCF and WebApi 的不同

WCF是基于SOAP协议,支持多种传输协议,多种编码,寄宿于.net framework下,需要生产WSDL代理类文件,更安全可靠。

WebApi是基于HTTP协议,支持XML和json,开源可独立出.net framework。REST风格更适合。

WCF

ASP.NET Web API

支持多种传输协议(HTTP, TCP, UDP和自定义传输协议),允许在协议之间进行切换

只支持HTTP协议。比较适合传输来自各种浏览器、移动应用。

支持多种编码格式(Text, MTOM, Binary),允许相互切换。

支持各种媒体类型,如XML和JSON

符合Web服务标准(可靠的数据,传输,和数据安全)

不支持高标准的协议,如数据可靠性或者传输准确性。基于基本的协议和排版,如HTTP, WebSockets, SSL, JQuery, JSON, XML

支持请求回复、单线和多重消息交换模式

支持HTTP的请求响应模式,但也支持扩展的,如SignalR和WebSocket的整合

基于SOAP协议,因此需要被描述为WSDL,允许自动化工具生成客户端代理,即使服务含有复杂的模式

支持多种方式描述API。从自动生成HTML帮助页面描述,到使用结构metadata整合ODATA到APIs中等等。

寄宿于.net framework

寄宿于.net framework但是开源,也能够独立的下载

使用WCF创建可靠,安全的web服务,可以支持多种传输协议。使用WebAPI创建基于http协议的服务,服务更广的用户群。当创建和设计新的基于REST风格的服务是,采用webapi。虽然WCF也提供支持写REST风格的服务,但是Webapi的支持更好。

SOAP 和 ASP.NET  Web 服务

SOAP是基于标准XML的协议,能够与HTTP通讯。可以理解为程序之间通过以XML为格式的SOAP协议进行通讯。ASP.NET Web服务提供创建SOAP协议的web服务。

SOAP的问题

  1. 元数据metadata也会被传输,占用传输空间。
  2. 需要在客户端创建代理类。当服务端更新服务,客户端也要及时更新代理类。

REST

REST协议用于分布式环境的数据传输,它使我们能够将分布式服务当做一种资源,并通过简单的HTTP协议来操作这些资源。

REST对应数据库CRUD操作的方式,分为4种:

  1. GET:相当于CRUD操作中的R,数据获取
  2. PUT:相当于CRUD操作中的U,数据更改
  3. POST:相当于CRUD操作中的C,数据创建
  4. DELETE:相当于CRUD操作中的D,数据删除

举例说明

当站点为:www.cnblogs.com/blogs, 则代表获取博客列表数据

当站点为www.cnblogs.com/blogs/1,则取决于type类型,如果是put,则创建新的BLOG。

如果是post,则更新当前blog。如果是delete,则删除当前blog。

REST与SOAP对比

  1. 只有使用的数据被传输,而没有元数据。
  2. 省略了代理的创建。

WCF REST服务

WCF比web服务要晚出来。它提供更安全和成熟的方式去创建服务。通过WCF,我们可以定义自己的服务,并配置相关的协议如HTTP,TCP或者IPC甚至消息队列。WCF也可以创建REST服务。

WCF创建REST服务,需要我们做大量的配置工作。通常WCF适用于一些特殊场景,如单向消息传输,消息队列,双工通信。但是使用WCF创建REST服务过于复杂,而且局限于.net 3.5 framework。

ASP.NET Web API介绍

微软提出ASP.NET Web API可以理解为一个框架,用于快速简易的创建REST服务。

Web API的入门创建

我们可以点开Values的controller,它集成ApiController,实现的一般的Get,Post,Put,Delete的功能。并提供了响应的URL路径说明。

public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
} // GET api/values/5
public string Get(int id)
{
return "value";
} // POST api/values
public void Post([FromBody]string value)
{
} // PUT api/values/5
public void Put(int id, [FromBody]string value)
{
} // DELETE api/values/5
public void Delete(int id)
{
}
}

打开App_Start文件下的RouteConfig.cs文件,可以看到完整的api路由设置。

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}

实现自己的webapi

public class UserController : ApiController
{
public IHttpActionResult GetRead()
{
var employeeListViewModel = new EmployeeListViewModel(); var empBal = new EmployeeBusinessLayer();
var employees = empBal.GetEmployees(); var empViewModels = employees.Select(emp => new EmployeeViewModel
{
Name = emp.Name,
Salary = emp.Salary.ToString(),
SalaryColor = emp.Salary > 15000 ? "yellow" : "green"
}).ToList(); employeeListViewModel.Employees = empViewModels;
employeeListViewModel.UserName = User.Identity.Name;
return Ok(employees);
}
}

以上是初阶的内容,进阶地址:

http://www.cnblogs.com/ruanyifeng/p/5455105.html

重温ASP.NET WebAPI(一)初阶的更多相关文章

  1. 重温ASP.NET WebAPI(二)进阶

    重温ASP.NET WebAPI(二)进阶   介绍 本文为个人对WebApi的回顾无参考价值. 本文内容: Rest和UnitOfWork 创建WebAPi的流程 IOC-Unity的使用 MEF ...

  2. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  3. ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  4. Asp.Net WebApi核心对象解析(上篇)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  5. ASP.NET WebApi 文档Swagger深度优化

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明博客园蜗牛原文地址,cnblogs.com/tdws   写在前面 请原谅我这个标题党,写到了第100篇随笔,说是深度优化,其实也并没有什么深度 ...

  6. ASP.NET WebApi 文档Swagger中度优化

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws   写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简 ...

  7. Creating a Clean, Minimal-Footprint ASP.NET WebAPI Project with VS 2012 and ASP.NET MVC 4

    Creating a Clean, Minimal-Footprint ASP.NET WebAPI Project with VS 2012 and ASP.NET MVC 4 Building O ...

  8. Nodejs初阶之express

    PS: 2014/09/24 更新<Express 4.X 启航指南>,欢迎阅读和评论:)   老规矩,开头部分都是些自娱自乐的随想,想到哪写到哪... 到今天俺已经在俺厂工作俩年零几天了 ...

  9. ASP.NET WEBAPI 的身份验证和授权

    定义 身份验证(Authentication):确定用户是谁. 授权(Authorization):确定用户能做什么,不能做什么. 身份验证 WebApi 假定身份验证发生在宿主程序称中.对于 web ...

随机推荐

  1. 【转】Google的2012论文

    转自:http://www.sigvc.org/bbs/thread-1152-1-1.html Google的论文一直是业界的风向标,尤其在机器学习.分布式系统.网络等方面很多创新性的成果都是由他们 ...

  2. Java-线程池专题(什么是线程池,如何使用,为什么要用)

    1.什么是线程池:  java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池 多线程技术主要解决处理 ...

  3. Ubuntu16.04中查看硬盘的型号和读取速度

    最近在测试FTP服务器,上传和下载的速度与很多因数有关,其中,硬盘的读取速度就是其中不同的区别点,我同时用了三台不用的服务器架设FTP服务,一台是出来ftp服务外还含平台其他管理软件,一台是全新的系统 ...

  4. Http:设置 浏览器中MIME 类型

    http://www.163ns.com/zixun/post/4602.html 自定义MIME类型支持FLV的相关设置 网络空间支持FLV的相关设置其实很简单,就是自定义一个MIME类型 一般虚拟 ...

  5. [日志]logback告警

    开发过程中,难免会有发生错误或异常的时候,有些是需要及时通知到相关开发人员的.logback可以通过简单的配置达到邮件告警的目的. 一.错误告警 如下配置,所有Error级别的log发送邮件告警给re ...

  6. bat调用exe文件并且传递参数

    bat调用exe文件并且传递参数 bat调用exe,并且传递日期参数,代码: @echo off cd "E:\SublimeWorks\exe" start xyzj_shrjj ...

  7. HashMap,HashTable,ConcorrentHashMap的线程方式

    1.HashMap不是线程安全的,put,resize 2.HashTable是线程安全的,synchronized,但是效率较低 3.ConcorrentHashMap 对HashMap的一种加线程 ...

  8. @Override笔记

    作用:用来保证正确重写方法,当你重写方法出错时,比如方法名误写,或者漏掉参数,编译器会提示编译错误. 使用场景:继承父类,重写父类方法:实现接口,实现接口方法. 备注:jdk1.5之允许在继承时使用, ...

  9. 如何使用curl进行网页授权

    答:使用curl的-u选项,使用方法如下 curl -u username URL (会提示输入密码)

  10. Nginx配置X-Forwarded-Proto

    需求 最近公司在做全站https,架构上面有Nginx+tomcat Nginx+php,且nginx配置了ssl,tomcat和php项目使用https协议 但是,发送的是https url请求,p ...