ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据

news/2024/5/13 20:42:23/文章来源:https://blog.csdn.net/weixin_30701575/article/details/98299382

  最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前端组件配合后台完成即时聊天等功能。当然用到的技术就是ASP.NET SingalR框架。本人不会css和前端的东西,只会少量的js,所以前端的代码不做介绍,喜欢前端的同学可以自行研究,闲言少叙,书归正传。

  我们先看一下layim的效果,看起来还是挺友好的,界面也不错。不过,我做了些调整,具体其他细节可以自己完善。

  

  界面看完了,那么看一下数据。demo里做的也不错,ajax也封装好了,那么我们就直接对照着他的demo看看吧。数据分别有:friend.json,group.json,groups.json,chatlog.json,他们的数据格式如下:(仅仅展示friend.json,其他类似)

  

{"status": 1,"msg": "ok","data": [{"name": "销售部","nums": 36,"id": 1,"item": [{"id": "100001","name": "郭敬明","face":  "/images/default.jpg"},{"id": "100002","name": "作家崔成浩","face":  "/images/default.jpg"},{"id": "1000022","name": "韩寒","face":  "/images/default.jpg"},{"id": "10000222","name": "范爷","face":  "/images/default.jpg"},{"id": "100002222","name": "小马哥","face":  "/images/default.jpg"}]},{"name": "大学同窗","nums": 16,"id": 2,"item": [{"id": "1000033","name": "苏醒","face":  "/images/default.jpg"},{"id": "10000333","name": "马云","face":  "/images/default.jpg"},{"id": "100003","name": "鬼脚七","face":  "/images/default.jpg"},{"id": "100004","name": "谢楠","face":  "/images/default.jpg"},{"id": "100005","name": "徐峥","face":  "/images/default.jpg"}]},{"name": "H+后台主题","nums": 38,"id": 3,"item": [{"id": "100006","name": "柏雪近在它香","face":  "/images/default.jpg"},{"id": "100007","name": "罗昌平","face":  "/images/default.jpg"},{"id": "100008","name": "Crystal影子","face":  "/images/default.jpg"},{"id": "100009","name": "艺小想","face": "/images/default.jpg"},{"id": "100010","name": "天猫","face":  "/images/default.jpg"},{"id": "100011","name": "张泉灵","face":  "/images/default.jpg"}]}]
}
View Code

  数据格式有了,那么我们在后台简单建几个Model。 CS的是 CustomService缩写,命名。。。。。就留个槽点吧

 public class CSGroupResult{public int id { get; set; }public string name { get; set; }public int nums { get { return item == null ? 0 : item.Count; } }public List<CSBaseModel> item { get; set; }}public class CSResult{public int status { get; set; }public string msg { get; set; }public object data { get; set; }}public class CSBaseModel{public int id { get; set; }public string name { get; set; }//  public string time { get; set; }public string face { get; set; }}public class CSFriend : CSBaseModel { }public class CSGroup : CSBaseModel { }public class CSGroups : CSBaseModel { }

  好的,很简单的几个Model建好了,就是根据layim里的json格式建的,这样,输出结果可以直接符合layim的接口JSON要求。下面,构建几个假数据,本来打算用数据库的,后来想想,只是写一下思路吧,就不在用数据库了。其实不仅是数据库,只要是可存储的东西都可以来放这些用户,聊天,群组等信息。

  public class DBHelper{/// <summary>/// 获取好友列表/// </summary>/// <returns></returns>public static CSResult GetFriends(){var friends = new List<CSBaseModel>();for (int i = 0; i < 9; i++) {friends.Add(new CSFriend { id = i, name = "好友" + i, face = "/photos/00" + i + ".jpg" });}var friendGroup = new List<CSGroupResult>();friendGroup.Add(new CSGroupResult { id = 1, item = friends, name = "我的分组一" });friendGroup.Add(new CSGroupResult { id = 2, item = friends, name = "我的分组二" });friendGroup.Add(new CSGroupResult { id = 3, item = friends, name = "我的分组三" });CSResult result = new CSResult{msg = "ok",status = 1,data = friendGroup};return result;}/// <summary>/// 获取分组列表/// </summary>/// <returns></returns>public static CSResult GetGroup(){var groups = new List<CSBaseModel>();for (int i = 0; i < 3; i++){groups.Add(new CSGroup { id = i, name = "分组" + i, face = "/photos/00" + i + ".jpg" });}var friendGroup = new List<CSGroupResult>();friendGroup.Add(new CSGroupResult { id = 1, item = groups, name = "分组名称一" });friendGroup.Add(new CSGroupResult { id = 2, item = groups, name = "分组名称二" });friendGroup.Add(new CSGroupResult { id = 3, item = groups, name = "分组名称三"});CSResult result = new CSResult{msg = "ok",status = 1,data = friendGroup};return result;}}

  我后台使用的是ASP.NET MVC。新建Controller,就叫CustomServiceController吧,写好方法,配置路由,这里就不多介绍了。

  /// <summary>/// 获取数据/// </summary>/// <param name="type"></param>/// <returns></returns>public JsonResult GetData(string type){var result = DBHelper.GetResult(type);return Json(result, JsonRequestBehavior.AllowGet);}

 

  那么到这里,我们测试一下方法返回结果(路由配置的是getdata),浏览器里输入:http://localhost:20237/getdata?type=friend F12看一下结果:

  好了,结果出来了,怎么和layim结合呢?很简单,看一下,layim.js代码,找到config.api,将接口改成自己的服务器接口就可以了(如果想做完整插件服务的话,这里可能有跨域问题吧)

 var config = {msgurl: 'mailbox.html?msg=',chatlogurl: 'mailbox.html?user=',aniTime: 200,right: -232,api: {friend: '/getdata?type=friend', //好友列表接口。    将这个接口改为服务器的接口就可以了,下面两个暂时没做,后续会补上,同理group: '/getdata?type=group', //群组列表接口chatlog: '/scripts/layim/chatlog.json', //聊天记录接口groups: '/scripts/layim/groups.json', //群组成员接口sendurl: '' //发送消息接口
        },user: { //当前用户信息name: '游客',face: '/images/default.jpg'},

  到这里,数据整合部分就完成了,是不是很简单啊,想看运行效果?其实刚开始的图1,和图3就是运行效果了。要实现图二的话,只要重复上面的步骤,将接口方法写好,然后配置上接口路径就可以了。

  补充:重新调整了一下代码,考虑到有的同学用的不是MVC,所以采用ashx的方式实现数据获取,同时,代码也调整了一下,DBHelper增加逻辑判断方法 GetResult(string type)

        /// <summary>/// 在封装一层业务,根据type返回不同的结果/// </summary>/// <param name="type"></param>/// <returns></returns>public static CSResult GetResult(string type){CSResult result = null;switch (type){case "friend":result = DBHelper.GetFriends();break;case "group":result = DBHelper.GetGroup();break;case "log":result = DBHelper.GetChatLog();break;case "groups":result = DBHelper.GetGroupMember();break;default:result = new CSResult { status = 0, data = null, msg = "无效的请求类型" };break;}return result;}

那么controller和ashx里面调用方法就简单了:

        /// <summary>/// Controller中获取数据/// </summary>/// <param name="type"></param>/// <returns></returns>public JsonResult GetData(string type){var result = DBHelper.GetResult(type);return Json(result, JsonRequestBehavior.AllowGet);}//ashx获取数据方法public void ProcessRequest(HttpContext context){//这里的类型要改成json,否则,前端获取的数据需要调用JSON.parse方法将文本转成json,//为了不用改变前端代码,这里将text/plain改为application/jsoncontext.Response.ContentType = "application/json";//接收type 参数string type = context.Request.QueryString["type"] ?? context.Request.QueryString["type"].ToString();//调用业务处理方法获取数据结果var result = DBHelper.GetResult(type);//序列化var json = ScriptSerialize(result);context.Response.Write(json);}/// <summary>/// 序列化方法,(暂时放在这里)/// </summary>/// <typeparam name="T"></typeparam>/// <param name="t"></param>/// <returns></returns>private string ScriptSerialize<T>(T t){JavaScriptSerializer serializer = new JavaScriptSerializer();return serializer.Serialize(t);}

  然后我们将layim.js里的获取好友列表的接口地址改成 /getdata.ashx?type=friend 是不是一样就可以调用了呢。(截图略)

  再补充:有人问怎么用webservice做接口,我尝试了一下,虽然比较麻烦,但最终还是调通了,具体webservice不多做介绍了,下面看详细修改的代码,首先,为了保证程序变化不大,尽量少修改,我加了一些参数判断,在layim.js

  红框地方就是代码修改过的地方,然后在调用config.json里面,由于webservice是post请求,所以参数就不能那么用了,改为 "{"type":"friend"}"形式

  

  最后,webservice后台方法与ashx一致:

  public class getdataWebService : System.Web.Services.WebService{[WebMethod]public string GetResult(string type){//调用业务处理方法获取数据结果var result = DBHelper.GetResult(type);var json = MessageUtilcs.ScriptSerialize(result);return json;}}

  具体呢,到这里就终于把webservice调通了,不过需要改一些layim的js来配合。这儿有点麻烦。不过知道其中的原理,人是活的,代码同样可以写活。OK,最后的补充了。运行试试吧,是不是现在支持 MVC接口,ashx接口和webservice接口了呢,如果有机会再把webapi接口加上~~

  第一篇就先到这里吧,还没有涉及到SingalR的东西,下一步,我们就搭建SingalR环境,实现聊天功能。 写的有点粗糙哦,希望你喜欢。PS:想要代码的同学留下邮箱或者等我的博客写完了,放到github上,会告诉大家地址的哦。

转载于:https://www.cnblogs.com/panzi/p/5144824.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_790652.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职高c语言试卷下载网站,C语言职高对口升学周考试卷

C语言职高对口升学周考试卷 (14页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分&#xfeff;湖南省2016年普通高等学校对口招生考试计算机应用类专业综合知识模拟试卷时量:150分钟&#xf…

三角形旋转css_网站前端开发之CSS制作小图标

网站的应用可以展示和提升企业的形象&#xff0c;让用户更加清晰明了的理解企业所表达的&#xff0c;达到宣传企业和品牌的目的&#xff0c;构成一种网络沟通的渠道。便利于企业管理人员对用户的管理&#xff0c;节约了成本&#xff0c;同时还能及时的反馈用户的信息&#xff0…

限制服务器访问指定网站,用访问控制列表限制访问指定网站

最近经常有同事打“小报告”&#xff0c;埋怨网速越来越慢&#xff0c;并且领导也“深有同感”的意思&#xff0c;这下子问题必须得解决了&#xff0c;不然等“领导很生气”的时候&#xff0c;肯定就“后果很严重”了。先是Sniffer嗅探分析流量&#xff0c;然后是“明查暗访”&…

vue 自动生成器_超4K+基于Vue.js超快速创建现代化网站gridsome

使用Vue.js&#xff0c;webpack和Node.js等现代工具构建网站&#xff0c;从NPM中获得热重载和访问任何包&#xff0c;并在您喜欢的预处理器(如SASS或更少的自动预处理)中编写CSS。。使用任何CMS或数据源获取内容。从WordPress&#xff0c;Contentful&#xff0c;local Markdown…

m180n 如何设置网络打印_「hp彩色打印机」惠普m180n打印机怎么设置彩色打印? - seo实验室...

hp彩色打印机惠普m180n需要手动设置打印彩色的文件&#xff0c;找到属性选项&#xff0c;然后选择颜色项&#xff0c;将出现的彩色打印打钩&#xff0c;然后点确定&#xff0c;就可以了&#xff0c;下面我们就来看看详细的教程。1、一般彩色打印机默认就是按照文件的色彩设置进…

网站克隆

setoolkit 使用setoolkit工具&#xff1a;setoolkit 选择1&#xff0c;社会工程学攻击 选择2&#xff0c;Web攻击向量 选择3&#xff0c;认证信息获取攻击方法 若选择1&#xff0c;SET将提供Web模板&#xff1a;google、twitter等 这里我们选择2&#xff0c;网站克隆 注&a…

云服务器可以放网站程序吗,云服务器可以放网站程序吗

云服务器可以放网站程序吗 内容精选换一换企业主机安全服务主要包含资产管理、漏洞管理、入侵检测、基线检查和网页防篡改功能。资产管理功能可深度扫描出主机中的账号、端口、进程、Web目录、软件信息和自启动任务&#xff0c;在资产管理界面&#xff0c;您可以统一管理主机中…

等保2.0,网站信息系统安全等级保护流程你知道吗?

随着信息技术的发展和网络安全形势的变化&#xff0c;等保1.0已无法有效应对新的安全风险和新技术应用所带来的新威胁。为适应新技术的发展&#xff0c;解决云计算、物联网、移动互联和工控领域信息系统的等级保护工作的需要&#xff0c;由公安部牵头组织开展了信息技术新领域等…

网站被攻击怎么处理,快速解决方法

网站被攻击怎么处理&#xff0c;如何快速解决&#xff1f;当网站被攻击&#xff0c;先要了解网站攻击的类型&#xff0c;网站攻击一般分为3类&#xff0c;分别为ARP欺骗攻击、CC攻击、DDOS流量攻击。 ​网站攻击类型一&#xff1a;ARP欺骗攻击 ARP欺骗又称ARP毒化或ARP攻击&am…

公司网站被攻击如何解决?超级科技教你解决网站被攻击的方法

公司网站被攻击如何解决&#xff1f;据悉&#xff0c;美国最大的燃油管道运营公司科洛尼尔公司&#xff08;Colonial Pipeline&#xff09;被黑客攻击&#xff0c;导致美国多个管道被关闭。受到燃油管道关闭影响&#xff0c;美国弗吉尼亚州州长拉尔夫-诺瑟姆&#xff08;Ralph …

如何保护WordPress网站免受网络攻击?采取安全措施至关重要

如果您拥有WordPress网站&#xff0c;那么本文适合您&#xff0c;因为它解决了WordPress的安全性并防止了网络攻击。WordPress是一个广泛使用的CMS&#xff08;内容管理系统&#xff09;&#xff0c;为所有可用网站的很大一部分提供支持。不幸的是&#xff0c;它也吸引了利用平…

.fans域名建站助力汽车行业的“粉丝经济”风潮

近几年来&#xff0c;随着泛娱乐化时代的到来&#xff0c;粉丝经济正受到越来越多行业的重视。各行业通过营销手段逐步向泛娱乐圈靠拢&#xff0c;通过娱乐文化渗透吸引粉丝群体&#xff0c;为其提供多元化的娱乐体验&#xff0c;在满足粉丝需求的同时&#xff0c;也有助于提升…

继微博之后,.fans建站成饭圈新宠

只要有华人的地方&#xff0c;就会有她的歌声。 无论你是“前浪”还是“后浪”&#xff0c;一提到“邓丽君”这个名字&#xff0c;肯定每个人都能随口哼出一首她的歌。每年的5月8日&#xff0c;这个逝去经年的名字总会被人记起……“任时光匆匆流去”&#xff0c;转眼间邓丽君…

复工复产如火如荼,lean.ren这个宝藏网站送给你!

随着疫情的逐渐控制和好转 在谈到企业复工复产时 很多经济学家都提到了“精益生产”这个概念 并鼓励企业“精益生产” “精益生产”的管理理念 已经被不少企业的管理者广泛采用 在全球拥有众多追随者 国内大家熟悉的蒙牛乳业、 格力、海尔集团的管理者 也都通过“精益生…

百度快照跳转劫持黑客网站怎么处理?

近期接过很多中小企业网站频繁的被黑客入侵篡改了快照内容的网站安全问题导致打开网站被提示博彩页面,在搜索引擎中会被提示百度网址安全中心提醒您&#xff1a;该页面可能已被非法篡改&#xff01; 主要客户网站问题基本都是反复性质的篡改,手动清理删除掉代码只能解决当前问题…

什么是网站劫持,如何查劫持?

网站劫持是指当打开一个网址后&#xff0c;展示一个不属于当前链接的内容&#xff0c;可能是跳转到某个不属于本站域下的页面。强制引导用户访问目标网站&#xff0c;最终达到获利的目的。 由于这种网站一般都存在挂马、钓鱼、捆绑下载、恶意推广、涉黄赌毒等不法行为&#xff…

使用PHP轻松监控网站状态的方法介绍

一个可以运行PHP文件的Web服务器&#xff08;相当于监控服务器&#xff09;&#xff0c;现在免费的PHP网站空间很多&#xff0c;上网搜搜。如果将PHP监控文件放到你自己的服务器上&#xff0c;这个监控文件也就等于摆设&#xff0c;服务器挂掉了&#xff0c;它也无法运行了&…

网站实时监控,Web网站及前端性能监控方法

Web网站及前端性能监控方法分成3个部分&#xff1a; 收集。收集分为2个方面。 1&#xff0c;定时使用不同网络环境不同地区的机器&#xff0c;用浏览器或者一些模拟浏览器的工具检查监控页面的各项指标&#xff0c;再保存日志。&#xff08;优点&#xff0c;性能指标准确&…

劫持网站的常见方法和防护手段分享

今天来介绍一下网站防劫持的方法。劫持网站的方法好有多种&#xff0c;但是核心的方法其实只有两大类&#xff0c;一类就是在你的网站中植入代码如JS文件&#xff0c;另外一类叫做DNS劫持&#xff0c;就是把你要访问的网页转向其他非法的页面中去。 假如你的网站已经被劫持了&a…

什么是网站劫持,发现网站被劫持该怎么办?

网站劫持是指本想打开某个网站的时候&#xff0c;却被拦截跳转到另一个网站页面&#xff0c;或者出现一个不属于此网站的广告。 IIS7网站监控可以及时防控网站风险&#xff0c;快速准确监控网站是否遭到各种劫持攻击&#xff0c;网站在全国是否能正常打开&#xff08;查看域名是…