1.通过查看日志,可以看出问题的原因。

2.断点调试。

3.本地测试,确保无误后,线上测试。

4.输出测试。

通过get的方式,测试接口。

  1. // [HttpPost]
  2. public ActionResult SearchGroup(string appType, string keyWord, string userName)
  3. {
  4. GroupListModel model = new GroupListModel(); // 新建model对象
  5. var groups = _groupService.SearchGroup(appType, keyWord);
  6. foreach (var item in groups)
  7. {
  8. model.Group.Add(new GroupModel()
  9. {
  10. GroupId = item.Id,
  11. Title = item.Title,
  12. Avatar = item.Avatar,
  13. OwnerId = item.OwnerId,
  14. IsDismiss = item.IsDismiss
  15. });
  16. }
  17. // return Json(new { result = true, info = model });
  18. return Json(new { result = true, info = model }, JsonRequestBehavior.AllowGet);
  19. }

通过post的方式,测试接口。

  1. [HttpPost]
  2. public ActionResult SearchGroup(string appType, string keyWord, string userName)
  3. {
  4. GroupListModel model = new GroupListModel(); // 新建model对象
  5. var groups = _groupService.SearchGroup(appType, keyWord);
  6. foreach (var item in groups)
  7. {
  8. model.Group.Add(new GroupModel()
  9. {
  10. GroupId = item.Id,
  11. Title = item.Title,
  12. Avatar = item.Avatar,
  13. OwnerId = item.OwnerId,
  14. IsDismiss = item.IsDismiss
  15. });
  16. }
  17. return Json(new { result = true, info = model });
  18. }

有时候编辑器不报错,不一定就是完全正确的。

下面是接口的终端代码

  1. [HttpPost]
  2. public ActionResult SearchGroup(string appType, string keyWord, string userName)
  3. {
  4. GroupListModel model = new GroupListModel(); // 新建model对象
  5. var groups = _groupService.SearchGroup(appType, keyWord);
  6. foreach (var item in groups)
  7. {
  8. model.Group.Add(new GroupModel()
  9. {
  10. GroupId = item.Id,
  11. Title = item.Title,
  12. Avatar = item.Avatar,
  13. OwnerId = item.OwnerId,
  14. IsDismiss = item.IsDismiss
  15. });
  16. }
  17. return Json(new { result = true, info = model });
  18. }

目标是获取群组数据,

首先创建一个GroupListModel。它的Group属性,对应GroupModel。GroupModel中有相应的所需的属性值。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. namespace Ddd.Web.Models.Customer
  6. {
  7. public partial class GroupListModel
  8. {
  9. public GroupListModel()
  10. {
  11. this.Group = new List<GroupModel>();
  12. }
  13. public List<GroupModel> Group { get; set; }
  14. }
  15. public partial class GroupModel
  16. {
  17. public int GroupId { get; set; }
  18. public string Title { get; set; }
  19. public string Avatar { get; set; }
  20. public bool IsFriend { get; set; }
  21. public int OwnerId { get; set; }
  22. public bool IsDismiss { get; set; }
  23. }
  24. }

