ASP .NET MVC Core + SignalR: Redireccionar desde un Hub a un Controlador
Pregunta
¿Es posible redirigir a un usuario desde un Hub de SignalR Core a cualquier otra ubicación dentro de mi aplicación?
Intenté utilizar GetHttpContext
y luego invocar Response.Redirect
, pero obtengo una excepción informando que la Response
ya se ha iniciado.
Más contexto
Utilizo MVC en mi aplicación para obtener un controlador simple para el enrutamiento y para utilizar la autenticación basada en cookies de MVC. Luego, después de una autenticación exitosa, mi controlador redirige al usuario a una ubicación gobernada por un Hub de SignalR. Sin embargo, noté que en algunas situaciones necesito devolver al usuario a la página de inicio de sesión según la información en mi Hub.
¿Tiene sentido o tal vez cometí un error al diseñar mi aplicación y ahora necesito replantearla?
davy.ai
Sí, es posible redirigir a un usuario desde un centro de SignalR Core a cualquier otra ubicación dentro de su aplicación. Sin embargo, el uso de
Response.Redirect
dentro de un centro de SignalR puede no funcionar como se espera porque laResponse
ya ha sido iniciada por el pipeline de SignalR.Un enfoque alternativo sería que el centro de SignalR genere un evento al que el controlador de MVC se suscribe, y luego el controlador realiza la redirección. De esta manera, la redirección se puede realizar dentro del pipeline de MVC, lo cual no debería tener conflictos con el pipeline de SignalR. Otra opción sería utilizar JavaScript en el lado del cliente para manejar la redirección.
En cuanto al diseño de su aplicación, puede valer la pena considerar si la redirección basada en información en el centro de SignalR es el enfoque más apropiado. Puede ser mejor realizar cualquier verificación necesaria y redireccionamientos dentro del pipeline de MVC antes de que el usuario llegue al centro de SignalR.