Skip to content

Commit ec1a83c

Browse files
committed
send request to auth and validation error handlers instead of httpcontext
1 parent b1c3126 commit ec1a83c

6 files changed

Lines changed: 15 additions & 14 deletions

File tree

src/OpenAPI.WebApiGenerator/CodeGeneration/AuthGenerator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,8 +396,9 @@ internal sealed class {{securityRequirementsFilterClassName}}(Operation operatio
396396
""")))}}
397397
};
398398
399-
protected override void HandleUnauthorized(HttpContext context) => operation.Validate(operation.HandleUnauthorized(context), Configuration).WriteTo(context.Response);
400-
protected override void HandleForbidden(HttpContext context) => operation.Validate(operation.HandleForbidden(context), Configuration).WriteTo(context.Response);
399+
private static Request ResolveRequest(HttpContext context) => (Request) context.Items[RequestItemKey]!;
400+
protected override void HandleUnauthorized(HttpContext context) => operation.Validate(operation.HandleUnauthorized(ResolveRequest(context)), Configuration).WriteTo(context.Response);
401+
protected override void HandleForbidden(HttpContext context) => operation.Validate(operation.HandleForbidden(ResolveRequest(context)), Configuration).WriteTo(context.Response);
401402
}
402403
""";
403404
}

src/OpenAPI.WebApiGenerator/CodeGeneration/OperationGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ internal partial class Operation
6565
/// Set a custom delegate to handle request validation errors.
6666
/// <exception cref="JsonValidationException"></exception>
6767
/// </summary>
68-
private Func<HttpContext, ImmutableList<ValidationResult>, Response> HandleRequestValidationError { get; } = (_, validationResult) =>
68+
private Func<Request, ImmutableList<ValidationResult>, Response> HandleRequestValidationError { get; } = (_, validationResult) =>
6969
{{jsonValidationExceptionGenerator.CreateThrowJsonValidationExceptionInvocation("Request is not valid", "validationResult")}};
7070
7171
{{authGenerator.GenerateAuthFilters(operation.Operation, parameters, out var requiresAuth).Indent(4)}}
@@ -75,12 +75,12 @@ internal partial class Operation
7575
/// <summary>
7676
/// Set a custom delegate to handle unauthorized responses.
7777
/// </summary>
78-
private Func<HttpContext, Response> HandleUnauthorized { get; } = _ => new Response.Unauthorized();
78+
private Func<Request, Response> HandleUnauthorized { get; } = _ => new Response.Unauthorized();
7979
8080
/// <summary>
8181
/// Set a custom delegate to handle forbidden responses.
8282
/// </summary>
83-
private Func<HttpContext, Response> HandleForbidden { get; } = _ => new Response.Forbidden();
83+
private Func<Request, Response> HandleForbidden { get; } = _ => new Response.Forbidden();
8484
8585
""" : "")}}
8686
/// <summary>
@@ -124,7 +124,7 @@ internal static async Task HandleAsync(
124124
var validationContext = request.Validate(operation.ValidationLevel);
125125
if (!validationContext.IsValid)
126126
{
127-
operation.HandleRequestValidationError(context, validationContext.Results.WithLocation(configuration.OpenApiSpecificationUri))
127+
operation.HandleRequestValidationError(request, validationContext.Results.WithLocation(configuration.OpenApiSpecificationUri))
128128
.WriteTo(context.Response);
129129
return;
130130
}

tests/Example.OpenApi20/Paths/FooFooId/Put/Operation.Handler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ public Operation()
1212
ValidationLevel = ValidationLevel.Detailed;
1313
}
1414

15-
private static Response.BadRequest400 HandleValidationErrors(HttpContext context, ImmutableList<ValidationResult> validationResults)
15+
private static Response.BadRequest400 HandleValidationErrors(Request request, ImmutableList<ValidationResult> validationResults)
1616
{
17-
switch (context.Request.TryMatchAcceptMediaType(Response.BadRequest400.ContentMediaTypes, out var matchedMediaType))
17+
switch (request.TryMatchAcceptMediaType<Response.BadRequest400>(out var matchedMediaType))
1818
{
1919
case false:
2020
case true when ReferenceEquals(matchedMediaType, Response.BadRequest400.ApplicationJson.ContentMediaType):

tests/Example.OpenApi30/Paths/FooFooId/Put/Operation.Handler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public Operation()
1111
ValidateResponse = true;
1212
}
1313

14-
private static Response.BadRequest400 HandleValidationErrors(HttpContext context, ImmutableList<ValidationResult> validationResults)
14+
private static Response.BadRequest400 HandleValidationErrors(Request request, ImmutableList<ValidationResult> validationResults)
1515
{
16-
switch (context.Request.TryMatchAcceptMediaType(Response.BadRequest400.ContentMediaTypes, out var matchedMediaType))
16+
switch (request.TryMatchAcceptMediaType<Response.BadRequest400>(out var matchedMediaType))
1717
{
1818
case false:
1919
case true when ReferenceEquals(matchedMediaType, Response.BadRequest400.ApplicationJson.ContentMediaType):

tests/Example.OpenApi31/Paths/FooFooId/Put/Operation.Handler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ public Operation()
1010
HandleRequestValidationError = HandleValidationErrors;
1111
}
1212

13-
private static Response.BadRequest400 HandleValidationErrors(HttpContext context, ImmutableList<ValidationResult> validationResults)
13+
private static Response.BadRequest400 HandleValidationErrors(Request request, ImmutableList<ValidationResult> validationResults)
1414
{
15-
switch (context.Request.TryMatchAcceptMediaType(Response.BadRequest400.ContentMediaTypes, out var matchedMediaType))
15+
switch (request.TryMatchAcceptMediaType<Response.BadRequest400>(out var matchedMediaType))
1616
{
1717
case false:
1818
case true when ReferenceEquals(matchedMediaType, Response.BadRequest400.ApplicationJson.ContentMediaType):

tests/Example.OpenApi32/Paths/FooFooId/Put/Operation.Handler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ public Operation()
1010
HandleRequestValidationError = HandleValidationErrors;
1111
}
1212

13-
private static Response.BadRequest400 HandleValidationErrors(HttpContext context, ImmutableList<ValidationResult> validationResults)
13+
private static Response.BadRequest400 HandleValidationErrors(Request request, ImmutableList<ValidationResult> validationResults)
1414
{
15-
switch (context.Request.TryMatchAcceptMediaType(Response.BadRequest400.ContentMediaTypes, out var matchedMediaType))
15+
switch (request.TryMatchAcceptMediaType<Response.BadRequest400>(out var matchedMediaType))
1616
{
1717
case false:
1818
case true when ReferenceEquals(matchedMediaType, Response.BadRequest400.ApplicationJson.ContentMediaType):

0 commit comments

Comments
 (0)