diff options
Diffstat (limited to 'MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs')
| -rw-r--r-- | MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs b/MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs new file mode 100644 index 000000000..f527c766f --- /dev/null +++ b/MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Common.Net +{ + /// <summary> + /// User agent delegating handler. + /// Adds User-Agent header to all requests. + /// </summary> + public class UserAgentDelegatingHandler : DelegatingHandler + { + /// <inheritdoc /> + public UserAgentDelegatingHandler(IApplicationHost applicationHost) + { + UserAgentValues = new List<ProductInfoHeaderValue> + { + new ProductInfoHeaderValue(applicationHost.Name.Replace(' ', '-'), applicationHost.ApplicationVersionString), + new ProductInfoHeaderValue($"({Environment.OSVersion}; {applicationHost.ApplicationUserAgentAddress})") + }; + } + + /// <summary> + /// Gets or sets the user agent values. + /// </summary> + public List<ProductInfoHeaderValue> UserAgentValues { get; set; } + + /// <summary> + /// Send request message. + /// </summary> + /// <param name="request">The request message.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns> + protected override Task<HttpResponseMessage> SendAsync( + HttpRequestMessage request, + CancellationToken cancellationToken) + { + if (request.Headers.UserAgent.Count == 0) + { + foreach (var userAgentValue in UserAgentValues) + { + request.Headers.UserAgent.Add(userAgentValue); + } + } + + return base.SendAsync(request, cancellationToken); + } + } +} |
