2017-03-18 5 views
0

要求されたバージョンがサポートされていない場合、HTTP 406を返送したいと思います。MvcOptions.ReturnHttpNotAcceptableをApiVersioningと連携させるには

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が返されます(例えば、アプリケーション/ JSON; V = 1.0またはアプリケーションの\ vnd.acme + JSONを; V = 1):だから私は持っています。

ReturnHttpNotAcceptableをfalseに設定すると、バージョンがサポートされていない場合はHTTP 400(Bad Request)が、バージョンがサポートされている場合はHTTP 200が取得されます。

また、ApiVersionReaderHeaderApiVersionReaderに設定し、ReturnHttpNotAcceptableをtrueに設定すると、バージョンがサポートされていない場合は、HTTPの代わりにHTTP 400が返されます。

バージョン管理を完全に無効にすると、ReturnHttpNotAcceptableがtrueに設定されており、要求にappliction/xmlが設定されており、APIがXMLをサポートしていない場合、HTTP 406が正しく取得されます。

私はASP.NET API Versioning on Githubでこの質問をしましたが、これが私が理解できなかったものであるかどうか疑問に思っており、このフォーラムから回答を得ることができました。

答えて

0

議論hereに示されているように、私はこのアプローチになってしまった:

  • 私はのsubsclassを作成したバージョンのパラメータ(例えばapplication/json;version=1.0またはapplication/vnd.acme+json;version=1.0
  • でメディアタイプを受け入れ、出力フォーマッタを作成ApiVersioningDefaultErrorResponseProviderです。したがって、Acceptヘッダーで指定されたバージョンが受け入れられないと、HTTP 406を返します。
関連する問題