Merge in 'release/3.1' changes

This commit is contained in:
dotnet-bot 2020-04-14 20:01:33 +00:00
commit a2428c7175
8 changed files with 64 additions and 13 deletions

View File

@ -413,17 +413,17 @@
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
<Sha>cf044102f01a3402a680fa58cabea8a9ca53aa3d</Sha> <Sha>cf044102f01a3402a680fa58cabea8a9ca53aa3d</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.20113.5"> <Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.20213.4">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>15f00efd583eab4372b2e9ca25bd80ace5b119ad</Sha> <Sha>1a55276ab9d16792cec595ba870df39a9d97d5ca</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.20113.5"> <Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.20213.4">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>15f00efd583eab4372b2e9ca25bd80ace5b119ad</Sha> <Sha>1a55276ab9d16792cec595ba870df39a9d97d5ca</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.20113.5"> <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.20213.4">
<Uri>https://github.com/dotnet/arcade</Uri> <Uri>https://github.com/dotnet/arcade</Uri>
<Sha>15f00efd583eab4372b2e9ca25bd80ace5b119ad</Sha> <Sha>1a55276ab9d16792cec595ba870df39a9d97d5ca</Sha>
</Dependency> </Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.1.4-servicing.20181.5" CoherentParentDependency="Microsoft.EntityFrameworkCore"> <Dependency Name="Microsoft.AspNetCore.Testing" Version="3.1.4-servicing.20181.5" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/dotnet/extensions</Uri> <Uri>https://github.com/dotnet/extensions</Uri>
@ -434,4 +434,4 @@
<Sha>d8180a5ecafb92adcfbfe8cf9199eb23be1a1ccf</Sha> <Sha>d8180a5ecafb92adcfbfe8cf9199eb23be1a1ccf</Sha>
</Dependency> </Dependency>
</ToolsetDependencies> </ToolsetDependencies>
</Dependencies> </Dependencies>

View File

@ -62,7 +62,7 @@
--> -->
<PropertyGroup Label="Automated"> <PropertyGroup Label="Automated">
<!-- Packages from dotnet/arcade --> <!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.20113.5</MicrosoftDotNetGenAPIPackageVersion> <MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.20213.4</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/roslyn --> <!-- Packages from dotnet/roslyn -->
<MicrosoftNetCompilersToolsetPackageVersion>3.4.1-beta4-20127-10</MicrosoftNetCompilersToolsetPackageVersion> <MicrosoftNetCompilersToolsetPackageVersion>3.4.1-beta4-20127-10</MicrosoftNetCompilersToolsetPackageVersion>
<!-- Packages from dotnet/core-setup --> <!-- Packages from dotnet/core-setup -->
@ -271,4 +271,4 @@
<DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl> <DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl>
<DotNetPrivateAssetRootUrl Condition="'$(DotNetPrivateAssetRootUrl)'==''">https://dotnetclimsrc.blob.core.windows.net/dotnet/</DotNetPrivateAssetRootUrl> <DotNetPrivateAssetRootUrl Condition="'$(DotNetPrivateAssetRootUrl)'==''">https://dotnetclimsrc.blob.core.windows.net/dotnet/</DotNetPrivateAssetRootUrl>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -210,7 +210,14 @@ function InstallDotNet {
local runtimeSourceFeedKey='' local runtimeSourceFeedKey=''
if [[ -n "${7:-}" ]]; then if [[ -n "${7:-}" ]]; then
decodedFeedKey=`echo $7 | base64 --decode` # The 'base64' binary on alpine uses '-d' and doesn't support '--decode'
# '-d'. To work around this, do a simple detection and switch the parameter
# accordingly.
decodeArg="--decode"
if base64 --help 2>&1 | grep -q "BusyBox"; then
decodeArg="-d"
fi
decodedFeedKey=`echo $7 | base64 $decodeArg`
runtimeSourceFeedKey="--feed-credential $decodedFeedKey" runtimeSourceFeedKey="--feed-credential $decodedFeedKey"
fi fi

View File

@ -25,7 +25,7 @@
}, },
"msbuild-sdks": { "msbuild-sdks": {
"Yarn.MSBuild": "1.15.2", "Yarn.MSBuild": "1.15.2",
"Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.20113.5", "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.20213.4",
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.20113.5" "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.20213.4"
} }
} }

View File

@ -66,6 +66,9 @@ namespace Microsoft.AspNetCore.Http.Connections.Client
private static readonly Action<ILogger, HttpTransportType, Exception> _transportStarted = private static readonly Action<ILogger, HttpTransportType, Exception> _transportStarted =
LoggerMessage.Define<HttpTransportType>(LogLevel.Debug, new EventId(18, "TransportStarted"), "Transport '{Transport}' started."); LoggerMessage.Define<HttpTransportType>(LogLevel.Debug, new EventId(18, "TransportStarted"), "Transport '{Transport}' started.");
private static readonly Action<ILogger, Exception> _serverSentEventsNotSupportedByBrowser =
LoggerMessage.Define(LogLevel.Debug, new EventId(19, "ServerSentEventsNotSupportedByBrowser"), "Skipping ServerSentEvents because they are not supported by the browser.");
public static void Starting(ILogger logger) public static void Starting(ILogger logger)
{ {
_starting(logger, null); _starting(logger, null);
@ -167,6 +170,11 @@ namespace Microsoft.AspNetCore.Http.Connections.Client
{ {
_transportStarted(logger, transportType, null); _transportStarted(logger, transportType, null);
} }
public static void ServerSentEventsNotSupportedByBrowser(ILogger logger)
{
_serverSentEventsNotSupportedByBrowser(logger, null);
}
} }
} }
} }

