专栏首页张善友的专栏WCF Web API 说再见,继承者ASP.NET Web API

WCF Web API 说再见,继承者ASP.NET Web API

从 .NET 3.5 开始 WCF 已经支持用 WebHttpBinding 构建 RESTful Web 服务,基于 WCF 框架的 RESTful Web 服务还是建立在 WCF Message 栈上,还是基于RPC风格的,因为 REST 的工作原理有所不同,它不需要依赖 SOAP 协议,因此 WCF 消息管道对于它经过了特殊的消息优化。但 REST 集成在 WCF 消息管道上还是不理想,所以微软重新开始构造基于Http 协议特点的RESTful的Web API, 从2010年10月份开始把代码放在codeplex上http://wcf.codeplex.com/ ,我也一直在跟踪,学习WCF Web API, 上个月

上挂出了一个声明:

具体内容可以参看 WCF Web API is now ASP.NET Web API。几个月之前WCF和ASP.NET 团队合并,把WCF Web API的内容并入了ASP.NET Web API,目前WCF Web API的所有功能并没有完成移植,将在ASP.NET Web API正式发布的时候完成移植,非常期待正式发布的ASP.NET  Web API,更期望ASP.NET MVC 4会和ASP.NET MVC 3一样可以很好的运行在Mono上,这样Mono平台就完美了,可以完全的支持RESTful风格的API。

同时提供了一份WCF Web Api到ASP.NET Web API的迁移指南How to Migrate from WCF Web API to ASP.NET Web API,其中列出了 WCF Web Api 到 ASP.NET Web Api 的映射表:

WCF Web API

ASP.NET Web API

Service

Web API controller

Operation

Action

Service contract

Not applicable

Endpoint

Not applicable

URI templates

ASP.NET Routing

Message handlers

Same

Formatters

Same

Operation handlers

Filters, model binders

ASP.NET Web API构建于ASP.NET引擎之上和共享了许多ASP.NET MVC的特性,例如他完全支持MVC风格的Routes和Filters,Filters在授权和异常处理方面是特别有用。Web API支持Model Binding和验证(.NET4.5的WebForm也支持哦)。Web API框架内部自动支持XML和JSON格式,用户可以自行开发其他类型的超媒体类型。

让Web API的返回值变成IQueryable<T>,Web API会自动启用OData query conventions

ASP.NET Web API还有一个特性就是可以类似于WCF自宿主方式部署,当然也可以在IIS上运行。

下面来看看如何使用 ASP.NET Web Api (使用的是 VS2010版)

创建出的工程中,Controllers 目录下会有一个 ValuesController.cs 注意它继承于 ApiController

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net.Http; 
using System.Web.Http;
namespace MvcApplication1.Controllers 
{ 
    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(string value) 
        { 
        }
        // PUT /api/values/5 
        public void Put(int id, string value) 
        { 
        }
        // DELETE /api/values/5 
        public void Delete(int id) 
        { 
        } 
    } 
}

在 Global.cs 中,注册了 Api 的 Url Map: api/{controller}/{id} 每个"Action"是通过 Http谓词(GET/POST/PUT/DELETE)映射的。

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

参考资料:

http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/16/introducing-asp-net-mvc-4-beta-with-web-apis.aspx

http://blogs.msdn.com/b/carlosfigueira/archive/tags/aspnetwebapi/

http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC4-and-WebAP

http://www.davidhayden.me/blog/asp.net-mvc-4-web-api-routes-and-apicontroller

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • One ASP.NET

    大多数情况下,我是一名 ASP.NET开发人员。我不需要指定 MVC 或 Web Form,他们都是微软One ASP.NET战略的核心。我的应用程序往往是混合...

    张善友
  • ASP.NET MVC4 Web API 堆栈将添加指定消息处理功能

    微软工程师Kiran Challa近日在其博客中张贴了一张正在开发阶段的ASP.NET MVC4 Web API堆栈图,如下图所示。 ? Kiran称,目前该...

    张善友
  • WCF 性能基准报告

    现在我能找到的关于WCF性能方面的文章主要有几个,一个是微软Connected Frameworks Team的Saurabh Gupta (PM)2007年初...

    张善友
  • .NET 基金会项目介绍-MVVM Light Toolkit

    MVVM Light Toolkit 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。

    newbe36524
  • Web项目或WCF发布IIS后,如何通过VS2010调试

    在做项目的时候,例如WCF服务一般都会将WCF服务承载于控制台应用程序,或者WinForm窗体应用程序,因为这样可以直接在服务代码上打断点,然后就可以调试了。但...

    aehyok
  • [实战篇] Python 运维中使用并发

    今天从大哥手里接了一个需求: 验证一下新的 Docker 镜像仓库(Docker Registry)是否迁移成功了 简单粗暴的方法就是拿到老仓库中的镜像列表(I...

    临书
  • Github上 10 个开源免费且优秀的后台控制面板

    Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费...

    好好学java
  • 10 个超炫酷后台控制面板(附 GitHub下载链接)

    Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费...

    zhisheng
  • 0499-如何使用潜水艇在Hadoop之上愉快的玩耍深度学习

    Hadoop是时下最流行的企业级开源大数据平台技术,你可以将它部署在本地,也可以部署在云端。而深度学习,对于企业用户来说举几个简单的例子,常见的场景包括语音识别...

    Fayson
  • Leetcode: Roman to Integer

    题目: Given a roman numeral, convert it to an integer.

    卡尔曼和玻尔兹曼谁曼

扫码关注云+社区

领取腾讯云代金券