然后根据_groupService的SearchGroup方法查询数据,这里主要是一些与数据库交互的方法。各种增删改查都在这里进行。


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Ddd.Core.Caching;
  5. using Ddd.Core.Data;
  6. using Ddd.Core.Domain.Customers;
  7. using Ddd.Services.Events;
  8. using Ddd.Core;
  9. namespace Ddd.Services.Customers
  10. {
  11. /// <summary>
  12. /// Group service
  13. /// </summary>
  14. public partial class GroupService : IGroupService
  15. {
  16. #region Constants
  17. /// <summary>
  18. /// Key for caching
  19. /// </summary>
  20. private const string GROUPS_ALL_KEY = "YY.group.all";
  21. /// <summary>
  22. /// Key for caching
  23. /// </summary>
  24. /// <remarks>
  25. /// {0} : group ID
  26. /// </remarks>
  27. private const string GROUP_BY_ID_KEY = "YY.group.id-{0}";
  28. private const string GROUP_BY_APPTYPE_GROUPNAME_KEY = "YY.group.type-{0}.name-{1}";
  29. /// <summary>
  30. /// Key pattern to clear cache
  31. /// </summary>
  32. private const string GROUPS_PATTERN_KEY = "YY.group.";
  33. #endregion
  34. #region Fields
  35. private readonly IRepository<Group> _groupRepository;
  36. private readonly IEventPublisher _eventPublisher;
  37. private readonly ICacheManager _cacheManager;
  38. #endregion
  39. #region Ctor
  40. /// <summary>
  41. /// Ctor
  42. /// </summary>
  43. /// <param name="cacheManager">Cache manager</param>
  44. /// <param name="groupRepository">Group repository</param>
  45. /// <param name="eventPublisher">Event published</param>
  46. public GroupService(ICacheManager cacheManager,
  47. IRepository<Group> groupRepository,
  48. IEventPublisher eventPublisher)
  49. {
  50. this._cacheManager = cacheManager;
  51. this._groupRepository = groupRepository;
  52. this._eventPublisher = eventPublisher;
  53. }
  54. #endregion
  55. #region Methods
  56. /// <summary>
  57. /// Gets all Groups
  58. /// </summary>
  59. /// <returns>Groups</returns>
  60. public virtual IList<Group> GetAllGroups()
  61. {
  62. string key = GROUPS_ALL_KEY;
  63. return _cacheManager.Get(key, () =>
  64. {
  65. var query = from a in _groupRepository.Table
  66. orderby a.Id
  67. select a;
  68. return query.ToList();
  69. });
  70. }
  71. /// <summary>
  72. /// Gets a Group
  73. /// </summary>
  74. /// <param name="groupId">Group identifier</param>
  75. /// <returns>Group</returns>
  76. public virtual Group GetGroupById(int groupId)
  77. {
  78. if (groupId == 0)
  79. return null;
  80. string key = string.Format(GROUP_BY_ID_KEY, groupId);
  81. return _cacheManager.Get(key, () => _groupRepository.GetById(groupId));
  82. }
  83. /// <summary>
  84. /// Inserts a Group
  85. /// </summary>
  86. /// <param name="group">Group</param>
  87. public virtual Group InsertGroup(Group group)
  88. {
  89. if (group == null)
  90. throw new ArgumentNullException("group");
  91. _groupRepository.Insert(group);
  92. _cacheManager.RemoveByPattern(GROUPS_PATTERN_KEY);
  93. //event notification
  94. _eventPublisher.EntityInserted(group);
  95. return group;
  96. }
  97. /// <summary>
  98. /// Updates the Group
  99. /// </summary>
  100. /// <param name="group">Group</param>
  101. public virtual void UpdateGroup(Group group)
  102. {
  103. if (group == null)
  104. throw new ArgumentNullException("group");
  105. _groupRepository.Update(group);
  106. _cacheManager.RemoveByPattern(GROUPS_PATTERN_KEY);
  107. //event notification
  108. _eventPublisher.EntityUpdated(group);
  109. }
  110. /// <summary>
  111. /// Deletes a Group
  112. /// </summary>
  113. /// <param name="group">Group</param>
  114. public virtual void DeleteGroup(Group group)
  115. {
  116. if (group == null)
  117. throw new ArgumentNullException("group");
  118. _groupRepository.Delete(group);
  119. _cacheManager.RemoveByPattern(GROUPS_PATTERN_KEY);
  120. //event notification
  121. _eventPublisher.EntityDeleted(group);
  122. }
  123. public virtual Group GetGroupBySysnameAndGroupName(string sysName, string groupName)
  124. {
  125. if (string.IsNullOrEmpty(sysName)||string.IsNullOrEmpty(groupName))
  126. return null;
  127. string key = string.Format(GROUP_BY_APPTYPE_GROUPNAME_KEY, sysName,groupName);
  128. return _cacheManager.Get(key, () => {
  129. var query = from g in _groupRepository.Table
  130. where g.SystemName == sysName
  131. && g.Title == groupName
  132. && !g.IsDismiss
  133. select g;
  134. return query.FirstOrDefault();
  135. });
  136. }
  137. /// <summary>
  138. /// 获取所有的朋友圈列表
  139. /// </summary>
  140. /// <param name="pageIndex"></param>
  141. /// <param name="pageSize"></param>
  142. /// <returns></returns>
  143. public virtual IPagedList<Group> GetAllGroups(int pageIndex = 0, int pageSize = int.MaxValue)
  144. {
  145. var query = from g in _groupRepository.Table
  146. where !g.IsDismiss
  147. orderby g.Id descending
  148. select g;
  149. return new PagedList<Group>(query, pageIndex, pageSize);
  150. }
  151. public virtual List<Group> SearchGroup(string appType, string keyWord)
  152. {
  153. var query = from x in _groupRepository.Table
  154. where x.SystemName == appType
  155. && x.Title.Contains(keyWord)
  156. && x.IsDismiss == false
  157. orderby x.Id descending
  158. select x; // 查询群名包含keyWord的数据
  159. return query.ToList();
  160. }
  161. #endregion
  162. }
  163. }

