上一篇写到向数据库中添加虚拟的数据,在这篇文章中,我们将介绍如何创建控制器,然后读取到数据库中的内容。
8、创建控制器
在Controllers目录下添加控制器,选择“Web API 2 控制器 - 空”,我们将手工编写API程序的读取、添加、修改、删除各常用接口。控制器文件命名为StudentController.cs。
在StudentController.cs中添加如下代码。一个Get方法,用来读取数据
private StudentContext db = new StudentContext();
public IEnumerable<Student> Get()
{
return db.Students.AsEnumerable();
}
编译后,点击运行,如果一切正常的话会出现以下XML格式的数据,说明数据读取成功。
运行的时候会弹出来一个浏览器界面,如下,注意这并不是错误,只需要在地址栏后面加上/api/student就可以了。完整地址:http://localhost:58890/api/student。其中58890是电脑自动随机生成的端口,每台机器生成的端口号可能不同。
访问成功的界面:这里我们获取到的是XML格式的数据。
接下来我们将访问到的数据转化为JSON格式。
这里我们需要修改App_Start目录下的WebApiConfig.cs文件,在//Web API 配置和服务的注释下添加以下代码:
// Web API 配置和服务
//去掉默认的XML格式
config.Formatters.Remove(config.Formatters.XmlFormatter);
var jsonFormatter = config.Formatters.JsonFormatter;
//将输出结果缩进显示
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
//将字段名称改成camelCase格式,即postalCode这样的json统一格式
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
再次运行,就可以看到如下结果:
到这里,利用ASP.NET Web API对数据库进行去取就算完成了。接下来就是对数据进行添加、修改和删除的操作。在StudentController中添加各种方法。
和添加操作类似,用Linq语句操作Entity Framework,代码非常简洁高效。不同的方法名也对应了不同的操作,Get对应读取操作,Post对应添加操作,Put对应修改操作,Delete对应删除操作。
添加操作
/// <summary>
/// 添加
/// </summary>
/// <param name="student"></param>
/// <returns></returns>
public HttpResponseMessage Post(Student student)
{
if (ModelState.IsValid)
{
db.Students.Add(student);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.Created, student);
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
首先对传入的数据进行验证,如果验证通过,则添加到数据库中,否则输出错误信息。
修改
/// <summary>
/// 修改
/// </summary>
/// <param name="friend"></param>
/// <returns></returns>
public HttpResponseMessage Put(Student friend)
{
if (ModelState.IsValid)
{
db.Entry(friend).State = EntityState.Modified;
db.SaveChanges();
var response = Request.CreateResponse(HttpStatusCode.OK, friend);
return response;
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
删除
/// <summary>
/// 删除
/// </summary>
/// <param name="id">要删除的数据的ID</param>
/// <returns></returns>
public HttpResponseMessage Delete(int id)
{
var student = db.Students.Find(id);
if (student != null)
{
db.Students.Remove(student);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, student);
}
return Request.CreateResponse(HttpStatusCode.NotFound);
}
到这里所有的方法都写完了,下一篇将使用一个测试工具来测试这些API接口并在Unity WebGL中使用。