Fix #10756 by removing some previously-obsoleted SignalR methods (#20015)

* fixes #10756 by removing previously-obsoleted APIs in SignalR

* update reference assemblies

* missed a ref

* think I fixed the test
This commit is contained in:
Andrew Stanton-Nurse 2020-03-23 13:26:39 -07:00 committed by GitHub
parent ec10429430
commit 0d80ffa6cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 20 additions and 447 deletions

View File

@ -138,6 +138,8 @@ namespace Microsoft.AspNetCore.Analyzers
throw new ArgumentNullException(nameof(symbol));
}
// UseSignalR has been removed in 5.0, but we should probably still check for it in this analyzer in case the user
// installs it into a pre-5.0 app.
if (string.Equals(symbol.Name, SymbolNames.SignalRAppBuilderExtensions.UseSignalRMethodName, StringComparison.Ordinal) ||
string.Equals(symbol.Name, SymbolNames.HubEndpointRouteBuilderExtensions.MapHubMethodName, StringComparison.Ordinal) ||
string.Equals(symbol.Name, SymbolNames.ComponentEndpointRouteBuilderExtensions.MapBlazorHubMethodName, StringComparison.Ordinal))

View File

@ -29,7 +29,6 @@ namespace Microsoft.AspNetCore.Analyzers
}
[Theory]
[InlineData(nameof(StartupWithUseSignalR))]
[InlineData(nameof(StartupWithMapHub))]
[InlineData(nameof(StartupWithMapBlazorHub))]
public async Task DetectFeaturesAsync_FindsSignalR(string source)

View File

@ -1,20 +0,0 @@
// 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 Microsoft.AspNetCore.Builder;
namespace Microsoft.AspNetCore.Analyzers.TestFiles.CompilationFeatureDetectorTest
{
public class StartupWithUseSignalR
{
public void Configure(IApplicationBuilder app)
{
#pragma warning disable CS0618 // Type or member is obsolete
app.UseSignalR(routes =>
{
});
#pragma warning restore CS0618 // Type or member is obsolete
}
}
}

View File

