-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Replace IUrlHelperFactory with IHttpContextAccessor in LinkField classes #18188
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
base: main
Are you sure you want to change the base?
Conversation
No file changes!! |
Co-authored-by: MikeAlhayek <[email protected]>
@Copilot please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement ( “Agreement” ) is agreed to by the party signing below ( “You” ), 1. Definitions. “Code” means the computer software code, whether in human-readable or machine-executable form, “Project” means any of the projects owned or managed by .NET Foundation and offered under a license “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any “Submission” means the Code and any other copyrightable material Submitted by You, including any 2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any 3. Originality of Work. You represent that each of Your Submissions is entirely Your 4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else 5. Licenses. a. Copyright License. You grant .NET Foundation, and those who receive the Submission directly b. Patent License. You grant .NET Foundation, and those who receive the Submission directly or c. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement. 6. Representations and Warranties. You represent that You are legally entitled to grant the above 7. Notice to .NET Foundation. You agree to notify .NET Foundation in writing of any facts or 8. Information about Submissions. You agree that contributions to Projects and information about 9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and .NET Foundation dedicates this Contribution License Agreement to the public domain according to the Creative Commons CC0 1. |
The changes are present in commit 1b5e573. The PR modifies 2 files (LinkFieldDisplayDriver.cs and LinkFieldHandler.cs) with 14 insertions and 20 deletions. You may need to refresh the page or check the Files Changed tab to see the modifications. |
src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/LinkFieldDisplayDriver.cs
Show resolved
Hide resolved
@copilot can you please add unit test for the modified files? |
Co-authored-by: MikeAlhayek <[email protected]>
I've added comprehensive unit tests for both modified files: LinkFieldDisplayDriverTests.cs:
LinkFieldHandlerTests.cs:
The tests cover all the URL resolution logic that was changed, ensuring the manual PathBase manipulation works correctly in various scenarios. Added in commit d3f1ebf. |
src/OrchardCore.Modules/OrchardCore.ContentFields/Handlers/LinkFieldHandler.cs
Show resolved
Hide resolved
@copilot fix the build errors |
Co-authored-by: MikeAlhayek <[email protected]>
FYI I added Copilot to the CLA ignore list: https://github.com/OrchardCMS/.github/blob/main/policies/cla.yml#L14 But since it works differently than usual GitHub apps, I'm not sure whether this config will work (I merged to trigger the CLA check, what's still pending, but I only added |
It seems that this pull request didn't really move for quite a while. Is this something you'd like to revisit any time soon or should we close? Please comment if you'd like to pick it up. |
Summary
This PR addresses URL generation failures in LinkField validation when used in contexts without an ActionContext, such as Minimal APIs or background tasks/workflows.
Problem
The current implementation in
LinkFieldHandler
andLinkFieldDisplayDriver
usesIUrlHelperFactory
+IActionContextAccessor
to create URL helpers for validating relative URLs that start with~/
. This approach fails when:ActionContext
is nullThe error occurs because
IUrlHelperFactory.GetUrlHelper(ActionContext)
throws an exception whenActionContext
is null.Solution
Replace the dependency on
IUrlHelperFactory
+IActionContextAccessor
withIHttpContextAccessor
and implement manual path resolution that mimicsIUrlHelper.Content()
behavior:Before:
After:
Changes
Benefits
IUrlHelper.Content()
Testing
Path resolution examples:
"~/test"
+ PathBase""
→"/test"
"~/test"
+ PathBase"/app"
→"/app/test"
"~/page"
+ PathBase"/subdir"
→"/subdir/page"
Fixes #15658.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.