mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-07-31 01:08:41 +02:00
FormEncoded Request fails (404 Not Found) if key value pairs order in mapping is different from request body order #614
Closed
opened 2025-12-29 15:28:20 +01:00 by adam
·
19 comments
No Branch/Tag Specified
master
1341-mapping-json
stef-aspire-tests-updates
bug/973-TinyMapper
bug/1149-AppendGuidToSavedMappingFile
feature/1150-DockerImageVersion
61
stef-1108
stef-1097
stef-1083-MessageOptions_Type_Conflict
stef-1062-logger
stef-IgnoreOpenApiErrors
stef-928-TypeLoadException-FluentAssertions-net472
nunit
stef-849
stef-847-regex-questionmark
http_verb
WireMockServerContext
webapp
ai
CommandLineArgumentsParser
2.13.0
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.25.0
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.2
1.11.0
1.10.1
1.10.0
1.9.1
1.9.0
1.8.18
1.8.17
1.8.16
1.8.15
1.8.14
1.8.13
1.8.12
1.8.11
1.8.10
1.8.9
1.8.8
1.8.7
1.8.6
1.8.5
1.8.3
1.8.2
1.8.1
1.8.0
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.62
1.5.61
1.5.60
1.5.59
1.5.58
1.5.57
1.5.56
1.5.55
1.5.54
1.5.53
1.5.52
1.5.51
1.5.50
1.5.49
1.5.48
1.5.47
1.5.46
1.5.45
1.5.44
1.5.43
1.5.42
1.5.41
1.5.40
1.5.39
1.5.38
1.5.37
1.5.36
1.5.35
1.5.34
1.5.33
1.5.32
1.5.31
1.5.30
1.5.29
1.5.28
1.5.27
1.5.26
1.5.25
1.5.24
1.5.23
1.5.22
1.5.21
1.5.20
1.5.19
1.5.18
1.5.17
1.5.16
1.5.15
1.5.14
1.5.13
1.5.12
1.5.11
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.43
1.4.42
1.4.41
1.4.40
1.4.39
1.4.38
1.4.37
1.4.36
1.4.35
1.4.34
1.4.33
1.4.32
1.4.31
1.4.30
1.4.29
1.4.28
1.4.27
1.4.26
1.4.25
1.4.24
1.4.23
1.4.22
1.4.21
1.4.20
1.4.19
1.4.18
1.4.17
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.10
1.3.9
1.3.8
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.18
1.2.17
1.2.16
1.2.15
1.2.14
1.2.13
1.2.12
1.2.11.0
1.2.10
1.2.9.0
1.2.8.0
1.2.7.0
1.2.6.0
1.2.5.0
1.2.4.0
1.2.3.0
1.2.2.0
1.2.1.0
1.2.0.0
1.1.10
1.1.9.0
1.1.8.0
1.1.7.0
1.1.6.0
1.1.5.0
1.1.3.0
1.1.2.0
1.1.1.0
1.1.0.0
1.0.43.0
1.0.42.0
1.0.41.0
1.0.40.0
1.0.39.0
1.0.38.0
1.0.37.0
1.0.36.0
1.0.35.0
1.0.34.0
1.0.33.0
1.0.32.0
1.0.31.0
1.0.29.0
1.0.28.0
1.0.25.0
1.0.24.0
1.0.23.0
1.0.22.0
1.0.21.0
1.0.20.0
1.0.19.0
1.0.18.0
1.0.17.0
1.0.16.0
1.0.15.0
1.0.14.0
1.0.13.0
1.0.12.0
1.0.11.0
1.0.10.0
1.0.9.0
1.0.8.0
1.0.7.0
1.0.6.1
1.0.6
1.0.5
1.0.4.21
1.0.4.20
1.0.4.19
1.0.4.18
1.0.4.17
1.0.4.16
1.0.4.15
1.0.4.14
1.0.4.13
1.0.4.12
1.0.4.11
1.0.4.10
1.0.4.9
1.0.4.8
1.0.4.7
1.0.4.6
1.0.4.5
1.0.4.4
1.0.4.3
1.0.4.2
1.0.4.1
1.0.4.0
1.0.3.20
1.0.3.19
1.0.3.18
1.0.3.17
1.0.3.16
1.0.3.15
1.0.3.14
1.0.3.13
1.0.3.12
1.0.3.11
1.0.3.10
1.0.3.9
1.0.3.8
1.0.3.7
1.0.3.6
1.0.3.5
1.0.3.4
1.0.3.3
1.0.3.2
1.0.3.1
1.0.3.0
1.0.2.13
1.0.2.12
1.0.2.11
1.0.2.10
1.0.2.9
1.0.2.8
1.0.2.7
1.0.2.6
1.0.2.5
1.0.2.4
1.0.2.1
1.0.2.0
1.0.1.5
1.0.1.3
1.0.1.2
1.0.1.1
1.0.0.0
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/WireMock.Net-wiremock#614
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @Xor-el on GitHub (Jul 24, 2024).
Originally assigned to: @StefH on GitHub.
Describe the bug
When trying to use the
ExactMatcherorRegexMatcherto match a form encoded request, it fails (404 Not Found) if they order of the form encoded request is different from that in the json mapping file.Expected behavior:
Ordering of FormEncoded Body requests should not affect matching as it might not always be convenient to control the ordering.
If it is going to be a breaking change to fix this, a flag like
IgnoreFormEncodedBodyOrdercan be provided to override the default.Test to reproduce
Other related info
Docker is needed to run the Demo as it uses WireMock.NET Test Container.
@StefH commented on GitHub (Jul 24, 2024):
The
ExactMatcherorRegexMatchershould just be used to match a string value. In case you want to match a form-urlencoded body, a better approach would be to add a new matcher likeFormUrlEncodedMatcherwhich can be used like this?@Xor-el commented on GitHub (Jul 24, 2024):
Hello @StefH thanks for your quick feedback.
I agree with your suggestion that adding a new matcher would be overall a better approach to address this.
Thanks for looking into this.
@StefH commented on GitHub (Jul 27, 2024):
https://github.com/WireMock-Net/WireMock.Net/pull/1147
@StefH commented on GitHub (Jul 27, 2024):
@Xor-el
Can you double check the PR (https://github.com/WireMock-Net/WireMock.Net/pull/1147)
And I've updated the wiki: https://github.com/WireMock-Net/WireMock.Net/wiki/Request-Matcher-FormUrlEncodedMatcher
@Xor-el commented on GitHub (Jul 27, 2024):
Hello @StefH Reviewing the PR and Doc now.
@Xor-el commented on GitHub (Jul 27, 2024):
So just reviewed this and everything looks awesome. Thanks.
while reviewing, a thought came to my head. does it make sense to have something like a
FormUrlEncodedPartialMatcher, similar to howJsonPartialMatcherdoes partial matching or does theMatchOperatorfunctionality cover this?@StefH commented on GitHub (Jul 27, 2024):
By default the
MatchOperatoris set to Or.So when the matcher is like:
And the body only contains
grant_type=client_credentials, this matcher will match.A
FormUrlEncodedPartialMatchercould be used like this (I think)...I'll check if I can change the implementation from the FormUrlEncodedMatcher to use internally the WildcardMatcher for string compare...
@Xor-el commented on GitHub (Jul 27, 2024):
and if it's the other way,
And the body contains
grant_type=client_credentials,client_id=DDCD99EE1531484E4E21D5EC9FBA5D8B, andclient_secret=RERDRDk5RUUxNTMxNDg0RTRFMjFENUVDOUZCQTVEOEI%3DI am guessing the matching would still work right or only theFormUrlEncodedPartialMatcherwould work then?@StefH commented on GitHub (Jul 27, 2024):
This does already work like it is because Or is used.
@Xor-el commented on GitHub (Jul 27, 2024):
great then, thanks.
@StefH commented on GitHub (Jul 27, 2024):
I've just updated the code so that wildcards are supported.
See the FormUrlEncodedMatcherTest for details.
@Xor-el commented on GitHub (Jul 27, 2024):
LGTM 🚀
@Xor-el commented on GitHub (Jul 29, 2024):
Hello @StefH I updated the test container package to version
1.5.62which I assume contains theFormUrlEncodedMatcherchanges.unfortunately, the matching still returns 404 error.
I updated the Demo to reflect this issue.
can you please confirm if I am missing something?
@StefH commented on GitHub (Jul 29, 2024):
I could not test using docker container, but I just started latest
dotnet-wiremockand updated your program.cs to be likeAnd it works:

In case you want to know why the mapping is not matched, follow this page:
https://github.com/WireMock-Net/WireMock.Net/wiki/Request-Matching-Tips
@Xor-el commented on GitHub (Jul 29, 2024):
@StefH my bad actually. I forgot to clear my Stale Docker Image Cache so my test container was using the old cached 1.5.60 instead of the latest 1.5.62 image.
Thanks for your time.
@StefH commented on GitHub (Jul 29, 2024):
@Xor-el
Currently the
latestis always used.Would it be needed to add an option to manually specify the version when using the containerbuilder? Or is this not needed?
@Xor-el commented on GitHub (Jul 29, 2024):
@StefH
So, Docker Desktop normally caches the downloaded image and reuses it on subsequent builds if it exists so I don't think there is much you can do about that on your end except there is a way to force Docker to always pull when a build is about to happen (but this has it's own disadvantage too).
it would be nice to have the ability to pin the version we wish to use to enable users to work around scenarios like this, which happened some days back to the SQL Server test container image.
@StefH commented on GitHub (Jul 29, 2024):
Can you create a new issue please?
@Xor-el commented on GitHub (Jul 29, 2024):
sure, on it.