简话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

简话ASP.NET Web API的更多相关文章

  1. ASP.NET Web API Model-ModelMetadata

    ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...

  2. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  3. ASP.NET Web API 开篇示例介绍

    ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...

  4. 新作《ASP.NET Web API 2框架揭秘》正式出版

    我觉得大部分人都是“眼球动物“,他们关注的往往都是目光所及的东西.对于很多软件从业者来说,他们对看得见(具有UI界面)的应用抱有极大的热忱,但是对背后支撑整个应用的服务却显得较为冷漠.如果我们将整个“ ...

  5. ASP.NET Web API 2框架揭秘

    ASP.NET Web API 2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.0 ...

  6. Asp.Net Web API 2第八课——Web API 2中的属性路由

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 路由就是Web API如何 ...

  7. 【转】ASP.NET WEB API系列教程

    from: 西瓜小强 http://www.cnblogs.com/risk/category/406988.html ASP.NET Web API教程(六) 安全与身份认证 摘要: 在实际的项目应 ...

  8. 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示

    随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是 ...

  9. ASP.NET Web API安全认证

    http://www.cnblogs.com/codeon/p/6123863.html http://open.taobao.com/docs/doc.htm?spm=a219a.7629140.0 ...

随机推荐

  1. ActionBarActivity: cannot be resolved to a type

    "the import android.support.v7 cannot be resolved  " or "ActionBarActivity: cannot be ...

  2. python 导入库问题

    最终解决如下面:我不知道有没有多余的空间 from django.conf import settings from sys import path path.extend(['/home/zoues ...

  3. ORACLE在表中添加的目光凝视和读取列

    在ORACLE中给表.列添加凝视以及读取凝视 1.给表填加凝视:SQL>comment on table 表名 is '表凝视"; 2.给列加凝视:SQL>comment on ...

  4. MySQL当您插入列无效的数据插入

    1.错误叙述性说明 com.mysql.jdbc.exception:jdbc4.MySQLSyntaxErrorException:Unknown column 'man' in 'field li ...

  5. 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 ...

  6. SOA(面向服务的架构)

    前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...

  7. nodejs爬虫系统

    其中express是服务端框架 request相当于前端的ajax请求 cheerio相当于jq 开始 首先我们先新建一个 crawler目录 执行 npm install express -g 命令 ...

  8. crawler_微信采集方案

    仅供参考

  9. C# mongodb 1

    转载C# mongodb 概述 MongoDB是一个高性能,开源,无模式的文档型数据库,使用C++开发.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他 ...

  10. net.sf.json 迄今 时刻 格式 办法

    创作工具类 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import  ...