我已经基于个人用户身份验证创建了MVC 5 Web应用程序。
我已阅读asp.net文章 http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc表示不需要为单个用户身份验证类型应用程序单独创建startup.cs。 所以我在ConfigureAuth方法中添加 app.MapSignalR(); 驻留在 App_Start> Startup.Auth.cs 文件中。
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
}); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.MapSignalR();}
在视图页面中,我添加了以下参考
<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="~/signalr/hubs"></script>
但是在运行时我得到/ Signalr / hubs js文件的403 Not found错误。 如何解决它。
答案 0 :(得分:0)
您确定已拨打app.MapSignalR()
吗?
我不确定它是否应该与ConfigureAuth中的此命令一起使用,但我会尝试创建一个单独的启动文件,如文章中所述:
using Owin;
using Microsoft.Owin;
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}
尝试将其放在单独的文件中,看看它是否适合您。
另外,您的Application_Start方法是这样的吗?
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteTable.Routes.MapHubs();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
我发现您调用注册方法的顺序很重要,因此请确保您已正确放置它们并且已调用RouteTable.Routes.MapHubs()
方法。
答案 1 :(得分:0)
我已经尝试了这个并且有效。
这是我的示例应用程序
cshtml文件
<script type="text/javascript" src="~/scripts/jquery.signalR-2.2.0.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script>
<script>
$(function () {
debugger;
var chat = $.connection.signalhub;
chat.client.Send = function (msg) {
debugger;
$("#message").append(msg);
}
$("#btnSend").click(function () {
debugger;
chat.server.broadcastMessage($("#txtmessage").val());
$('#txtmessage').val('').focus();
});
$.connection.hub.start();
});
</script>
<div class="row" id="message">
</div>
<input type="text" name="txtmessage" id="txtmessage" />
<button name="btnSend" id="btnSend">Send</button>
这是我的SignalRHub
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace SignalR.Code
{
[HubName("signalhub")]
public class SignalRHub : Hub
{
public void BroadcastMessage(string message)
{
Clients.Client(Context.ConnectionId).Send(message);
}
}
}
这是我的Startup.Auth.cs文件
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;
namespace SignalR
{
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
app.MapSignalR();
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
}
}
另外我建议您查看您使用的JQuery版本,并确定您的项目在哪个位置?