获取groups数据之后,将其赋值到model中去,

  1. foreach (var item in groups)
  2. {
  3. model.Group.Add(new GroupModel()
  4. {
  5. GroupId = item.Id,
  6. Title = item.Title,
  7. Avatar = item.Avatar,
  8. OwnerId = item.OwnerId,
  9. IsDismiss = item.IsDismiss
  10. });
  11. }

最后通过Json输出,

  1. return Json(new { result = true, info = model });

编译好之后,将下面的dll上传发布,测试。

小结;实践出真知,你们看了也没用,自己多练练吧。

.Net接口调试与案例的更多相关文章

  1. 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  2. 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例

    基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院  欧浩源 一.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况. ...

  3. 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  4. java接口调试思想

    对于接口调试的理解:最近多次参与接口调试工作,一般情况都是获取对方接口文档,文档中有加密验证方式,根据加密验证方式开发,调用对应的接口.可以不可以简化这个流程那,至少减少一方的工作量.1.减少调用方法 ...

  5. Flutter实战视频-移动电商-18.首页_火爆专区后台接口调试

    18.首页_火爆专区后台接口调试 楼层结束之后有个火爆专区.到地图有个上拉加载的效果 lib/config/service_url.dart 首先找到我们的接口配置文件,增加接口的配置 lib/ser ...

  6. Flutter实战视频-移动电商-21.分类页_类别信息接口调试

    21.分类页_类别信息接口调试 先解决一个坑 取消上面的GridVIew的回弹效果.就是在拖这个gridview的时候有一个滚动的效果 physics: NeverScrollableScrollPh ...

  7. Flutter实战视频-移动电商-28.列表页_商品列表后台接口调试

    28.列表页_商品列表后台接口调试 主要调试商品列表页的接口 这个接口是最难的因为有大类.小类还有上拉加载 先配置接口 config/service_url.dart //const serviceU ...

  8. Flutter移动电商实战 --(21)分类页_类别信息接口调试

    先解决一个坑 取消上面的GridVIew的回弹效果.就是在拖这个gridview的时候有一个滚动的效果 physics: NeverScrollableScrollPhysics(), 大R刷新后,点 ...

  9. Charles系列三:Charles打断点(包含修改请求,修改返回的内容),模拟慢速网络(弱网测试),域名映射,过滤请求,接口调试,打压测试

    一:Charles断点的使用(包含修改请求,修改返回的数据) 设置断点来修改请求和返回的数据,在开发过程中可以模拟多种响应.步骤如下: 1.添加断点方法有两种: 方法1:找到Charles中菜单项Pr ...

随机推荐

  1. AngularJs轻松入门(四)模块化

    在前面几节教程中,代码比较少,为了方便说明问题笔者將控制器代码都写在了HTML页面中,实际上这并不是什么好的编程习惯,而且可维护性差.通常的做法都是將处理业务逻辑的代码写在一个单独的JS文件中,然后在 ...

  2. Python实现文件阅读功能(Python学习笔记)

    #!/usr/bin/python# Filename: filereader.pyimport sys def readfile(filename): '''Print a file to the ...

  3. python import windows文件路经

    import sys sys.path.append("E:\\python\\workspacepython\\PY001\\src\\testpy01") import str ...

  4. sapui5 One or more constraints have not been satisfied.

    Getting error in creating a new project for UI5 One or more constraints have not been satisfied. slo ...

  5. 走进ReactiveCocoa的世界

    在学习ReactiveCocoa之前,先学习一下概念 ReactiveCocoa 是一套开源的基于Cocoa的FRP框架 .FRP的全称是Functional Reactive Programming ...

  6. Spring:dispatchservlet

    DispatcherServlet 是 Spring MVC 中负责请求调度的核心引擎,所有的请求将由此 Servlet 根据配置分发至各个逻辑处理单元.其内部同时也维护了一个ApplicationC ...

  7. tensorboard 使用

    TensorBoard是TensorFlow 的可视化工具.主要为了更方便用户理解 TensorFlow 程序.调试与优化,用户可以用 TensorBoard 来展现 TensorFlow 图像,绘制 ...

  8. SPOJ 7258 SUBLEX 后缀数组 + 二分答案 + 前缀和

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) f ...

  9. NodeJS学习笔记 进阶 (7)express+session实现简易身份认证(ok)

    个人总结: 这篇文章讲解了express框架中如何使用session,主要用了express-session这个包.更多可以参考npm.js来看,读完这篇文章需要10分钟. 摘选自网络: 文档概览 本 ...

  10. Redis数据持久化的两种方式RDB和AOF

    由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁 盘上,当redis重启后,可以从磁盘中恢复数据.redis提 ...