如果不支持请求的版本,我想返回 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。
此外,如果我将 my 设置ApiVersionReader
为 beHeaderApiVersionReader
并设置ReturnHttpNotAcceptable
为 true,则当版本不受支持时,它会返回 HTTP 400 而不是 406。
如果我完全禁用版本控制,我会正确获得 HTTP 406,并将其ReturnHttpNotAcceptable
设置为 true,并且如果请求具有appliction/xml
并且 API 不支持 XML。
我已经在 Github 上的 ASP.NET API 版本控制上问过这个问题,但我想知道这是否只是我还没有弄清楚的问题,并且可以从这个论坛得到答案。