Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/Http/Http.Abstractions/src/HttpContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@ public abstract class HttpContext
/// </summary>
public abstract ISession Session { get; set; }

/// <summary>
/// Gets or sets the <see cref="Endpoint"/> for the current request.
/// </summary>
/// <remarks>
/// The endpoint for a request is typically set by routing middleware. A request might not have
/// an endpoint if routing middleware hasn't run yet, or the request didn't match a route.
/// </remarks>
public abstract Endpoint? Endpoint { get; set; }

/// <summary>
/// Aborts the connection underlying this request.
/// </summary>
Expand All @@ -90,7 +99,7 @@ private sealed class HttpContextDebugView(HttpContext context)
public HttpContextFeatureDebugView Features => new HttpContextFeatureDebugView(_context.Features);
public HttpRequest Request => _context.Request;
public HttpResponse Response => _context.Response;
public Endpoint? Endpoint => _context.GetEndpoint();
public Endpoint? Endpoint => _context.Endpoint;
public ConnectionInfo Connection => _context.Connection;
public WebSocketManager WebSockets => _context.WebSockets;
public ClaimsPrincipal User => _context.User;
Expand Down
2 changes: 2 additions & 0 deletions src/Http/Http.Abstractions/src/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#nullable enable
abstract Microsoft.AspNetCore.Http.HttpContext.Endpoint.get -> Microsoft.AspNetCore.Http.Endpoint?
abstract Microsoft.AspNetCore.Http.HttpContext.Endpoint.set -> void
Microsoft.AspNetCore.Http.Metadata.IAllowCookieRedirectMetadata
Microsoft.AspNetCore.Http.Metadata.IDisableCookieRedirectMetadata
Microsoft.AspNetCore.Http.Metadata.IDisableValidationMetadata
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,72 @@ public void SetAndGetEndpoint_Roundtrip_EndpointIsRoundtrip()
Assert.Equal(initialEndpoint, endpoint);
}

[Fact]
public void EndpointProperty_Get_ReturnsNullByDefault()
{
// Arrange
var context = new DefaultHttpContext();

// Act
var endpoint = context.Endpoint;

// Assert
Assert.Null(endpoint);
}

[Fact]
public void EndpointProperty_SetAndGet_Roundtrip()
{
// Arrange
var context = new DefaultHttpContext();
var testEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");

// Act
context.Endpoint = testEndpoint;
var retrievedEndpoint = context.Endpoint;

// Assert
Assert.Equal(testEndpoint, retrievedEndpoint);
}

[Fact]
public void EndpointProperty_SetNull_ClearsEndpoint()
{
// Arrange
var context = new DefaultHttpContext();
var testEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
context.Endpoint = testEndpoint;

// Act
context.Endpoint = null;

// Assert
Assert.Null(context.Endpoint);
}

[Fact]
public void EndpointProperty_ConsistentWithExtensionMethods()
{
// Arrange
var context = new DefaultHttpContext();
var testEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");

// Act - Set via property
context.Endpoint = testEndpoint;

// Assert - Both property and extension method return the same value
Assert.Equal(testEndpoint, context.Endpoint);
Assert.Equal(testEndpoint, context.GetEndpoint());

// Act - Set via extension method
var newEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "New endpoint");
context.SetEndpoint(newEndpoint);

// Assert - Both property and extension method return the new value
Assert.Equal(newEndpoint, context.Endpoint);
Assert.Equal(newEndpoint, context.GetEndpoint());
}

private class EndpointFeature : IEndpointFeature
{
public Endpoint? Endpoint { get; set; }
Expand Down
7 changes: 7 additions & 0 deletions src/Http/Http/src/DefaultHttpContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,13 @@
}
}

/// <inheritdoc/>
public override Endpoint? Endpoint
{
get { return this.GetEndpoint(); }

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux x64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux Musl ARM64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux Musl ARM)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr (Tests: Ubuntu x64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux ARM64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux ARM)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: macOS x64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux Musl x64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: macOS arm64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr (Tests: macOS)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Test: macOS)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Test: Ubuntu x64)

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 219 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci

src/Http/Http/src/DefaultHttpContext.cs#L219

src/Http/Http/src/DefaultHttpContext.cs(219,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.get' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)
set { this.SetEndpoint(value); }

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux x64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux Musl ARM64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux Musl ARM)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr (Tests: Ubuntu x64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux ARM64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux ARM)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: macOS x64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: Linux Musl x64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Build: macOS arm64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr (Tests: macOS)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Test: macOS)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci (Build Test: Ubuntu x64)

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-quarantined-pr

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)

Check failure on line 220 in src/Http/Http/src/DefaultHttpContext.cs

View check run for this annotation

Azure Pipelines / aspnetcore-ci

src/Http/Http/src/DefaultHttpContext.cs#L220

src/Http/Http/src/DefaultHttpContext.cs(220,9): error RS0016: (NETCORE_ENGINEERING_TELEMETRY=Build) Symbol 'Endpoint.set' is not part of the declared API (https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md)
Comment on lines +219 to +220
Copy link
Preview

Copilot AI Sep 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The braces should be placed on separate lines according to the .editorconfig formatting guidelines. The getter and setter should be formatted as:\ncsharp\nget\n{\n return this.GetEndpoint();\n}\nset\n{\n this.SetEndpoint(value);\n}\n

Copilot generated this review using guidance from repository custom instructions.

}

// This property exists because of backwards compatibility.
// We send an anonymous object with an HttpContext property
// via DiagnosticListener in various events throughout the pipeline. Instead
Expand Down
Loading