UserAgentDelegatingHandler.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Net.Http;
  2. using System.Net.Http.Headers;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. namespace MediaBrowser.Common.Net
  6. {
  7. /// <summary>
  8. /// User agent delegating handler.
  9. /// Adds User-Agent header to all requests.
  10. /// </summary>
  11. public class UserAgentDelegatingHandler : DelegatingHandler
  12. {
  13. private readonly ProductInfoHeaderValue[] _userAgentValues;
  14. /// <summary>
  15. /// Initializes a new instance of the <see cref="UserAgentDelegatingHandler"/> class.
  16. /// </summary>
  17. /// <param name="applicationHost">Instance of the <see cref="IApplicationHost"/> interface.</param>
  18. public UserAgentDelegatingHandler(IApplicationHost applicationHost)
  19. {
  20. _userAgentValues = new[]
  21. {
  22. new ProductInfoHeaderValue(applicationHost.Name.Replace(' ', '-'), applicationHost.ApplicationVersionString)
  23. };
  24. }
  25. /// <summary>
  26. /// Send request message.
  27. /// </summary>
  28. /// <param name="request">The request message.</param>
  29. /// <param name="cancellationToken">The cancellation token.</param>
  30. /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns>
  31. protected override Task<HttpResponseMessage> SendAsync(
  32. HttpRequestMessage request,
  33. CancellationToken cancellationToken)
  34. {
  35. if (request.Headers.UserAgent.Count == 0)
  36. {
  37. for (var i = 0; i < _userAgentValues.Length; i++)
  38. {
  39. request.Headers.UserAgent.Add(_userAgentValues[i]);
  40. }
  41. }
  42. return base.SendAsync(request, cancellationToken);
  43. }
  44. }
  45. }