Skip to content

[release/11.0-rc1] Preserve BadHttpRequestException status codes - #68649

Merged
wtgodbe merged 1 commit into
release/11.0-rc1from
backport/pr-68632-to-release/11.0-rc1
Aug 21, 2026
Merged

[release/11.0-rc1] Preserve BadHttpRequestException status codes#68649
wtgodbe merged 1 commit into
release/11.0-rc1from
backport/pr-68632-to-release/11.0-rc1

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Backport of #68632 to release/11.0-rc1

/cc @javiercn @halter73

Preserve BadHttpRequestException status codes

Preserve client-error status codes in ExceptionHandlerMiddleware

Description

ExceptionHandlerMiddleware currently converts BadHttpRequestException responses to 500, masking client errors such as invalid or incomplete request bodies. This change uses BadHttpRequestException.StatusCode by default, while retaining 500 as the default exception status code for all other exceptions.

A configured StatusCodeSelector still takes precedence, and custom exception handlers can continue overriding the selected status code. A 404 carried by BadHttpRequestException is treated as intentional rather than as a misconfigured exception handler response.

Fixes #43831

Customer Impact

Without this fix, malformed or incomplete client requests handled by ExceptionHandlerMiddleware can be reported as 500 responses instead of the applicable 4xx status. This misclassifies client errors as server failures and can cause incorrect client behavior, telemetry, and alerting.

Regression?

  • Yes
  • No

This is a long-standing behavior gap rather than a regression from an earlier release.

Risk

  • High
  • Medium
  • Low

The change is limited to the default status selected for BadHttpRequestException. Existing StatusCodeSelector and custom exception-handler overrides retain precedence, and the existing accidental-404 safeguard remains in place for other cases.

Verification

  • Manual (required)
  • Automated

Diagnostics unit tests cover the default status mapping, 404 handling, selector precedence, custom exception-handler overrides, and the accidental-404 safeguard.

Packaging changes reviewed?

  • Yes
  • No
  • N/A

* Preserve BadHttpRequestException status codes

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Preserve exception handler 404 safeguard

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@javiercn

Copy link
Copy Markdown
Member

@wtgodbe use your powers :)

@javiercn

Copy link
Copy Markdown
Member

@wtgodbe or @akoeplinger merge please?

@wtgodbe
wtgodbe merged commit 026aff6 into release/11.0-rc1 Aug 21, 2026
24 checks passed
@wtgodbe
wtgodbe deleted the backport/pr-68632-to-release/11.0-rc1 branch August 21, 2026 15:47
@dotnet-milestone-bot dotnet-milestone-bot Bot added this to the 11.0-rc1 milestone Aug 21, 2026
wtgodbe added a commit that referenced this pull request Aug 22, 2026
* [SignalR] Reject duplicate SignalR upload stream IDs (#68525) (#68638)

* Reject duplicate SignalR upload stream IDs



* Simplify upload stream ownership cleanup



* Avoid upload stream ownership allocations



* Simplify upload stream registration ownership



* Defer upload stream reader creation





* Dispose cancellation source after binding failure





* Reuse upload stream test helper





---------

Co-authored-by: Javier Calvarro Nelson <jacalvar@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 82e97f5a-a052-4dbe-9cf1-b62f45cf7ee2

* Honor all sign-in confirmation requirements after registration (#68631) (#68655)

Co-authored-by: Brennan <brecon@microsoft.com>

* Preserve BadHttpRequestException status codes (#68632) (#68649)

* Preserve BadHttpRequestException status codes



* Preserve exception handler 404 safeguard



---------

Co-authored-by: Stephen Halter <halter73@gmail.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* SignInManager: return SignInResult.Failed for expired passkey session challenge (#67539) (#68654)

Co-authored-by: Grant Totinov <granttotinov604@gmail.com>

* Don't apply the CSRF verdict to remote authentication callbacks (#68669)

* Don't apply the CSRF verdict to remote authentication callbacks

A remote provider's callback (OIDC response_mode=form_post, WS-Federation)
is a cross-site form POST by protocol design, so the auto-injected CSRF
protection records an invalid IAntiforgeryValidationFeature verdict for it.
The handler then throws while reading its own callback body, before any of
its events can run, so apps have no way to opt out.

Suppress the verdict while a remote handler owns the request, and restore it
if the handler declines so the rest of the pipeline still sees it.

Fixes #68666

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cb987098-3301-465b-9a3d-2e63aabf43bd

* test both antiforgery & csrf

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cb987098-3301-465b-9a3d-2e63aabf43bd

* Use model display names in Blazor input parsing errors (#68667) (#68688)

* Use display attributes in input parsing errors

* Address test coverage feedback from review.

* Apply dedup cleanup from feedback.

Co-authored-by: Ilona Tomkowicz <32700855+ilonatommy@users.noreply.github.com>

* [release/11.0-rc1] Extract IsAuthenticated helper method (#68658)

* Extract IsAuthenticated helper method

Co-authored-by: Youssef1313 <31348972+Youssef1313@users.noreply.github.com>

* Reorder using

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

Co-authored-by: Youssef1313 <31348972+Youssef1313@users.noreply.github.com>

* Use SecurityHelper for authentication revalidation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: Youssef1313 <31348972+Youssef1313@users.noreply.github.com>

---------

Co-authored-by: Youssef1313 <youssefvictor00@gmail.com>
Co-authored-by: Youssef1313 <31348972+Youssef1313@users.noreply.github.com>
Co-authored-by: Milos Kotlar <kotlarmilos@gmail.com>

* Fix  InitialItemIndex viewport underfill for small items in big container or on window resize (#67936) (#68689)

Co-authored-by: Ilona Tomkowicz <32700855+ilonatommy@users.noreply.github.com>

* fix nullable<union> for openapi gen (#68665)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Javier Calvarro Nelson <jacalvar@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Brennan <brecon@microsoft.com>
Co-authored-by: Stephen Halter <halter73@gmail.com>
Co-authored-by: Grant Totinov <granttotinov604@gmail.com>
Co-authored-by: Korolev Dmitry <dmkorolev@microsoft.com>
Co-authored-by: Ilona Tomkowicz <32700855+ilonatommy@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Youssef1313 <youssefvictor00@gmail.com>
Co-authored-by: Youssef1313 <31348972+Youssef1313@users.noreply.github.com>
Co-authored-by: Milos Kotlar <kotlarmilos@gmail.com>
Co-authored-by: William Godbe <wigodbe@microsoft.com>
Copilot-Session: 82e97f5a-a052-4dbe-9cf1-b62f45cf7ee2
Copilot-Session: cb987098-3301-465b-9a3d-2e63aabf43bd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants