简话ASP.NET Web API
简话ASP.NET Web API
在vs2012中,我们很容易在根据选择的ASP.NET MVC Web应用程序来新建一个Web API应用,聪明的你一定想见得到,Web API和MVC有着某种联系。但是今天的主题不是这个,而是它——ASP.NET Web API的简单创建和调用。但是在开始之前,首先还是来看看它和MVC到底有什么联系。
ASP.NET MVC vs ASP.NET Web API
WebApi建立在MVC框架所使用的同样设计模式之上(因此本文实例依旧采用既有的ASP.NET MVC Web应用程序来说明问题)。至于微软为什么选择了MVC而非WebForm作为它的设计模式基础,自然是看中了MVC框架的诸多优势,当然,本文不讨论MVC和WebForm孰优孰劣,有兴趣的可以看下去看下这篇文章。但是Web API是作为一个独立的ASP.NET特性而实现的,并且可以将它用于MVC框架之外,这意味着,微软在 System.Web.Http 命名空间中复制了某些关键的MVC框架功能,以保持MVC与Web API特性相互独立.因此通过模板建立的asp.net mvc 应用程序有两套路由:分别用于MVC框架控制器和Web API控制器。System.Web.Http 命名空间中复制了某些关键的MVC框架功能,以保持MVC与Web API特性相互独立。
WebApi走起
先新建一个ASP.NET 空 Web 应用程序(顺便用它来承载WebApi),命名为WebApi。而且采用和MVC模版默认生成的模版一样的文件架构。添加一个App_Start、Controllers、Models、Views文件夹和一个全局应用程序类(Global.asax)基本框架准备好了,其实通过ASP.NET MVC 4 Web应用程序模版。它也默认为你准备好了这些。但是为了让自己对它有一个感官的认识(实际开发过程中完全不必要这么干)。最终的项目文件架构图如下:

好了,接下来,在Controllers文件夹上右键添加新建项——一个Web API控制器类命名为ProductController(当然我们也可以自己创建一个class然后通过手动添加System.Web.Http的引用来实现ApiController类,它将为我们添加 System.Net.Http、System.Web.Http(这2个命名空间是WebApi关键的两个命名空间。关于它们的重要性,这在以后再讲)的引用和生成如下默认方法:
Controller准备好了,接下来在App_Start文件夹下添加一个类命名为WebApiConfig(它是相对于MVC里的RouteConfig而言的,是专门为我们管理路由的)。
1.为了方便调用,修改默认命名空间为WebApi(即解决方案的默认命名空间)
2.添加System.Web.Http引用,添加一个静态方法Register。如下所示:
接下来在Global.asax.cs的Application_Start事件中注册路由。如下所示:
接下来添加我事先准备好的数据层(省去业务逻辑层)和模型层的DLL引用
实现ProductController的四个方法,如下所示:
使用HttpClient 调用WebApi
好了,为了测试我们新建的WebApi,新建一个测试网站(采用ASP.NET Web MVC应用程序)。
新建一个ProductController控制器,代码如下所示:
新建3个视图,Index.cshtml、Edi.cshtmlt、Add.cshtml。下面是测试结果(注:测试为了方便,WebApi是通过IIS进程寄宿)。
Read:

Create:


Update:


Delete:


在回头看看我们的ProductController:

所有的方法命名都是使用默认生成的,这种情况下WebApi的默认路由会为我们自动映射来实现路由的寻址。但是实际生产中,我们肯定会使用更实际的命名。那么上面的效果是否依然能够实现呢?答案是肯定的。为了测试方便,我直接添加了一个新的TestProductController,代码如下:
接着上面的问题而来,如果在实际业务中还需要这么一个方法:
public List<Mvc.Model.Product> GetProducts(string category)
{
return iproduct.GetProducts(category);
}
即根据category来查找全部的Product,我们要加一个上面的这个方法。它是下面方法的重载:
public List<Mvc.Model.Product> GetProducts()
{
return iproduct.GetProducts();
}
那么在默认的路由配置下我们能不能请求得到呢?呵呵,如果熟悉MVC路由配置的你,肯定知道这是不行的。不信有图有真相:

它最终试图尝试与GetProduct(int id)方法Route,但是参数"手机"没有被字典收录,以至通讯失败。那为了能够访问到GetProducts(string category)方法我们还必须添加新的路由规则如下:
这暂时也能解决问题,但是如果这样的业务逻辑很多,是不是要在WebApiConfig的Register方法中注册一堆的路由规则呢?有没有其它的办法?呵呵,时间很晚了,关于这个问题,下次接着聊。
简话ASP.NET Web API的更多相关文章
- ASP.NET Web API Model-ModelMetadata
ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
- 新作《ASP.NET Web API 2框架揭秘》正式出版
我觉得大部分人都是“眼球动物“,他们关注的往往都是目光所及的东西.对于很多软件从业者来说,他们对看得见(具有UI界面)的应用抱有极大的热忱,但是对背后支撑整个应用的服务却显得较为冷漠.如果我们将整个“ ...
- ASP.NET Web API 2框架揭秘
ASP.NET Web API 2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著 ISBN 978-7-121-23536-8 2014年7月出版 定价:108.0 ...
- Asp.Net Web API 2第八课——Web API 2中的属性路由
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 路由就是Web API如何 ...
- 【转】ASP.NET WEB API系列教程
from: 西瓜小强 http://www.cnblogs.com/risk/category/406988.html ASP.NET Web API教程(六) 安全与身份认证 摘要: 在实际的项目应 ...
- 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是 ...
- ASP.NET Web API安全认证
http://www.cnblogs.com/codeon/p/6123863.html http://open.taobao.com/docs/doc.htm?spm=a219a.7629140.0 ...
随机推荐
- ActionBarActivity: cannot be resolved to a type
"the import android.support.v7 cannot be resolved " or "ActionBarActivity: cannot be ...
- python 导入库问题
最终解决如下面:我不知道有没有多余的空间 from django.conf import settings from sys import path path.extend(['/home/zoues ...
- ORACLE在表中添加的目光凝视和读取列
在ORACLE中给表.列添加凝视以及读取凝视 1.给表填加凝视:SQL>comment on table 表名 is '表凝视"; 2.给列加凝视:SQL>comment on ...
- MySQL当您插入列无效的数据插入
1.错误叙述性说明 com.mysql.jdbc.exception:jdbc4.MySQLSyntaxErrorException:Unknown column 'man' in 'field li ...
- hdu 5066 Harry And Physical Teacher(Bestcoder Round #14)
Harry And Physical Teacher Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- SOA(面向服务的架构)
前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...
- nodejs爬虫系统
其中express是服务端框架 request相当于前端的ajax请求 cheerio相当于jq 开始 首先我们先新建一个 crawler目录 执行 npm install express -g 命令 ...
- crawler_微信采集方案
仅供参考
- C# mongodb 1
转载C# mongodb 概述 MongoDB是一个高性能,开源,无模式的文档型数据库,使用C++开发.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他 ...
- net.sf.json 迄今 时刻 格式 办法
创作工具类 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import ...
