Skip to content

Rename filter extension methods and type name to be more agnostic #42589

Closed
@captainsafia

Description

@captainsafia

Background and Motivation

With changes introduced in preview6, filters can be registered on both routes and route groups. This proposal recommends renaming the type methods in the route filters area to reflect this.

This proposal also recommends using AddEndpointFilterFactory to disambiguate between extension method overlands that take a filter factory delegate versus a filter delegate.

Proposed API

namespace Microsoft.AspNetCore.Http;

- public static class RouteHandlerFilterExtensions
+ public static class EndpointFilterExtensions
{
-  public static TBuilder AddRouteHandlerFilter<TBuilder>(this TBuilder builder, IRouteHandlerFilter filter);
-  public static TBuilder AddRouteHandlerFilter<TBuilder, TFilterType>(this TBuilder builder);
-  public static RouteHandlerBuilder AddRouteHandlerFilter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TFilterType>(this RouteHandlerBuilder builder);
-  public static RouteGroupBuilder AddRouteHandlerFilter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TFilterType>(this RouteGroupBuilder builder);
-  public static TBuilder AddRouteHandlerFilter<TBuilder>(this TBuilder builder, Func<RouteHandlerInvocationContext, RouteHandlerFilterDelegate, ValueTask<object?>> routeHandlerFilter);
-  public static TBuilder AddRouteHandlerFilter<TBuilder>(this TBuilder builder, Func<RouteHandlerContext, RouteHandlerFilterDelegate, RouteHandlerFilterDelegate> filterFactory); 

+  public static TBuilder AddEndpointFilter<TBuilder>(this TBuilder builder, IEndpointFilter filter);
+  public static TBuilder AddEndpointFilter<TBuilder, TFilterType>(this TBuilder builder);
+  public static RouteHandlerBuilder AddEndpointFilter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TFilterType>(this RouteHandlerBuilder builder);
+  public static RouteGroupBuilder AddEndpointFilter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TFilterType>(this RouteGroupBuilder builder);
+  public static TBuilder AddEndpointFilter<TBuilder>(this TBuilder builder, Func<EndpointExecutionContext, EndpointFilterDelegate, ValueTask<object?>> endpointFilter);
+  public static TBuilder AddEndpointFilterFactory<TBuilder>(this TBuilder builder, Func<EndpointContext, EndpointFilterDelegate, EndpointFilterDelegate> filterFactory); 
}
namespace Microsoft.AspNetCore.Http;

- public interface IRouteHandlerFilter {}
+ public interface IEndpointFilter {}
namespace Microsoft.AspNetCore.Http;

- public delegate ValueTask<object?> RouteHandlerFilterDelegate(RouteHandlerInvocationContext context);
+ public delegate ValueTask<object?> EndpointFilterDelegate(EndpointExecutionContext context);
namespace Microsoft.AspNetCore.Http;

-  public class RouteHandlerContext {}
+  public class EndpointContext {}
namespace Microsoft.AspNetCore.Http;

-  public class DefaultRouteHandlerInvocationContext {}
+  public class DefaultEndpointInvocationContext {}

Metadata

Metadata

Assignees

Labels

api-approvedAPI was approved in API review, it can be implementedold-area-web-frameworks-do-not-use*DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions