Skip to content

[release/8.0] Fix casing of ProblemDetails for RFC compliance #53792

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 7, 2024

Conversation

captainsafia
Copy link
Member

@captainsafia captainsafia commented Feb 2, 2024

Backport of #53789 to release/8.0

/cc @captainsafia

This PR ensures that property keys that are used in ProblemDetails and ValidationProblemDetails are always in camel-case, regardless of the serialization options in the application as a whole, to provide compliance with the RFC 7807 spec.

Description

In .NET 8, we merged a PR to remove the custom converters used for ProblemDetails and ValidationProbleemDetails in feature of the IgnoreWhenNull attributes that were provided in the box by System.Text.Json.

At the same time, we removed the pre-defined type names that existed on the properties of these types.

As it turns out, this was a bad move. The RFC for problem details is particular about property keys being all lower-case (ref) regardless of what serialization options the rest of the system might be using by default.

This means that are implementation is no longer RFC-compliant. Fixing this by bring backing the explicit type names.

Fixes #53639

Customer Impact

This change breaks the contract provided by the Problem Details specifications. Clients that expect to receive problem details messages that comply with the spec will break if they deserialize with the assumption that our property keys are encoded correctly.

Although there are workarounds to this issue, they involve large amounts of code and we should really provide a correct implementation of the ProblemDetails spec.

Regression?

  • Yes
  • No

This is a regression from the .NET 7 experience.

Risk

  • High
  • Medium
  • Low

Although the change is localized to the ProblemDetails codepaths in MVC/Minimal APIs, this change is technically introducing a behavioral breaking change in a servicing release. Users who took a dependency on the broken behavior in .NET 8 will be impacted.

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

@ghost ghost added the old-area-web-frameworks-do-not-use *DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels label Feb 2, 2024
@ghost ghost added this to the 8.0.x milestone Feb 2, 2024
@ghost
Copy link

ghost commented Feb 2, 2024

Hi @captainsafia. If this is not a tell-mode PR, please make sure to follow the instructions laid out in the servicing process document.
Otherwise, please add tell-mode label.

@BrennanConroy
Copy link
Member

[Long Running Test] 'Microsoft.AspNetCore.Http.Abstractions.Tests.EndpointFilterInvocationContextOfTTests.GeneratedCodeIsUpToDate', Elapsed: 00:14:21

@captainsafia
Copy link
Member Author

[Long Running Test] 'Microsoft.AspNetCore.Http.Abstractions.Tests.EndpointFilterInvocationContextOfTTests.GeneratedCodeIsUpToDate', Elapsed: 00:14:21

Not sure what happened here. 🤔

@captainsafia captainsafia added the Servicing-consider Shiproom approval is required for the issue label Feb 5, 2024
@ghost
Copy link

ghost commented Feb 5, 2024

Hi @captainsafia. Please make sure you've updated the PR description to use the Shiproom Template. Also, make sure this PR is not marked as a draft and is ready-to-merge.

To learn more about how to prepare a servicing PR click here.

@captainsafia
Copy link
Member Author

/azp run

@captainsafia captainsafia added Servicing-approved Shiproom has approved the issue and removed Servicing-consider Shiproom approval is required for the issue labels Feb 6, 2024
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@captainsafia
Copy link
Member Author

Approved via tactics.

@rbhanda rbhanda modified the milestones: 8.0.x, 8.0.3 Feb 6, 2024
@captainsafia
Copy link
Member Author

@BrennanConroy @halter73 Can I get a review on this now that it is servicing approved?

@captainsafia captainsafia changed the title Fix casing of ProblemDetails for RFC compliance [release/8.0] Fix casing of ProblemDetails for RFC compliance Feb 7, 2024
@wtgodbe wtgodbe merged commit 04c35a7 into release/8.0 Feb 7, 2024
@wtgodbe wtgodbe deleted the backport/pr-53789-to-release/8.0 branch February 7, 2024 22:53
@dotnet-policy-service dotnet-policy-service bot modified the milestone: 8.0.3 Feb 7, 2024
@dotnet-policy-service dotnet-policy-service bot added the area-infrastructure Includes: MSBuild projects/targets, build scripts, CI, Installers and shared framework label Feb 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-infrastructure Includes: MSBuild projects/targets, build scripts, CI, Installers and shared framework old-area-web-frameworks-do-not-use *DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels Servicing-approved Shiproom has approved the issue
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

4 participants