ASP.NET Web API 之 ValuesController

来源:互联网 发布:caffe googlenet 分类 编辑:程序博客网 时间:2024/05/29 14:50

ApiController,即ValuesController的父类,是ASP.NET Web API的核心。虽然只需实现IHTTPController接口的各类成员,就可以创建一个可用的ASP.NET Web API控制器,但在实际使用中,大部分ASP.NET Web API的控制器还是通过继承ApiController来创建的。ApiController类负责协调ASP.NET Web API对象模型中各个不同的类,在HTTP请求的处理中执行一些关键的任务:
(1)选择和运行控制器类上的一个操作方法;
(2)将HTTP请求消息的各元素转换成控制器操作方法的参数,并将操作方法的返回值转换成有效的HTTP响应正文;
(3)运行各种筛选器,这些筛选器可以是为操作方法或控制器配置的,也可以是全局的;
(4)为控制器类的操作方法提供适当的上下文状态。
Web API模板中的ValuesController类,继承了ApiController类并利用其执行的关键处理任务,呈现出ApiController之上的更高层次的抽象。
以下是默认的ValuesController类

    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([FromBody]string value)        {        }        // PUT api/values/5        public void Put(int id, [FromBody]string value)        {        }        // DELETE api/values/5        public void Delete(int id)        {        }    }

这个ValuesController类,虽然简单,却让我们第一次接触到了控制器编程模型。
首先要注意的是控制器中操作方法的命名。默认情况下,ASP.NET Web API采用传统方式,在一定程度上通过比较HTTP方法名和操作方法来选择执行哪个操作方法。更准确地说,ApiController会寻找名字以相应的HTTP方法开头的控制器操作方法。因此,在实例代码中,发送到/api/values的HTTP GET请求会触发控制器中无参数的Get()方法。ASP.NET Web API框架提供不同的方法定制修改默认的名字匹配逻辑,并提控扩展点,如果你需要的话可以完全替换这套逻辑。
ASP.NET Web API除了可以根据HTTP方法来选择操作方法,还可以根据请求的其他元素,如查询字符串参数来进行选择。更重要的是,ASP.NET Web API框架支持从请求元素到操作方法参数的绑定。默认情况下,ASP.NET Web API框架结合各种方法的使用来实现参数绑定,采用的算法既支持简单.NET类型,也支持复杂.NET类型。对于HTTP响应,ASP.NET Web API编程模型允许操作方法返回.NET类型,使用内容协商将这些返回值转换成适当的HTTP响应消息正文。

0 0