-
Notifications
You must be signed in to change notification settings - Fork 711
Behavior should be the same when ?api-version is missing, as when it is incorrect. #61
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
Comments
Once you opt into API versioning, all API routes are explicitly versioned. This means a client cannot request a resource without explicitly providing an API version. This is why you receive a 404 when no version is specified. Unless you have existing services that didn't require versioning, I always recommend that explicit versioning be specified by clients. That provides the most reliable behavior for clients (IMHO). In order to make your scenario work, you need to allow matching a default API version when a client doesn't specify anything. This is achieved in the setup with: service.AddApiVersioning( options => options.AssumeDefaultVersionWhenUnspecified = true ); The choice of the default version can also be configured and is up to you. The default configured value is 1.0. There are several topics in the wiki that can guide you through some of these more advanced behaviors. I hope that helps. |
I understand that. I want the |
Well, the doc I read was fairly different and had a lot more verbiage about specific versioning behavior. Not sure if the internal one is significantly different or if it's evolved that much since I read it last. Anyway, when I'd implemented something like this internally, we failed requests missing the header/query-param as 400s as well. I prefer that behavior. It seems more semantically consistent and less confusing to callers. |
Ah ... I see. You may be right. Getting the behavior right for could match and could never match is tricky. In retrospect, I believe this should be 400 since it's possible to match the route, but no route is matched. The cause in this case is that the client didn't provide a version. Basically, it should be the same behavior as specifying 2.0, which is also possible, but is unmatched because there's no such implemented version. I'll investigate further and promote this to bug after I've triaged it. |
Confirmed. This is a bug. It's a little surprising that I missed such an obvious case, but so is the way of software. I'm tracking the issue with a detailed explanation in #62. I should have the fix published soon. Thanks for reporting this. |
Setup:
I have an InfoController that looks like this:
Here's observed queries, through nginx:
The behavior for missing
api-version
query parameter should be the same as if a bad version is specified. I expected the first to result in a400
as well, rather than404
.The text was updated successfully, but these errors were encountered: