猿教程 Logo

Web API Controller

我们在前面的课程中创建了带MVC的Web API项目,生成了一个简单的控制器。在这里,您将详细了解Web API控制器。

Web API控制器类似于ASP.NET MVC控制器。它用来处理传入的HTTP请求并将响应发送回调用者。

Web API控制器是一个类,你可以在控制器文件夹中创建,也可以在您的项目的根文件夹下的任何其他文件夹中创建。

一个控制器类的名字必须以“Controller”结束,它必须继承自System.Web.Http.ApiController类。控制器的所有公共方法被称为操作方法。

下面是我们创建一个新的Web API项目时visual studio默认情况下添加的一个简单的控制器类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MyWebAPI.Controllers
{
    public class ValuesController : ApiController
    {
        // GET: api/student
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
        // GET: api/student/5
        public string Get(int id)
        {
            return "value";
        }
        // POST: api/student
        public void Post([FromBody]string value)
        {
        }
        // PUT: api/student/5
        public void Put(int id, [FromBody]string value)
        {
        }
        // DELETE: api/student/5
        public void Delete(int id)
        {
        }
    }
}

正如在上面的例子中你所看到的,ValuesController类是继承自ApiController并包括多个动作方法,这些方法的名字与HTTP动词一样,Post、Put和Delete。

根据传入的请求URL和HTTP动词(GET/POST/PUT/PATCH/DELETE),Web API决定执行哪个Web API控制器和操作方法,如Get()方法将处理HTTP GET请求,POST()方法将处理HTTP POST请求,Put()方法将处理HTTP PUT请求,DELETE()方法将为上述Web API处理HTTP DELETE请求。

下图演示了Web API控制器和操作方法。


如果你想写一些不用HTTP动词命名的方法,可以给方法添加一些适当的HTTP动词属性,如HttpGet HttpPost,HttpPut等等就像MVC控制器一样。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MyWebAPI.Controllers
{
    public class ValuesController : ApiController
    {
        [HttpGet]
        public IEnumerable<string> Values()
        {
            return new string[] { "value1", "value2" };
        }
        [HttpGet]
        public string Value(int id)
        {
            return "value";
        }
        [HttpPost]
        public void SaveNewValue([FromBody]string value)
        {
        }
        [HttpPut]
        public void UpdateValue(int id, [FromBody]string value)
        {
        }
        [HttpDelete]
        public void RemoveValue(int id)
        {
        }
    }
}

Web API Controller 特点

  1. 它必须继承自System.Web.Http.ApiController类。

  2. 它可以在项目的根文件夹中的任何文件夹中创建。但是,按照约定建议在控制器文件夹中创建控制器类。

  3. 动作方法名可以与HTTP动词名相同,也可以以HTTP动词开头,或将HTTP动词属性添加到方法。

  4. 一个动作方法的返回类型可以是任何基本或复杂类型。


控制器方法命名

正如上面提到的,操作方法的名称在Web API控制器起着重要的作用。

动作方法名称可以相同的HTTP动词如Get、Post、Put补丁或删除Web API控制器上面的例子所示。

然而,你可以以Http动词开头然后添加任何更多可读性。例如,Get方法可以GetAllNames(),GetStudents()或任何其他。


下表列出了每个HTTP方法可能的操作方法名称为:

HTTP方法对应的可以命名的方法名称作用
GETGet() 读取记录
get()
GET()
GetAllStudent()
以Get开头的名称
POSTPost()插入新记录
post()
POST()
PostNewStudent()
以Post开头的名称
PUTPut()修改记录
put()
PUT()
PutStudent()
以Put开头的名称
PATCHPatch()修改部分记录
patch()
PATCH()
PatchStudent()
以Patch开头的名称
DELETEDelete()删除记录
delete()
DELETE()
DeleteStudent()
以Delete开头的名称


下图说明了总体的请求/响应管道。


访问 Web API HTTP Message Life Cycle Poster 获取更多信息。


Web API控制器与MVC控制器的区别

Web API 控制器MVC 控制器
继承自System.Web.Http.ApiController类继承自System.Web.Mvc.Controller
方法名称必须以Http动词开头或者添加Http属性必须添加添加Http属性
返回请求对应的数据返回视图
返回xml格式或json格式数据,也可以返回自定义的格式的数据返回ActionResult 或者其他类型的数据
支持.net4.0及以上版本支持.net3.5及以上版本



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/webapi/web-api-controller.html