SignalR 2.x入门(二):SignalR在MVC5中的使用

简介: SignalR 2.x入门(二):SignalR在MVC5中的使用

1.开发(代码下载

新建一个ASP.NET Web项目,项目类型为MVC,将认证模式改为无身份认证。在程序包管理控制台输入如下语句,安装SignalR

install-package Microsoft.AspNet.SignalR

为了便于管理,在项目中添加一个名为Hubs的文件夹,在文件夹上右键单击,选择Visual C#  >> Web >> SignalR >>SignalR 集线器类 ( V2 ),命名为ChatHub,这个类将是我们所有客户端调用的Hub服务,修改代码,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat_Part2.Hubs
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            //调用所有客户端的addNewMessageToPage function
            Clients.All.addNewMessageToPage(name, message);
        }
    }
}

接着,创建OWIN Startup 类,修改代码,代码如下:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRChat_Part2.Startup))]
namespace SignalRChat_Part2
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
            app.MapSignalR();
        }
    }
}

然后,在HomeController中新增一个Action,命名为Chat,代码如下:

public ActionResult Chat()
{
   return View();
}

最后,创建Chat 视图,修改试图代码,代码如下:

@{
    ViewBag.Title = "Chat";
}
<h2>Chat</h2>
<div class="container">
    <input type="text" id="message" />
    <input type="button" id="sendmessage" value="Send" />
    <input type="hidden" id="displayname" />
    <ul id="discussion">
    </ul>
</div>
@section scripts {
    <!--注意:这里的jQuery脚本已经在模板页_Layout.cshtml中引用-->
    <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
    <!--signalr自动生成的脚本-->
    <script src="~/signalr/hubs"></script>
    <script>
        $(function () {
            //声明hub代理
            var chat = $.connection.chatHub;
            //创建后端要调用的前端function
            chat.client.addNewMessageToPage = function (name, message) {
                //将信息添加到页面上
                $('#discussion').append('<li><strong>' + htmlEncode(name) + '</strong>:' + htmlEncode(message) + '</li>');
            };
            //获取输入的名称
            $('#displayname').val(prompt('Enter your name:', ''));
            //将焦点定位在信息输入框中
            $('#message').focus();
            //开启链接
            $.connection.hub.start().done(function () {
                $('#sendmessage').click(function () {
                    //调用后台hub的Send方法
                    chat.server.send($('#displayname').val(), $('#message').val());
                    //清除发送的内容,并将焦点定位到信息框
                    $('#message').val('').focus();
                });
            });
            //该function防止JS注入
            function htmlEncode(value) {
                var encodeValue = $('<div/>').text(value).html();
                return encodeValue;
            }
        });
    </script>
}

运行,效果如图:1.png

2.需注意的

JS在调用Hub时,Hub的首字母小写,不管后端代码是大写还是小写,JS调用时首字母均小写,除非后台Hub类上已经定义了HubName 属性(如:[HubName("ChatHb")]),这种情况下,JS调用Hub时,根据HubName属性定义的名称走。

目录
相关文章
|
12月前
|
JSON 前端开发 Java
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
108 0
|
5天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
18 1
SpringBoot入门(3) - 对Hello world进行MVC分层
|
3天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
本文介绍了如何在Spring Boot项目中实现MVC分层架构,通过将代码划分为controller、service、dao和entity四个部分,实现高内聚低耦合的设计。示例项目包括用户增删查改功能,详细展示了各层的具体实现及运行测试。
23 11
|
2天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
9 2
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
48 0
|
3月前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
54 0
|
5月前
|
JSON 前端开发 Java
Spring Web MVC入门(3)——响应
Spring Web MVC入门(3)——响应
51 1
|
5月前
|
存储 前端开发 Java
Spring Web MVC入门(2)——请求(下)
Spring Web MVC入门(2)——请求
51 0
|
5月前
|
JSON 前端开发 Java
Spring Web MVC入门(2)——请求(上)
Spring Web MVC入门(2)——请求
31 0
|
5月前
|
设计模式 前端开发 Java
Spring Web MVC入门(1)
Spring Web MVC入门(1)
40 0