private async Task RedirectToService(HttpContext context, string hubName, IList <IAuthorizeData> authorizationData) { if (!await AuthorizeHelper.AuthorizeAsync(context, authorizationData)) { return; } NegotiationResponse negotiateResponse = null; try { negotiateResponse = _negotiateHandler.Process(context, hubName); } catch (AzureSignalRAccessTokenTooLongException ex) { Log.NegotiateFailed(_logger, ex.Message); context.Response.StatusCode = 413; await HttpResponseWritingExtensions.WriteAsync(context.Response, ex.Message); return; } var writer = new MemoryBufferWriter(); try { context.Response.ContentType = "application/json"; NegotiateProtocol.WriteResponse(negotiateResponse, writer); // Write it out to the response with the right content length context.Response.ContentLength = writer.Length; await writer.CopyToAsync(context.Response.Body); } finally { writer.Reset(); } }
private async Task RedirectToService(HttpContext context, string hubName, IList <IAuthorizeData> authorizationData) { if (!await AuthorizeHelper.AuthorizeAsync(context, authorizationData)) { return; } var negotiateResponse = _negotiateHandler.Process(context, hubName); var writer = new MemoryBufferWriter(); try { context.Response.ContentType = "application/json"; NegotiateProtocol.WriteResponse(negotiateResponse, writer); // Write it out to the response with the right content length context.Response.ContentLength = writer.Length; await writer.CopyToAsync(context.Response.Body); } finally { writer.Reset(); } }
public static async Task RedirectToService(HttpContext context, string hubName, IList <IAuthorizeData> authorizationData) { var handler = context.RequestServices.GetRequiredService <NegotiateHandler>(); var loggerFactory = context.RequestServices.GetService <ILoggerFactory>(); var logger = loggerFactory.CreateLogger <ServiceRouteHelper>(); if (authorizationData != null && !await AuthorizeHelper.AuthorizeAsync(context, authorizationData)) { return; } NegotiationResponse negotiateResponse = null; try { negotiateResponse = handler.Process(context, hubName); if (context.Response.HasStarted) { // Inner handler already write to context.Response, no need to continue with error case return; } // Consider it as internal server error when we don't successfully get negotiate response if (negotiateResponse == null) { var message = "Unable to get the negotiate endpoint"; Log.NegotiateFailed(logger, message); context.Response.StatusCode = 500; await context.Response.WriteAsync(message); return; } } catch (AzureSignalRAccessTokenTooLongException ex) { Log.NegotiateFailed(logger, ex.Message); context.Response.StatusCode = 413; await context.Response.WriteAsync(ex.Message); return; } catch (AzureSignalRNotConnectedException e) { Log.NegotiateFailed(logger, e.Message); context.Response.StatusCode = 500; await context.Response.WriteAsync(e.Message); return; } var writer = new MemoryBufferWriter(); try { context.Response.ContentType = "application/json"; NegotiateProtocol.WriteResponse(negotiateResponse, writer); // Write it out to the response with the right content length context.Response.ContentLength = writer.Length; await writer.CopyToAsync(context.Response.Body); } finally { writer.Reset(); } }