ASP .NET MVC Core + SignalR:从集线器重定向到控制器
ASP .NET MVC Core + SignalR: Redirecting from a Hub to a Controller
问题
是否可以将用户从 SignalR Core Hub 重定向到我的应用程序中的任何其他位置?
我尝试使用 GetHttpContext
然后调用 Response.Redirect
,但我收到一个异常通知 Response
已经启动。
更多上下文
我在我的应用程序中使用 MVC 来获得一个用于路由和使用 MVC 基于 cookie 的身份验证的简单控制器。然后,在身份验证成功后,我的控制器将用户重定向到由 SignalR Hub 管理的位置。但是,我注意到在某些情况下,我需要 return 用户根据我的 Hub 中的信息登录页面。
这是否有意义,或者我在设计我的应用程序时犯了一个错误,现在需要返工?
正如@Wiktor Zychla 所说,我们应该在客户端做这些事情,因为服务器集线器的方法无法重定向客户端。只能在服务端写方法,然后用客户端js做重定向。
更多详情,您可以参考以下代码:
public async Task RedirectPage(string user) {
// You could send it to a specific user
await Clients.All.SendAsync("RedirectPageClient", "home/index");
}
Js代码:
connection.on("RedirectPageClient",function(url){
console.log(url);
window.location.href = url;
});
问题
是否可以将用户从 SignalR Core Hub 重定向到我的应用程序中的任何其他位置?
我尝试使用 GetHttpContext
然后调用 Response.Redirect
,但我收到一个异常通知 Response
已经启动。
更多上下文
我在我的应用程序中使用 MVC 来获得一个用于路由和使用 MVC 基于 cookie 的身份验证的简单控制器。然后,在身份验证成功后,我的控制器将用户重定向到由 SignalR Hub 管理的位置。但是,我注意到在某些情况下,我需要 return 用户根据我的 Hub 中的信息登录页面。
这是否有意义,或者我在设计我的应用程序时犯了一个错误,现在需要返工?
正如@Wiktor Zychla 所说,我们应该在客户端做这些事情,因为服务器集线器的方法无法重定向客户端。只能在服务端写方法,然后用客户端js做重定向。
更多详情,您可以参考以下代码:
public async Task RedirectPage(string user) {
// You could send it to a specific user
await Clients.All.SendAsync("RedirectPageClient", "home/index");
}
Js代码:
connection.on("RedirectPageClient",function(url){
console.log(url);
window.location.href = url;
});