WebApi是微软在VS2012 MVC4版本中绑定发行的,WebApi是完全基于Restful标准的框架。RestFul: (英文:Representational State Transfer,简称REST)网上关于Restful定义的资料很多,我个人理解的Restful api 是指基于资源的定义的接口,它的所有接口都是对资源的操作。REST的核心原则是将你的API拆分为逻辑上的资源。这些资源通过http被操作(GET ,POST,PUT,DELETE).Restful Api接口标准的定义满足CURD,标准的接口定义如下:

  • Post:新增记录
  • Put:修改记录
  • Get:获取数据
  • Delete:删除数据

webapi标准的定义形式为:每个controller都对应一个Model,controller中的接口都应该是对controller所对应的那个model进行的操作,所以上诉的post,get,put,delete都是对model所对应的资源操作。但是在实际的操作中,可能没有办法完全满足这种定义的形式,力求尽量满足。

 

WebAPI项目和典型的MVC项目一样,包含主要的Models,Views,Controllers等文件夹和Global.asax文件。Views对于WebAPI来说没有太大的用途,Models中的Model主要用于保存Service和Client交互的对象,这些对象默认情况下会被转换为Json格式的数据进行传输,Controllers中的Controller用于提供服务。和普通的MVC一样,Global.asax用于配置路由规则。

Model

Model必须提供public的属性,用于json或xml反序列化时的赋值,一个简单的model定义如下:

    public class Person
    {
        public string name { set; get; }
        public string age{ set; get; } 
    }

Controller

WebAPi中的Controller和MVC的Controller比较类似,只是WebAPI的Controller继承于ApiController,而MVC的Controller继承于Controller。一个Controller中可以包含多个Action,Action的响应规则受到Global.asax路由规则的控制。一个简单的Controller如下

public class CompanyController : ApiController
{
    public string Get(int id)
    {
       return "OK";
    }
}

路由

新建立的WebAPI自带了默认的路由规则,代码如下:

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "api/{controller}/{id}",
                defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

可以看到,默认的路由规则只指向了Controller,没有指向具体的Action,因为默认情况下,对于Controller中的Action的匹配是和Action的方法名相关联的。而在实际的调用过程中,我们一般需要制定到特定的Action,为了满足指向特定的Action需要修改上诉的路由规则:

      url: "api/{controller}/{action}/{id}"