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

2.断点调试。

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

4.输出测试。

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

// [HttpPost]
public ActionResult SearchGroup(string appType, string keyWord, string userName)
{
GroupListModel model = new GroupListModel(); // 新建model对象
var groups = _groupService.SearchGroup(appType, keyWord);
foreach (var item in groups)
{
model.Group.Add(new GroupModel()
{
GroupId = item.Id,
Title = item.Title,
Avatar = item.Avatar,
OwnerId = item.OwnerId,
IsDismiss = item.IsDismiss
});
} // return Json(new { result = true, info = model });
return Json(new { result = true, info = model }, JsonRequestBehavior.AllowGet);
}

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

[HttpPost]
public ActionResult SearchGroup(string appType, string keyWord, string userName)
{
GroupListModel model = new GroupListModel(); // 新建model对象
var groups = _groupService.SearchGroup(appType, keyWord);
foreach (var item in groups)
{
model.Group.Add(new GroupModel()
{
GroupId = item.Id,
Title = item.Title,
Avatar = item.Avatar,
OwnerId = item.OwnerId,
IsDismiss = item.IsDismiss
});
} return Json(new { result = true, info = model });
}

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

下面是接口的终端代码

[HttpPost]
public ActionResult SearchGroup(string appType, string keyWord, string userName)
{
GroupListModel model = new GroupListModel(); // 新建model对象
var groups = _groupService.SearchGroup(appType, keyWord);
foreach (var item in groups)
{
model.Group.Add(new GroupModel()
{
GroupId = item.Id,
Title = item.Title,
Avatar = item.Avatar,
OwnerId = item.OwnerId,
IsDismiss = item.IsDismiss
});
} return Json(new { result = true, info = model });
}

目标是获取群组数据,

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Ddd.Web.Models.Customer
{
public partial class GroupListModel
{
public GroupListModel()
{
this.Group = new List<GroupModel>();
}
public List<GroupModel> Group { get; set; }
} public partial class GroupModel
{
public int GroupId { get; set; }
public string Title { get; set; }
public string Avatar { get; set; }
public bool IsFriend { get; set; }
public int OwnerId { get; set; }
public bool IsDismiss { get; set; }
}
}

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


using System;
using System.Collections.Generic;
using System.Linq;
using Ddd.Core.Caching;
using Ddd.Core.Data;
using Ddd.Core.Domain.Customers;
using Ddd.Services.Events;
using Ddd.Core; namespace Ddd.Services.Customers
{
/// <summary>
/// Group service
/// </summary>
public partial class GroupService : IGroupService
{
#region Constants /// <summary>
/// Key for caching
/// </summary>
private const string GROUPS_ALL_KEY = "YY.group.all";
/// <summary>
/// Key for caching
/// </summary>
/// <remarks>
/// {0} : group ID
/// </remarks>
private const string GROUP_BY_ID_KEY = "YY.group.id-{0}";
private const string GROUP_BY_APPTYPE_GROUPNAME_KEY = "YY.group.type-{0}.name-{1}";
/// <summary>
/// Key pattern to clear cache
/// </summary>
private const string GROUPS_PATTERN_KEY = "YY.group.";
#endregion #region Fields
private readonly IRepository<Group> _groupRepository;
private readonly IEventPublisher _eventPublisher;
private readonly ICacheManager _cacheManager;
#endregion #region Ctor /// <summary>
/// Ctor
/// </summary>
/// <param name="cacheManager">Cache manager</param>
/// <param name="groupRepository">Group repository</param>
/// <param name="eventPublisher">Event published</param>
public GroupService(ICacheManager cacheManager,
IRepository<Group> groupRepository,
IEventPublisher eventPublisher)
{
this._cacheManager = cacheManager;
this._groupRepository = groupRepository;
this._eventPublisher = eventPublisher;
} #endregion #region Methods /// <summary>
/// Gets all Groups
/// </summary>
/// <returns>Groups</returns>
public virtual IList<Group> GetAllGroups()
{
string key = GROUPS_ALL_KEY;
return _cacheManager.Get(key, () =>
{
var query = from a in _groupRepository.Table
orderby a.Id
select a;
return query.ToList();
});
} /// <summary>
/// Gets a Group
/// </summary>
/// <param name="groupId">Group identifier</param>
/// <returns>Group</returns>
public virtual Group GetGroupById(int groupId)
{
if (groupId == 0)
return null; string key = string.Format(GROUP_BY_ID_KEY, groupId);
return _cacheManager.Get(key, () => _groupRepository.GetById(groupId));
} /// <summary>
/// Inserts a Group
/// </summary>
/// <param name="group">Group</param>
public virtual Group InsertGroup(Group group)
{
if (group == null)
throw new ArgumentNullException("group"); _groupRepository.Insert(group); _cacheManager.RemoveByPattern(GROUPS_PATTERN_KEY); //event notification
_eventPublisher.EntityInserted(group);
return group;
} /// <summary>
/// Updates the Group
/// </summary>
/// <param name="group">Group</param>
public virtual void UpdateGroup(Group group)
{
if (group == null)
throw new ArgumentNullException("group"); _groupRepository.Update(group); _cacheManager.RemoveByPattern(GROUPS_PATTERN_KEY); //event notification
_eventPublisher.EntityUpdated(group);
} /// <summary>
/// Deletes a Group
/// </summary>
/// <param name="group">Group</param>
public virtual void DeleteGroup(Group group)
{
if (group == null)
throw new ArgumentNullException("group"); _groupRepository.Delete(group); _cacheManager.RemoveByPattern(GROUPS_PATTERN_KEY); //event notification
_eventPublisher.EntityDeleted(group);
} public virtual Group GetGroupBySysnameAndGroupName(string sysName, string groupName)
{
if (string.IsNullOrEmpty(sysName)||string.IsNullOrEmpty(groupName))
return null; string key = string.Format(GROUP_BY_APPTYPE_GROUPNAME_KEY, sysName,groupName);
return _cacheManager.Get(key, () => {
var query = from g in _groupRepository.Table
where g.SystemName == sysName
&& g.Title == groupName
&& !g.IsDismiss
select g;
return query.FirstOrDefault();
});
} /// <summary>
/// 获取所有的朋友圈列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public virtual IPagedList<Group> GetAllGroups(int pageIndex = 0, int pageSize = int.MaxValue)
{
var query = from g in _groupRepository.Table
where !g.IsDismiss
orderby g.Id descending
select g;
return new PagedList<Group>(query, pageIndex, pageSize);
} public virtual List<Group> SearchGroup(string appType, string keyWord)
{
var query = from x in _groupRepository.Table
where x.SystemName == appType
&& x.Title.Contains(keyWord)
&& x.IsDismiss == false
orderby x.Id descending
select x; // 查询群名包含keyWord的数据
return query.ToList();
}
#endregion
}
}

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

