总结上一个项目的服务器API开发的流程:(附带源码下载)
实现效果:存储客户端上传的订单数据到数据表,并展示到前端界面,共分为两个模块,此模块主要显示服务端如何存储数据,如何发送数据到前端界面。前后端建立的都是MVC项目,使用DTO模式传输数据。前端获取数据的模块将在下一篇博客介绍。
第一步:使用VS新建MVC项目,本文展示的项目名称为优快云Test,进行OrderInformation数据表的数据存储;
第二步:Model模块(CodeFirst模式,建的类既是数据表的名称)
namespace 优快云Test.Models
{
public class Test
{
}
public class OrderInformation {
[Key]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OrderID { get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string Size { get; set; }
[Required]
public int OrderNum { get; set; }
[Required]
public DateTime OrderCreateTime { get; set; }
[Required]
public DateTime DeliveryTime { get; set; }
}
public class 优快云TestData : DbContext {
public 优快云TestData() : base("name = 优快云TestData")
{
}
public DbSet<OrderInformation> OrderInformations { get; set; }
}
/// <summary>
/// 用于上传参数的返回
/// </summary>
public class ResultData
{
public string Result { get; set; }
public ErrorCode Code { get; set; }
}
public enum ErrorCode
{
OK,
UserNotLogined,
WrongParameter,
UserNameExisted,
PhoneNumberExisted,
Exception //异常
}
}
第三步:Controller模块
namespace 优快云Test.Controllers
{
public class XXTestController : Controller
{
OrderService orderServcie = new OrderService();
// GET: XXTest
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult UpdateOrderInfo(OrderInformation state)
{
var data = orderServcie.UpdateOrderInfos(state);
return Json(data, JsonRequestBehavior.AllowGet);
}
}
}
第四步:Service模块(此处是处理客户端上传的数据到数据表)
namespace 优快云Test.Services
{
public class OrderService
{
private readonly 优快云TestData _testDB = new 优快云TestData();
/// <summary>
/// 订单状态更新
/// </summary>
/// <returns></returns>
public ResultData UpdateOrderInfos(OrderInformation state)
{
try
{
var searchResult = _testDB.OrderInformations.Where(p => p.OrderID == state.OrderID).AsNoTracking().FirstOrDefault();
//客户追加产品,并假设下单时间、交货时间和规格仍依第一次下单为基准,只叠加数量
if (searchResult != null)
{
var sumNum = searchResult.OrderNum + state.OrderNum;
OrderInformation order = new OrderInformation() {
OrderID = searchResult.OrderID,
Size = searchResult.Size,
DeliveryTime = searchResult.DeliveryTime,
OrderCreateTime = searchResult.OrderCreateTime,
OrderNum = sumNum,
UserName = searchResult.UserName,
};
_testDB.Entry<OrderInformation>(order).State = EntityState.Modified;
}
//客户第一次下单
else {
_testDB.OrderInformations.Add(state);
}
_testDB.SaveChanges();
return new ResultData()
{
Result = "OK",
Code = ErrorCode.OK
};
}
catch (Exception ex)
{
return new ResultData()
{
Result = "Error",
Code = ErrorCode.Exception
};
}
}
}
}
第五步:web.config模块(Password为自己数据库的sa用户对应的密码)
<connectionStrings>
<add name="优快云TestData" connectionString="Data Source=.;Initial Catalog=优快云Test;User ID=sa;Password=*******;" providerName="System.Data.SqlClient" />
</connectionStrings>
第六步:Global.asax模块(添加CodeFirst初始化数据表,一旦运行程序,数据库就会生成相应的数据表,否则运行程序只有调用数据表的逻辑时,才会CodeFirst生成数据表)
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
using (var context = new 优快云TestData()) {
context.Database.Initialize(true);
}
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
至此服务器端的API接口:http://localhost:58903/XXTest/UpdateOrderInfo就建立好了,此处XXTest是指MVC相应的Controller的名称,UpdateOrderInfo是指相应Controller下的ActionResult。客户端访问该接口,就可以将OrderInformation类型的数据传给服务端。