0

如果不支持请求的版本,我想返回 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 版本控制上问过这个问题,但我想知道这是否只是我还没有弄清楚的问题,并且可以从这个论坛得到答案。

4

1 回答 1

0

正如这里的讨论所示我最终采用了这种方法:

  • 我创建了一个输出格式化程序,它接受带有版本参数的媒体类型(例如application/json;version=1.0application/vnd.acme+json;version=1.0
  • 我创建了一个ApiVersioning's 的子类,DefaultErrorResponseProvider因此当 Accept 标头中指定的版本不被接受时,它会返回 HTTP 406。
于 2017-04-15T12:56:43.883 回答