2017-05-28 9 views
1

RESTサービスはコンテンツネゴシエーションを提供する必要があります。つまり、クライアントは応答の目的のコンテンツタイプを含むAcceptヘッダーを送信します。サービスがこのメディアタイプをサポートしていない場合は、ステータスコード406(Not Acceptable)で応答する必要があります。ASP.NETコアのステータスコード406(使用できない)

この動作をASP.NETコアにマップしようとしました。 Acceptorヘッダーのメディアタイプが認識されない場合、ASP.NETコアはJSONドキュメントを返します。フレームワークの以前のバージョンでは、上述の動作は、構成に特殊出力フォーマッタを添加することによって達成することができる:

public void ConfigureServices(IServiceCollection services) { 
    services.AddMvc(options => { 
    options.OutputFormatters.Insert(0, new HttpNotAcceptableOutputFormatter()); 
    }); 
} 

残念なことに、HttpNotAcceptableOutputFormatterがRC1後ASP.NETコアフレームワークから除去しました。フレームワークの現在のバージョンでこのクラスの代替がありますか?

答えて

4

このような場合、機能を削除したコミットを見つけて、置き換えられる可能性が高いかどうかを確認することをお勧めします。常に明示的に受け入れヘッダを尊重し、それは(MvcOptionsを介して)構成することができるように

アルターコンテンツネゴシエーションアルゴリズム:この場合、HttpNotAcceptableOutputFormatterissue #4612を固定するthis commitで除去しました。それは何と交換した

AddMvcでMVCを追加するときに設定MvcOptionsに設定されている、MvcOptions.ReturnHttpNotAcceptableです。

だからあなたのコードは次のようになるはずです。その後、私はAddMvcCore()代わりのAddMvc()

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvcCore(); 
} 

に変更し

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
} 

最後に私がいた:

services.AddMvc(options => 
{ 
    options.ReturnHttpNotAcceptable = true; 
}); 
+0

どのように地球を見つけましたか? – Mardoxx

+2

@Mardoxx RC2ブランチを見て、[ファイルを見つけました](https://github.com/aspnet/Mvc/blob/1.0.0-rc2/src/Microsoft.AspNetCore.Mvc.Core/Formatters/HttpNotAcceptableOutputFormatter.cs )を使用してファイル検索(キーボードショートカット:T)を使用します。それはファイルが元々どこにあったか教えてくれました。その後、私は[devブランチのフォルダの履歴](https://github.com/aspnet/Mvc/commits/dev/src/Microsoft.AspNetCore.Mvc.Core/Formatters)に行き、「バイナリ検索」を使ってファイルを削除したコミットを見つけるためのGitHub UI。 – poke

3

これをStartupクラスのConfigureServiceメソッドに追加します。

services.AddMvc(options => 
{ 
    options.ReturnHttpNotAcceptable = true; 
    // If you need to add support for XML 
    // options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter()); 
}); 
0

私は前にこれを持っていましたそのレスポンス406の問題ですので、私がしたのは.AddJsonFormatters()services.AddMVCCore()となり、私のAPIが再び機能しました。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvcCore() 
     .AddJsonFormatters(); 
} 
関連する問題