Return http.StatusMethodNotAllowed for request method mismatch #25
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
I fixed
OapiRequestValidator
to returnhttp.StatusMethodNotAllowed
instead ofhttp.StatusNotFound
when the request method does not match the routing definition.Details
When the request method does not match the routing definition, the router returns
ErrMethodNotAllowed
.However, in the current implementation of
OapiRequestValidator
, it returnshttp.StatusNotFound
regardless of the error returned by the router.This caused an unexpected response where the status would be
status = 404, body = method not allowed
when the request method didn’t match.In this PR, I fixed
validateRequest()
to useerrors.Is()
to check the error and return the appropriate status code based on its value.Additionally, I added test code for cases where the request method doesn't match.
This issue only occurs when combined with net/http, as both chi and gorilla probably handle this internally and return
http.StatusMethodNotAllowed
without needing fixes.