[ASP.NET] Web API in Web Form

[ASP.NET] Web API in Web Form


Web API

Web API 最近很火红的一个技术,它是基于HTTP通讯协定所打造的轻量级RESTFul Web 服务,因此它并不像WCF那么的肥大,而要谈Web API 就不得不先简单说明什么是REST,REST的完整全名为Representational State Transfer,在2000年由Roy Fielding博士其论文中提出来的一种软件架构风格,在RESTFul Web 服务里,网络上的资源是由URI来指定,而对于资源的操作(取得/建立/修改/删除)则对应到HTTP通讯协定的GET/POST/PUT/DELETE方法,也因此它并不需要复杂的转换,与常见的以SOAP为主的Web服务比较起来显得相当的轻量化。

Web API VS ASP.NET MVC

目前常见于ASP.NET MVC架构中谈及Web API,但这并不表示Web API仅能在ASP.NET MVC架构中使用,之所以常见于ASP.NET MVC里谈论,原因在于ASP.NET MVC本身的就是基于REST,具有Routing的观念,透过URL Routing就可以告知Web 服务器端我的请求是什么,与Web API观念上一致,因此以ASP.NET MVC配合Web API应该是绝配容易上手,然而对于原有ASP.NET Web Form的开发者来说也不用太伤心,事实上Web API并不绑死于ASP.NET MVC,同样的只要能够实现URL Routing,也就能使用Web API,而在Visual Studio 2012开发工具里也支持可以在Web Form项目上建立Web API Contoller,配合在Global.asax里设定好Route Rule,同样可以轻松建立起Web API服务。

Web API in Web Form

(1) Web Site项目

image

(2)建立Web API Contoller,这里要注意命名以Contoller结尾,默认名称会多加个1,变成xxxContoller1,记得修改。

image

(3)建立的Web API Contoller置于App_Code目录中,您可以在自行增加子目录以便分类不同的类

image

(4) Web API Contoller继承ApiController,并且建立后会默认提供方法范例,并且说明URL的表示法,再依需求进行修改调整,范例中笔者简单加了个EmployeeInfo类,并修改GET(int id)方法

image

(5) 接着在Global.asax里引入System.Web.Routing及System.Web.Http,并且在Application_Start里建立Route Rule的设定,在ASP.NET 的Web API里其默认为api/{controller}/{id},路径默认选择为api 是为了不跟ASP.NET MVC的路由相冲突,当然如果您不喜欢的话可以改掉它。

image

(6) 接着测试在网址列测试以符合Route Rule的设定的URL调用,可以得到以下结果,表明我们的Web API可以正常回传我们所需的数据,这里要注意的是虽然我们的Web API Contoller是命名为EmployeeController,然而在调用时是以Employee来调用,而并非为完整的EmployeeController名称。

image

(7) 而若是我们把Route Rule的路径默认改为webapi/{controller}/{id},则以webapi/employee/1的URL调用,可以得到以下结果。

image

(8) 以开发者工具监看,可以看到过程中是以GET方式发出请求,而回传Type则为XML

image

透过上述的简单示范,说明了在现有的旧项目里或是不采用ASP.NET MVC架构为开发的团队,仍然可以在Web Form的项目里建立起Web API服务。

Ref:

Representational state transfer

ASP.NET Web API

若本文对您有所帮助,欢迎转贴,但请在加注【转贴】及来源出处,并在附上本篇的超链接,感恩您的配合啰。

By No.18