diff --git a/src/Tgstation.Server.Host/Controllers/ApiController.cs b/src/Tgstation.Server.Host/Controllers/ApiController.cs index 9d89a62b52..16fa1704dd 100644 --- a/src/Tgstation.Server.Host/Controllers/ApiController.cs +++ b/src/Tgstation.Server.Host/Controllers/ApiController.cs @@ -203,7 +203,14 @@ namespace Tgstation.Server.Host.Controllers Logger.LogDebug("Request made by User ID {0}. Api version: {1}. User-Agent: {2}. Type: {3}. Route {4}{5} to Instance {6}", AuthenticationContext?.User.Id.ToString(CultureInfo.InvariantCulture), ApiHeaders.ApiVersion, ApiHeaders.UserAgent, Request.Method, Request.Path, Request.QueryString, ApiHeaders.InstanceId); - await base.OnActionExecutionAsync(context, next).ConfigureAwait(false); + try + { + await base.OnActionExecutionAsync(context, next).ConfigureAwait(false); + } + catch (OperationCanceledException e) + { + Logger.LogDebug("Request cancelled! Exception: {0}", e); + } } } } diff --git a/src/Tgstation.Server.Host/Core/Application.cs b/src/Tgstation.Server.Host/Core/Application.cs index 743ed7b490..556c2d1fbe 100644 --- a/src/Tgstation.Server.Host/Core/Application.cs +++ b/src/Tgstation.Server.Host/Core/Application.cs @@ -244,6 +244,8 @@ namespace Tgstation.Server.Host.Core applicationBuilder.UseDbConflictHandling(); + applicationBuilder.UseCancelledRequestSuppression(); + applicationBuilder.UseMvc(); } diff --git a/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs b/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs index b86e780895..becd3e5ad6 100644 --- a/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs +++ b/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs @@ -35,5 +35,23 @@ namespace Tgstation.Server.Host.Core } }); } + + /// + /// Suppress TaskCanceledException warnings when a user aborts a request + /// + /// The to configure + public static void UseCancelledRequestSuppression(this IApplicationBuilder applicationBuilder) + { + if (applicationBuilder == null) + throw new ArgumentNullException(nameof(applicationBuilder)); + applicationBuilder.Use(async (context, next) => + { + try + { + await next().ConfigureAwait(false); + } + catch (OperationCanceledException) { } + }); + } } }