Web API的介绍

Web API 其实就是应用程序编程接口,在实际的生活中,我们使用的软件有很多都是从API中获取的数据,比如:天气预报,微信支付等都是使用的接口,这样我们在编程过程中就可以使用别人已经写好的接口,可以省很多时间和精力,当然一些我们自己使用的,就需要我们自己去编写了,下面介绍用C#写API接口的具体实现方法。

Web API项目在VS2015中的创建

新建ASP.NET Web应用程序

使用API创建deployment_API


选择空,并把下面的Web API勾上

使用API创建deployment_Web_02


点击确定,一个Web API项目就完成了。

添加Web API控制器

右键单击Controllers文件夹,选择控制器

使用API创建deployment_Web_03


在MVC项目中,选择MVC5控制器,而Web API项目中,选择Web API 2控制器。

添加EF数据实体

右键单击Models,选择新建项–数据–ADO.NET数据模型

使用API创建deployment_API_04


当你第一次新建的时候是这样的,我们需要新建连接

使用API创建deployment_linq_05


因为我们使用的是本地服务器,所以服务器名为.,然后使用SQL Server身份验证,输入数据库的管理员账号和密码。

使用API创建deployment_使用API创建deployment_06


输入完成之后的界面上是这样的,然后在下面选择你要操作的数据库

使用API创建deployment_Web_07


最后一步

使用API创建deployment_linq_08


这样一来,数据实体就建好了,但是数据库每一次结构的变化都需要对实体进行更新,当然,数据变化不需要更新

对数据实体的操作

需要先引用Model

using Test.Models;//Test是项目的名称,Models是实体所在的项目文件夹,自己根据需要进行改变
namespace Test.Controllers
{
    public class HomeController : ApiController
    {
        //实例化实体对象,也可以在每个方法中实例化,这里实例化一个全局的,就可以少写很多代码
        Demo2017Entities db = new Demo2017Entities();
    }
}
API的路由

在WebApiConfig.cs文件中写着默认的路由规则

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

但是我们需要声明API的类型(Get,Post,Put,Delete)
1.在方法名称的前面添加这几个关键字,比如:

public IHttpActionResult Getem()
        {
            var list = db.Employees.ToList();
            return Json(list);
        }

Web API需要用Postman来测试,上面的接口,我们在调用的时候,地址为:http://localhost:60668/api/Home/Getem 如果,我们把代码写成下面的样子,是不能调用的

public IHttpActionResult em()
        {
            var list = db.Employees.ToList();
            return Json(list);
        }

因为,在上面已经说过了,必须在方法前面声明调用的类型,如果不写类型,在Postman中会显示下面的错误

{
    "Message": "The requested resource does not support http method 'GET'."
}

但是这样写,也是有弊端的,请看下面的代码

public IHttpActionResult Getem()
        {
            var list = db.Employees.ToList();
            return Json(list);
        }
        public IHttpActionResult Getom()
        {
            var list = db.Employees.ToList();
            return Json(list);
        }

这是两个名称不一样的代码,但是他们两个都是Get请求,所以在调用的时候,会提示错误:一个控制器中有两个Gte请求,所以我们需要自定义路由和声明方法的类型
常规的写法

[HttpGet]
        [Route("api/home/getem")]
        public IHttpActionResult Getem()
        {
            var list = db.Employees.ToList();
            return Json(list);
        }

        [HttpGet]
        [Route("api/home/getom")]
        public IHttpActionResult Getom()
        {
            var list = db.Employees.ToList();
            return Json(list);
        }

第一个中括号内声明方法的类型,有HttpGet,HttpPost,HttpPut,HttpDelete四种,第二个中括号中自定义路由,通俗来讲,就是自定义访问地址
这样一来,我们来调用接口,就不需要在注意那些繁琐的规则了
调用第一个接口:http://localhost:60668/api/home/getem 调用第一个接口:http://localhost:60668/api/home/getom 整个Web API的建项目和路由规则就完成了

Linq语句操作数据库

掌握了Web API的编写,我们还需要了解数据的操作,不然,之前的工作就是白干。
普通的查询

var list = db.Employees.ToList();//直接查找整个表
var lists=db.Employees.Where(a => a.CompanyId == 12);//查找Employees表中CompanyId等于12的数据
var listss = db.Employees.Where(a => a.CompanyId == 12&&a.Name=="dashazi");//查找Employees表中CompanyId等于12的数据并且Name等于dahsazi的数据
var listsss=from a in db.Employees
                      join b in db.Companies
                      on a.CompanyId equals b.Id
                      where a.Id==12
                      select new{a,b};
 //两表连接查询,A表joinB表onA表的某一行equalsB表的某一行
 //这种写法的情况下,两个列相等不能直接用==,需要用equals