@ -15,11 +15,6 @@ namespace Microsoft.AspNetCore.Builder
public static Microsoft.AspNetCore.Builder.ConnectionEndpointRouteBuilder MapConnections(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, Microsoft.AspNetCore.Http.Connections.HttpConnectionDispatcherOptions options, System.Action<Microsoft.AspNetCore.Connections.IConnectionBuilder> configure) { throw null; }
public static Microsoft.AspNetCore.Builder.ConnectionEndpointRouteBuilder MapConnections(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, string pattern, System.Action<Microsoft.AspNetCore.Connections.IConnectionBuilder> configure) { throw null; }
}
public static partial class ConnectionsAppBuilderExtensions
{
[System.ObsoleteAttribute("This method is obsolete and will be removed in a future version. The recommended alternative is to use MapConnections or MapConnectionHandler<TConnectionHandler> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public static Microsoft.AspNetCore.Builder.IApplicationBuilder UseConnections(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Action<Microsoft.AspNetCore.Http.Connections.ConnectionsRouteBuilder> configure) { throw null; }
}
}
namespace Microsoft.AspNetCore.Http.Connections
{
@ -34,15 +29,6 @@ namespace Microsoft.AspNetCore.Http.Connections
public ConnectionOptionsSetup() { }
public void Configure(Microsoft.AspNetCore.Http.Connections.ConnectionOptions options) { }
}
[System.ObsoleteAttribute("This class is obsolete and will be removed in a future version. The recommended alternative is to use MapConnection and MapConnectionHandler<TConnectionHandler> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public partial class ConnectionsRouteBuilder
{
internal ConnectionsRouteBuilder() { }
public void MapConnectionHandler<TConnectionHandler>(Microsoft.AspNetCore.Http.PathString path) where TConnectionHandler : Microsoft.AspNetCore.Connections.ConnectionHandler { }
public void MapConnectionHandler<TConnectionHandler>(Microsoft.AspNetCore.Http.PathString path, System.Action<Microsoft.AspNetCore.Http.Connections.HttpConnectionDispatcherOptions> configureOptions) where TConnectionHandler : Microsoft.AspNetCore.Connections.ConnectionHandler { }
public void MapConnections(Microsoft.AspNetCore.Http.PathString path, Microsoft.AspNetCore.Http.Connections.HttpConnectionDispatcherOptions options, System.Action<Microsoft.AspNetCore.Connections.IConnectionBuilder> configure) { }
public void MapConnections(Microsoft.AspNetCore.Http.PathString path, System.Action<Microsoft.AspNetCore.Connections.IConnectionBuilder> configure) { }
}
public static partial class HttpConnectionContextExtensions
{
public static Microsoft.AspNetCore.Http.HttpContext GetHttpContext(this Microsoft.AspNetCore.Connections.ConnectionContext connection) { throw null; }

View File

@ -1,42 +0,0 @@
// 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;
using Microsoft.AspNetCore.Http.Connections;
namespace Microsoft.AspNetCore.Builder
{
/// <summary>
/// Extension methods for <see cref="IApplicationBuilder"/>.
/// </summary>
public static class ConnectionsAppBuilderExtensions
{
/// <summary>
/// Adds support for ASP.NET Core Connection Handlers to the <see cref="IApplicationBuilder"/> request execution pipeline.
/// <para>
/// This method is obsolete and will be removed in a future version.
/// The recommended alternative is to use MapConnections or MapConnectionHandler&#60;TConnectionHandler&#62; inside Microsoft.AspNetCore.Builder.UseEndpoints(...).
/// </para>
/// </summary>
/// <param name="app">The <see cref="IApplicationBuilder"/>.</param>
/// <param name="configure">A callback to configure connection routes.</param>
/// <returns>The same instance of the <see cref="IApplicationBuilder"/> for chaining.</returns>
[Obsolete("This method is obsolete and will be removed in a future version. The recommended alternative is to use MapConnections or MapConnectionHandler<TConnectionHandler> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public static IApplicationBuilder UseConnections(this IApplicationBuilder app, Action<ConnectionsRouteBuilder> configure)
{
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
app.UseWebSockets();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
configure(new ConnectionsRouteBuilder(endpoints));
});
return app;
}
}
}

View File

@ -1,62 +0,0 @@
// 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;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Routing;
namespace Microsoft.AspNetCore.Http.Connections
{
/// <summary>
/// Maps routes to ASP.NET Core Connection Handlers.
/// <para>
/// This class is obsolete and will be removed in a future version.
/// The recommended alternative is to use MapConnection and MapConnectionHandler&#60;TConnectionHandler&#62; inside Microsoft.AspNetCore.Builder.UseEndpoints(...).
/// </para>
/// </summary>
[Obsolete("This class is obsolete and will be removed in a future version. The recommended alternative is to use MapConnection and MapConnectionHandler<TConnectionHandler> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public class ConnectionsRouteBuilder
{
private readonly IEndpointRouteBuilder _endpoints;
internal ConnectionsRouteBuilder(IEndpointRouteBuilder endpoints)
{
_endpoints = endpoints;
}
/// <summary>
/// Maps incoming requests with the specified path to the provided connection pipeline.
/// </summary>
/// <param name="path">The request path.</param>
/// <param name="configure">A callback to configure the connection.</param>
public void MapConnections(PathString path, Action<IConnectionBuilder> configure) =>
MapConnections(path, new HttpConnectionDispatcherOptions(), configure);
/// <summary>
/// Maps incoming requests with the specified path to the provided connection pipeline.
/// </summary>
/// <param name="path">The request path.</param>
/// <param name="options">Options used to configure the connection.</param>
/// <param name="configure">A callback to configure the connection.</param>
public void MapConnections(PathString path, HttpConnectionDispatcherOptions options, Action<IConnectionBuilder> configure) =>
_endpoints.MapConnections(path, options, configure);
/// <summary>
/// Maps incoming requests with the specified path to the provided connection pipeline.
/// </summary>
/// <typeparam name="TConnectionHandler">The <see cref="ConnectionHandler"/> type.</typeparam>
/// <param name="path">The request path.</param>
public void MapConnectionHandler<TConnectionHandler>(PathString path) where TConnectionHandler : ConnectionHandler =>
MapConnectionHandler<TConnectionHandler>(path, configureOptions: null);
/// <summary>
/// Maps incoming requests with the specified path to the provided connection pipeline.
/// </summary>
/// <typeparam name="TConnectionHandler">The <see cref="ConnectionHandler"/> type.</typeparam>
/// <param name="path">The request path.</param>
/// <param name="configureOptions">A callback to configure dispatcher options.</param>
public void MapConnectionHandler<TConnectionHandler>(PathString path, Action<HttpConnectionDispatcherOptions> configureOptions) where TConnectionHandler : ConnectionHandler =>
_endpoints.MapConnectionHandler<TConnectionHandler>(path, configureOptions);
}
}

View File

@ -150,10 +150,10 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
public void MapConnectionHandlerEndPointRoutingFindsAttributesOnHub()
{
var authCount = 0;
using (var host = BuildWebHostWithEndPointRouting(routes => routes.MapConnectionHandler<AuthConnectionHandler>("/path", options =>
using (var host = BuildWebHost<AuthConnectionHandler>("/path", options =>
{
authCount += options.AuthorizationData.Count;
})))
}))
{
host.Start();
@ -179,11 +179,11 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
public void MapConnectionHandlerEndPointRoutingFindsAttributesFromOptions()
{
var authCount = 0;
using (var host = BuildWebHostWithEndPointRouting(routes => routes.MapConnectionHandler<AuthConnectionHandler>("/path", options =>
using (var host = BuildWebHost<AuthConnectionHandler>("/path", options =>
{
authCount += options.AuthorizationData.Count;
options.AuthorizationData.Add(new AuthorizeAttribute());
})))
}))
{
host.Start();
@ -215,7 +215,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
.RequireAuthorization(new AuthorizeAttribute("Foo"));
}
using (var host = BuildWebHostWithEndPointRouting(ConfigureRoutes))
using (var host = BuildWebHost(ConfigureRoutes))
{
host.Start();
@ -253,7 +253,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
endpoints.MapConnectionHandler<AuthConnectionHandler>("/path");
}
using (var host = BuildWebHostWithEndPointRouting(ConfigureRoutes))
using (var host = BuildWebHost(ConfigureRoutes))
{
host.Start();
@ -281,7 +281,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
endpoints.MapConnectionHandler<CorsConnectionHandler>("/path");
}
using (var host = BuildWebHostWithEndPointRouting(ConfigureRoutes))
using (var host = BuildWebHost(ConfigureRoutes))
{
host.Start();
@ -308,7 +308,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
var host = BuildWebHost<MyConnectionHandler>("/socket",
options => options.WebSockets.SubProtocolSelector = subprotocols =>
{
Assert.Equal(new [] { "protocol1", "protocol2" }, subprotocols.ToArray());
Assert.Equal(new[] { "protocol1", "protocol2" }, subprotocols.ToArray());
return "protocol1";
});
@ -377,7 +377,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
}
}
private IWebHost BuildWebHostWithEndPointRouting(Action<IEndpointRouteBuilder> configure)
private IWebHost BuildWebHost(Action<IEndpointRouteBuilder> configure)
{
return new WebHostBuilder()
.UseKestrel()
@ -405,12 +405,11 @@ namespace Microsoft.AspNetCore.Http.Connections.Tests
})
.Configure(app =>
{
#pragma warning disable CS0618 // Type or member is obsolete
app.UseConnections(routes =>
app.UseRouting();
app.UseEndpoints(routes =>
{
routes.MapConnectionHandler<TConnectionHandler>(path, configureOptions);
});
#pragma warning restore CS0618 // Type or member is obsolete
})
.ConfigureLogging(factory =>
{

View File

@ -16,11 +16,6 @@ namespace Microsoft.AspNetCore.Builder
public partial interface IHubEndpointConventionBuilder : Microsoft.AspNetCore.Builder.IEndpointConventionBuilder
{
}
public static partial class SignalRAppBuilderExtensions
{
[System.ObsoleteAttribute("This method is obsolete and will be removed in a future version. The recommended alternative is to use MapHub<THub> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public static Microsoft.AspNetCore.Builder.IApplicationBuilder UseSignalR(this Microsoft.AspNetCore.Builder.IApplicationBuilder app, System.Action<Microsoft.AspNetCore.SignalR.HubRouteBuilder> configure) { throw null; }
}
}
namespace Microsoft.AspNetCore.SignalR
{
@ -29,13 +24,6 @@ namespace Microsoft.AspNetCore.SignalR
public static Microsoft.AspNetCore.Http.HttpContext GetHttpContext(this Microsoft.AspNetCore.SignalR.HubCallerContext connection) { throw null; }
public static Microsoft.AspNetCore.Http.HttpContext GetHttpContext(this Microsoft.AspNetCore.SignalR.HubConnectionContext connection) { throw null; }
}
[System.ObsoleteAttribute("This class is obsolete and will be removed in a future version. The recommended alternative is to use MapHub<THub> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public partial class HubRouteBuilder
{
public HubRouteBuilder(Microsoft.AspNetCore.Http.Connections.ConnectionsRouteBuilder routes) { }
public void MapHub<THub>(Microsoft.AspNetCore.Http.PathString path) where THub : Microsoft.AspNetCore.SignalR.Hub { }
public void MapHub<THub>(Microsoft.AspNetCore.Http.PathString path, System.Action<Microsoft.AspNetCore.Http.Connections.HttpConnectionDispatcherOptions> configureOptions) where THub : Microsoft.AspNetCore.SignalR.Hub { }
}
}
namespace Microsoft.Extensions.DependencyInjection
{

View File

@ -1,82 +0,0 @@
// 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;
using System.Reflection;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Routing;
namespace Microsoft.AspNetCore.SignalR
{
/// <summary>
/// Maps incoming requests to <see cref="Hub"/> types.
/// <para>
/// This class is obsolete and will be removed in a future version.
/// The recommended alternative is to use MapHub&#60;THub&#62; inside Microsoft.AspNetCore.Builder.UseEndpoints(...).
/// </para>
/// </summary>
[Obsolete("This class is obsolete and will be removed in a future version. The recommended alternative is to use MapHub<THub> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public class HubRouteBuilder
{
private readonly ConnectionsRouteBuilder _routes;
private readonly IEndpointRouteBuilder _endpoints;
/// <summary>
/// Initializes a new instance of the <see cref="HubRouteBuilder"/> class.
/// </summary>
/// <param name="routes">The routes builder.</param>
public HubRouteBuilder(ConnectionsRouteBuilder routes)
{
_routes = routes;
}
internal HubRouteBuilder(IEndpointRouteBuilder endpoints)
{
_endpoints = endpoints;
}
/// <summary>
/// Maps incoming requests with the specified path to the specified <see cref="Hub"/> type.
/// </summary>
/// <typeparam name="THub">The <see cref="Hub"/> type to map requests to.</typeparam>
/// <param name="path">The request path.</param>
public void MapHub<THub>(PathString path) where THub : Hub
{
MapHub<THub>(path, configureOptions: null);
}
/// <summary>
/// Maps incoming requests with the specified path to the specified <see cref="Hub"/> type.
/// </summary>
/// <typeparam name="THub">The <see cref="Hub"/> type to map requests to.</typeparam>
/// <param name="path">The request path.</param>
/// <param name="configureOptions">A callback to configure dispatcher options.</param>
public void MapHub<THub>(PathString path, Action<HttpConnectionDispatcherOptions> configureOptions) where THub : Hub
{
// This will be null if someone is manually using the HubRouteBuilder(ConnectionsRouteBuilder routes) constructor
// SignalR itself will only use the IEndpointRouteBuilder overload
if (_endpoints != null)
{
_endpoints.MapHub<THub>(path, configureOptions);
return;
}
// find auth attributes
var authorizeAttributes = typeof(THub).GetCustomAttributes<AuthorizeAttribute>(inherit: true);
var options = new HttpConnectionDispatcherOptions();
foreach (var attribute in authorizeAttributes)
{
options.AuthorizationData.Add(attribute);
}
configureOptions?.Invoke(options);
_routes.MapConnections(path, options, builder =>
{
builder.UseHub<THub>();
});
}
}
}

View File

@ -1,46 +0,0 @@
// 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;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.AspNetCore.Builder
{
/// <summary>
/// Extension methods for <see cref="IApplicationBuilder"/>.
/// </summary>
public static class SignalRAppBuilderExtensions
{
/// <summary>
/// Adds SignalR to the <see cref="IApplicationBuilder"/> request execution pipeline.
/// <para>
/// This method is obsolete and will be removed in a future version.
/// The recommended alternative is to use MapHub&#60;THub&#62; inside Microsoft.AspNetCore.Builder.UseEndpoints(...).
/// </para>
/// </summary>
/// <param name="app">The <see cref="IApplicationBuilder"/>.</param>
/// <param name="configure">A callback to configure hub routes.</param>
/// <returns>The same instance of the <see cref="IApplicationBuilder"/> for chaining.</returns>
[Obsolete("This method is obsolete and will be removed in a future version. The recommended alternative is to use MapHub<THub> inside Microsoft.AspNetCore.Builder.UseEndpoints(...).")]
public static IApplicationBuilder UseSignalR(this IApplicationBuilder app, Action<HubRouteBuilder> configure)
{
var marker = app.ApplicationServices.GetService<SignalRMarkerService>();
if (marker == null)
{
throw new InvalidOperationException("Unable to find the required services. Please add all the required services by calling " +
"'IServiceCollection.AddSignalR' inside the call to 'ConfigureServices(...)' in the application startup code.");
}
app.UseWebSockets();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
configure(new HubRouteBuilder(endpoints));
});
return app;
}
}
}

View File

@ -579,45 +579,6 @@ namespace Microsoft.AspNetCore.SignalR.Tests
}
}
[Fact]
[LogLevel(LogLevel.Trace)]
public async Task UnauthorizedHubConnectionDoesNotConnectWithEndpoints()
{
bool ExpectedErrors(WriteContext writeContext)
{
return writeContext.LoggerName == typeof(HttpConnection).FullName &&
writeContext.EventId.Name == "ErrorWithNegotiation";
}
using (var server = await StartServer<Startup>(ExpectedErrors))
{
var logger = LoggerFactory.CreateLogger<EndToEndTests>();
var url = server.Url + "/authHubEndpoints";
var connection = new HubConnectionBuilder()
.WithLoggerFactory(LoggerFactory)
.WithUrl(url, HttpTransportType.LongPolling)
.Build();
try
{
logger.LogInformation("Starting connection to {url}", url);
await connection.StartAsync().OrTimeout();
Assert.True(false);
}
catch (Exception ex)
{
Assert.Equal("Response status code does not indicate success: 401 (Unauthorized).", ex.Message);
}
finally
{
logger.LogInformation("Disposing Connection");
await connection.DisposeAsync().OrTimeout();
logger.LogInformation("Disposed Connection");
}
}
}
[Fact]
[LogLevel(LogLevel.Trace)]
public async Task UnauthorizedHubConnectionDoesNotConnect()
@ -657,53 +618,6 @@ namespace Microsoft.AspNetCore.SignalR.Tests
}
}
[Fact]
[LogLevel(LogLevel.Trace)]
public async Task AuthorizedHubConnectionCanConnectWithEndpoints()
{
bool ExpectedErrors(WriteContext writeContext)
{
return writeContext.LoggerName == typeof(HttpConnection).FullName &&
writeContext.EventId.Name == "ErrorWithNegotiation";
}
using (var server = await StartServer<Startup>(ExpectedErrors))
{
var logger = LoggerFactory.CreateLogger<EndToEndTests>();
string token;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(server.Url);
var response = await client.GetAsync("generatetoken?user=bob");
token = await response.Content.ReadAsStringAsync();
}
var url = server.Url + "/authHubEndpoints";
var connection = new HubConnectionBuilder()
.WithLoggerFactory(LoggerFactory)
.WithUrl(url, HttpTransportType.LongPolling, o =>
{
o.AccessTokenProvider = () => Task.FromResult(token);
})
.Build();
try
{
logger.LogInformation("Starting connection to {url}", url);
await connection.StartAsync().OrTimeout();
logger.LogInformation("Connected to {url}", url);
}
finally
{
logger.LogInformation("Disposing Connection");
await connection.DisposeAsync().OrTimeout();
logger.LogInformation("Disposed Connection");
}
}
}
[Fact]
[LogLevel(LogLevel.Trace)]
public async Task AuthorizedHubConnectionCanConnect()

View File

@ -31,41 +31,6 @@ namespace Microsoft.AspNetCore.SignalR.Tests
var executedConfigure = false;
var builder = new WebHostBuilder();
builder
.UseKestrel()
.Configure(app =>
{
executedConfigure = true;
var ex = Assert.Throws<InvalidOperationException>(() =>
{
#pragma warning disable CS0618 // Type or member is obsolete
app.UseSignalR(routes =>
{
routes.MapHub<AuthHub>("/overloads");
});
#pragma warning restore CS0618 // Type or member is obsolete
});
Assert.Equal("Unable to find the required services. Please add all the required services by calling " +
"'IServiceCollection.AddSignalR' inside the call to 'ConfigureServices(...)' in the application startup code.", ex.Message);
})
.UseUrls("http://127.0.0.1:0");
using (var host = builder.Build())
{
host.Start();
}
Assert.True(executedConfigure);
}
[Fact]
public void NotAddingSignalRServiceThrowsWhenUsingEndpointRouting()
{
var executedConfigure = false;
var builder = new WebHostBuilder();
builder
.UseKestrel()
.ConfigureServices(services =>
@ -189,7 +154,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
public void MapHubEndPointRoutingFindsAttributesOnHub()
{
var authCount = 0;
using (var host = BuildWebHostWithEndPointRouting(routes => routes.MapHub<AuthHub>("/path", options =>
using (var host = BuildWebHost(routes => routes.MapHub<AuthHub>("/path", options =>
{
authCount += options.AuthorizationData.Count;
})))
@ -219,7 +184,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{
var authCount = 0;
HttpConnectionDispatcherOptions configuredOptions = null;
using (var host = BuildWebHostWithEndPointRouting(routes => routes.MapHub<AuthHub>("/path", options =>
using (var host = BuildWebHost(routes => routes.MapHub<AuthHub>("/path", options =>
{
authCount += options.AuthorizationData.Count;
options.AuthorizationData.Add(new AuthorizeAttribute());
@ -256,7 +221,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
.RequireAuthorization(new AuthorizeAttribute("Foo"));
}
using (var host = BuildWebHostWithEndPointRouting(ConfigureRoutes))
using (var host = BuildWebHost(ConfigureRoutes))
{
host.Start();
@ -295,7 +260,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
endpoints.MapHub<AuthHub>("/path");
}
using (var host = BuildWebHostWithEndPointRouting(ConfigureRoutes))
using (var host = BuildWebHost(ConfigureRoutes))
{
host.Start();
@ -320,9 +285,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
[Fact]
public void MapHubAppliesHubMetadata()
{
#pragma warning disable CS0618 // Type or member is obsolete
void ConfigureRoutes(HubRouteBuilder routes)
#pragma warning restore CS0618 // Type or member is obsolete
void ConfigureRoutes(IEndpointRouteBuilder routes)
{
// This "Foo" policy should override the default auth attribute
routes.MapHub<AuthHub>("/path");
@ -375,7 +338,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{
}
private IWebHost BuildWebHostWithEndPointRouting(Action<IEndpointRouteBuilder> configure)
private IWebHost BuildWebHost(Action<IEndpointRouteBuilder> configure)
{
return new WebHostBuilder()
.UseKestrel()
@ -391,23 +354,5 @@ namespace Microsoft.AspNetCore.SignalR.Tests
.UseUrls("http://127.0.0.1:0")
.Build();
}
#pragma warning disable CS0618 // Type or member is obsolete
private IWebHost BuildWebHost(Action<HubRouteBuilder> configure)
{
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(services =>
{
services.AddSignalR();
})
.Configure(app =>
{
app.UseSignalR(options => configure(options));
})
.UseUrls("http://127.0.0.1:0")
.Build();
}
#pragma warning restore CS0618 // Type or member is obsolete
}
}

View File

@ -71,18 +71,10 @@ namespace Microsoft.AspNetCore.SignalR.Tests
app.UseAuthentication();
app.UseAuthorization();
// Legacy routing, runs different code path for mapping hubs
#pragma warning disable CS0618 // Type or member is obsolete
app.UseSignalR(routes =>
{
routes.MapHub<AuthHub>("/authHub");
});
#pragma warning restore CS0618 // Type or member is obsolete
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<UncreatableHub>("/uncreatable");
endpoints.MapHub<AuthHub>("/authHubEndpoints");
endpoints.MapHub<AuthHub>("/authHub");
endpoints.MapConnectionHandler<EchoConnectionHandler>("/echo");
endpoints.MapConnectionHandler<WriteThenCloseConnectionHandler>("/echoAndClose");