foreach (var item in groups)
{
model.Group.Add(new GroupModel()
{
GroupId = item.Id,
Title = item.Title,
Avatar = item.Avatar,
OwnerId = item.OwnerId,
IsDismiss = item.IsDismiss
});
}

最后通过Json输出,

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. 原生js实现发送验证码

    var form = { myfun:function(){ var el = form.config().el; var button = form.config().button; var tim ...

  2. UWP开发小结

    做了两天的UWP开发,上手还是挺快的,不过比较郁闷的是总会被一些很简单的细节卡住很久. 首先当然是用C#修改xaml界面这个难点了,Bing搜了好久都没找到相关信息,最后还是老司机伟神指点的我.对于g ...

  3. win10 的MQTT + apache-apollo服务器使用

    我的使用环境是windows10 2.下载文件目录(注意:开始看教程说直接打开bin目录下的apollo.cmd文件,闪退,原因是没有java_home环境,必须添加java环境): 3.安装好jav ...

  4. Linux 运维笔试题(一)

    试题:   1.说出下列服务对应的端口或者端口对应的服务 21  23  25  873  161  111  110  53  123  2049   2.文件atime,ctime,mtime的区 ...

  5. 学习Go语言之简易ORM框架

    ORM即为对象关系映射,ORM常用于程序适配多种数据库,以达到开放扩展关闭修改的原则.笔者初学Golang,遂有意写个简易ORM框架,权当知识巩固. 首先需要有一个思想就是数据库表结构都是固定,但是每 ...

  6. JZOJ5821手机信号

    用set维护,(l,r,v),注意边界,保证了两个端点l,r一定有信号站 增加有三种可能,1.直接加(没有影响),2.将原本的一个区间变成两个 3.将原本的一个区间变成三个 删除有三种情况,1.全包含 ...

  7. 数据库Flashback学习

    最近更新时间:2018/12/18 适用场景 数据库升级.快速构建测试环境.DG中重建主库 前置条件 1. ARCHIVELOG 模式 数据库为 mount 状态下开启,最好指定archive log ...

  8. WHU 1538 Stones II 动态规划

    赛后写的,动态规划,学长和题解,提供了两种状态设计的思路,都写了下……结果在写第二种的时候,不小心把下标的起点写错了,导致WA了无数发…… 无奈啊……每次都是这种错误…… 题意: 大概就是有n块石头, ...

  9. Android插件实例——360 DroidPlugin具体解释

    在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比方我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意非常好.新浪一收购GOOGLE.是不是新浪就变成老大了?你从哪儿 ...

  10. Unity multiplayer

    using UnityEngine; using System.Collections; public class multiplayer_Button : MonoBehaviour { void ...