如果不支持请求的版本,我想返回HTTP 406。所以我有:
services.AddApiVersioning(options =>
{
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = false;
options.ApiVersionReader = new MediaTypeApiVersionReader();
});
services.AddMvc(options =>
{
options.RespectBrowserAcceptHeader = true;
options.ReturnHttpNotAcceptable = true; // Return HTTP 406
});
但即使版本正确,这也总会返回HTTP 406(例如application / json; v = 1.0或application \ vnd.acme + json; v = 1)。
如果我将ReturnHttpNotAcceptable
设置为false,则在不支持版本时会收到HTTP 400(错误请求),如果支持版本,则会收到HTTP 200.
此外,如果我将ApiVersionReader
设置为HeaderApiVersionReader
,并将ReturnHttpNotAcceptable
设置为true,则在不支持该版本时,它会返回HTTP 400而不是406。
如果我完全禁用版本控制,我会正确获取HTTP 406,ReturnHttpNotAcceptable
设置为true,如果请求有appliction/xml
且API不支持XML。
我在ASP.NET API Versioning on Github上问了这个问题,但我想知道这是否是我想不到的,可以从这个论坛得到答案。
答案 0 :(得分:0)
正如讨论here所示,我最终采用了这种方法:
application/json;version=1.0
或application/vnd.acme+json;version=1.0
)ApiVersioning
' s DefaultErrorResponseProvider
的子类,因此当不接受Accept标头中指定的版本时,它会返回HTTP 406。