View File

@ -37,6 +37,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Client
private bool _started; private bool _started;
private bool _disposed; private bool _disposed;
private bool _hasInherentKeepAlive; private bool _hasInherentKeepAlive;
private bool _isRunningInBrowser;
private readonly HttpClient _httpClient; private readonly HttpClient _httpClient;
private readonly HttpConnectionOptions _httpConnectionOptions; private readonly HttpConnectionOptions _httpConnectionOptions;
@ -150,6 +151,14 @@ namespace Microsoft.AspNetCore.Http.Connections.Client
_httpClient = CreateHttpClient(); _httpClient = CreateHttpClient();
} }
_isRunningInBrowser = Utils.IsRunningInBrowser();
if (httpConnectionOptions.Transports == HttpTransportType.ServerSentEvents && _isRunningInBrowser)
{
throw new ArgumentException("ServerSentEvents can not be the only transport specified when running in the browser.", nameof(httpConnectionOptions));
}
_transportFactory = new DefaultTransportFactory(httpConnectionOptions.Transports, _loggerFactory, _httpClient, httpConnectionOptions, GetAccessTokenAsync); _transportFactory = new DefaultTransportFactory(httpConnectionOptions.Transports, _loggerFactory, _httpClient, httpConnectionOptions, GetAccessTokenAsync);
_logScope = new ConnectionLogScope(); _logScope = new ConnectionLogScope();
@ -365,6 +374,13 @@ namespace Microsoft.AspNetCore.Http.Connections.Client
continue; continue;
} }
if (transportType == HttpTransportType.ServerSentEvents && _isRunningInBrowser)
{
Log.ServerSentEventsNotSupportedByBrowser(_logger);
transportExceptions.Add(new TransportFailedException("ServerSentEvents", "The transport is not supported in the browser."));
continue;
}
try try
{ {
if ((transportType & _httpConnectionOptions.Transports) == 0) if ((transportType & _httpConnectionOptions.Transports) == 0)

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Runtime.InteropServices;
namespace Microsoft.AspNetCore.Http.Connections.Client.Internal namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
{ {
@ -41,5 +42,10 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
builder.Query = newQueryString; builder.Query = newQueryString;
return builder.Uri; return builder.Uri;
} }
internal static bool IsRunningInBrowser()
{
return RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER"));
}
} }
} }

View File

@ -6,6 +6,7 @@ using System.Diagnostics;
using System.IO.Pipelines; using System.IO.Pipelines;
using System.Net.WebSockets; using System.Net.WebSockets;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text.Encodings.Web;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections;
@ -23,6 +24,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly TimeSpan _closeTimeout; private readonly TimeSpan _closeTimeout;
private volatile bool _aborted; private volatile bool _aborted;
private bool _isRunningInBrowser;
private IDuplexPipe _transport; private IDuplexPipe _transport;
@ -87,6 +89,8 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
// Ignore the HttpConnectionOptions access token provider. We were given an updated delegate from the HttpConnection. // Ignore the HttpConnectionOptions access token provider. We were given an updated delegate from the HttpConnection.
_accessTokenProvider = accessTokenProvider; _accessTokenProvider = accessTokenProvider;
_isRunningInBrowser = Utils.IsRunningInBrowser();
} }
public async Task StartAsync(Uri url, TransferFormat transferFormat, CancellationToken cancellationToken = default) public async Task StartAsync(Uri url, TransferFormat transferFormat, CancellationToken cancellationToken = default)
@ -113,7 +117,17 @@ namespace Microsoft.AspNetCore.Http.Connections.Client.Internal
var accessToken = await _accessTokenProvider(); var accessToken = await _accessTokenProvider();
if (!string.IsNullOrEmpty(accessToken)) if (!string.IsNullOrEmpty(accessToken))
{ {
_webSocket.Options.SetRequestHeader("Authorization", $"Bearer {accessToken}"); // We can't use request headers in the browser, so instead append the token as a query string in that case
if (_isRunningInBrowser)
{
var accessTokenEncoded = UrlEncoder.Default.Encode(accessToken);
accessTokenEncoded = "access_token=" + accessTokenEncoded;
resolvedUrl = Utils.AppendQueryString(resolvedUrl, accessTokenEncoded);
}
else
{
_webSocket.Options.SetRequestHeader("Authorization", $"Bearer {accessToken}");
}
} }
} }