From b60e5982777e6141c4cae0069d401c2b7f9a6342 Mon Sep 17 00:00:00 2001 From: Mikael Mengistu Date: Sun, 27 Aug 2017 16:35:28 -0700 Subject: [PATCH] Setting the User-Agent header (#759) --- .../HttpClient.ts | 3 ++- .../Transports.ts | 2 ++ .../UserAgent.ts | 1 + .../Constants.cs | 13 +++++++++++++ .../HttpConnection.cs | 12 ++++++++---- .../LongPollingTransport.cs | 3 ++- .../SendUtils.cs | 7 ++----- 7 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 client-ts/Microsoft.AspNetCore.SignalR.Client.TS/UserAgent.ts create mode 100644 src/Microsoft.AspNetCore.Sockets.Client.Http/Constants.cs diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts index 08c3747c2a..ebee7c7509 100644 --- a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts +++ b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts @@ -1,4 +1,5 @@ import { HttpError } from "./HttpError" +import { UserAgent } from "./UserAgent" export interface IHttpClient { get(url: string, headers?: Map): Promise; @@ -25,7 +26,7 @@ export class HttpClient implements IHttpClient { xhr.open(method, url, true); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - + xhr.setRequestHeader("User-Agent", UserAgent); if (headers) { headers.forEach((value, header) => xhr.setRequestHeader(header, value)); } diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts index 477d080252..2bd3701d8e 100644 --- a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts +++ b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts @@ -2,6 +2,7 @@ import { DataReceived, TransportClosed } from "./Common" import { IHttpClient } from "./HttpClient" import { HttpError } from "./HttpError" import { ILogger, LogLevel } from "./ILogger" +import { UserAgent } from "./UserAgent" export enum TransportType { WebSockets, @@ -195,6 +196,7 @@ export class LongPollingTransport implements ITransport { } let pollXhr = new XMLHttpRequest(); + pollXhr.setRequestHeader("User-Agent", UserAgent); if (transferMode === TransferMode.Binary) { pollXhr.responseType = "arraybuffer"; } diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/UserAgent.ts b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/UserAgent.ts new file mode 100644 index 0000000000..59c32516c1 --- /dev/null +++ b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/UserAgent.ts @@ -0,0 +1 @@ +export const UserAgent = "Microsoft.AspNetCore.Sockets.Client.Http-js/1.0.0-alpha"; \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/Constants.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/Constants.cs new file mode 100644 index 0000000000..590ac11206 --- /dev/null +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/Constants.cs @@ -0,0 +1,13 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Net.Http.Headers; + +namespace Microsoft.AspNetCore.Sockets.Client.Http +{ + public class Constants + { + private static readonly string UserAgent = "Microsoft.AspNetCore.Sockets.Client.Http/1.0.0-alpha"; + public static readonly ProductInfoHeaderValue UserAgentHeader = ProductInfoHeaderValue.Parse(UserAgent); + } +} diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/HttpConnection.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/HttpConnection.cs index 29faf3d5f9..0f6f64a179 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/HttpConnection.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/HttpConnection.cs @@ -9,8 +9,9 @@ using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Channels; using Microsoft.AspNetCore.Http.Features; -using Microsoft.AspNetCore.Sockets.Features; +using Microsoft.AspNetCore.Sockets.Client.Http; using Microsoft.AspNetCore.Sockets.Client.Internal; +using Microsoft.AspNetCore.Sockets.Features; using Microsoft.AspNetCore.Sockets.Http.Internal; using Microsoft.AspNetCore.Sockets.Internal; using Microsoft.Extensions.Logging; @@ -200,10 +201,13 @@ namespace Microsoft.AspNetCore.Sockets.Client // Get a connection ID from the server logger.EstablishingConnection(url); using (var request = new HttpRequestMessage(HttpMethod.Options, url)) - using (var response = await httpClient.SendAsync(request)) { - response.EnsureSuccessStatusCode(); - return await ParseNegotiateResponse(response, logger); + request.Headers.UserAgent.Add(Constants.UserAgentHeader); + using (var response = await httpClient.SendAsync(request)) + { + response.EnsureSuccessStatusCode(); + return await ParseNegotiateResponse(response, logger); + } } } catch (Exception ex) diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/LongPollingTransport.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/LongPollingTransport.cs index 666c37d87b..cd0b970db4 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/LongPollingTransport.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/LongPollingTransport.cs @@ -7,6 +7,7 @@ using System.Net.Http; using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Channels; +using Microsoft.AspNetCore.Sockets.Client.Http; using Microsoft.AspNetCore.Sockets.Client.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; @@ -89,7 +90,7 @@ namespace Microsoft.AspNetCore.Sockets.Client while (!cancellationToken.IsCancellationRequested) { var request = new HttpRequestMessage(HttpMethod.Get, pollUrl); - request.Headers.UserAgent.Add(SendUtils.DefaultUserAgentHeader); + request.Headers.UserAgent.Add(Constants.UserAgentHeader); var response = await _httpClient.SendAsync(request, cancellationToken); response.EnsureSuccessStatusCode(); diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/SendUtils.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/SendUtils.cs index f02672203b..58b5132f07 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/SendUtils.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/SendUtils.cs @@ -5,10 +5,10 @@ using System; using System.Collections.Generic; using System.IO; using System.Net.Http; -using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Channels; +using Microsoft.AspNetCore.Sockets.Client.Http; using Microsoft.AspNetCore.Sockets.Client.Internal; using Microsoft.Extensions.Logging; @@ -16,9 +16,6 @@ namespace Microsoft.AspNetCore.Sockets.Client { internal static class SendUtils { - private static readonly string DefaultUserAgent = "Microsoft.AspNetCore.SignalR.Client/0.0.0"; - public static readonly ProductInfoHeaderValue DefaultUserAgentHeader = ProductInfoHeaderValue.Parse(DefaultUserAgent); - public static async Task SendMessages(Uri sendUrl, Channel application, HttpClient httpClient, CancellationTokenSource transportCts, ILogger logger, string connectionId) { @@ -41,7 +38,7 @@ namespace Microsoft.AspNetCore.Sockets.Client // Send them in a single post var request = new HttpRequestMessage(HttpMethod.Post, sendUrl); - request.Headers.UserAgent.Add(DefaultUserAgentHeader); + request.Headers.UserAgent.Add(Constants.UserAgentHeader); // TODO: We can probably use a pipeline here or some kind of pooled memory. // But where do we get the pool from? ArrayBufferPool.Instance?