XMLとJSONを返すvnextAPIを使用するにはどうすればよいですか?
Application/xmlでcontent-typeを使用すると以前と同じように機能すると思いました。 Accept:application/xmlも試してみたことに注意してください。
しかし、そうではないようです。
編集:
これは私のproject.jsonファイルです:
{
"webroot": "wwwroot",
"version": "1.0.0-*",
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta4",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
"Microsoft.AspNet.Mvc": "6.0.0-beta4",
"Microsoft.AspNet.Mvc.Xml": "6.0.0-beta4"
},
"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
},
"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
],
"exclude": [
"wwwroot",
"node_modules",
"bower_components"
]
}
これは私のstartup.csです:
public class Startup
{
// For more information on how to configure your application, visit http://go.Microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.ConfigureMvc(options =>
{
//options.AddXmlDataContractSerializerFormatter();
options.InputFormatters.Add(new XmlSerializerInputFormatter());
options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
}
}
.Net Core1.0.0のリリース後に詳細を更新
startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(config =>
{
// Add XML Content Negotiation
config.RespectBrowserAcceptHeader = true;
config.InputFormatters.Add(new XmlSerializerInputFormatter());
config.OutputFormatters.Add(new XmlSerializerOutputFormatter());
});
project.json
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Mvc.Formatters.Xml": "1.0.0",
詳細については、このテーマに関するShawn Wildermuthsのブログ投稿を参照してください: ASP.NET Coreでのコンテンツネゴシエーション
これがMVC6rc1の更新された回答です
Startup.cs( MvcXmlMvcBuilderExtensions を使用)
public void ConfigureServices(IServiceCollection services)
{
var mvcBuilder = services.AddMvc();
mvcBuilder.AddXmlSerializerFormatters();
// or mvcBuilder.AddXmlDataContractSerializerFormatters()
project.json
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.Formatters.Xml": "6.0.0-rc1-final",
ASP.NET5の名前がASP.NETCore 1.0に変更されたため、Microsoft.AspNet.Mvc
が Microsoft.AspNetCore.Mvc
になったことを忘れないでください。
"dependencies": {
"Microsoft.AspNetCore.Mvc" : "1.0.2",
"Microsoft.AspNetCore.Mvc.Formatters.Xml" : "1.0.2",
ASP.NET Core 1.1の回答を更新しました:
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(config => {
config.RespectBrowserAcceptHeader = true;
config.InputFormatters.Add(new XmlSerializerInputFormatter());
config.OutputFormatters.Add(new XmlSerializerOutputFormatter());
});
}
Csproj:
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Version="1.1.3" />
MVC 6RespectBrowserAcceptHeaderはデフォルトでfalseです。したがって、コンテンツネゴシエーションをバイパスします。そのため、XMLフォーマッターを有効にした後は常にXMLを取得している可能性があります。
スタートアップファイルに以下を追加することで、RespectBrowserAcceptHeaderをtrueに設定できます。
services.Configure<MvcOptions>(options =>
{
options.RespectBrowserAcceptHeader = true;
});
AcceptHeaderapplication/xmlを送信する必要があります
承認:「application/json」、「application/xml」などの応答に受け入れられるメディアタイプ、または「application/vnd.example + xml」などのカスタムメディアタイプ
content-typeは、送信する内容を定義します。 AcceptとContentTypeヘッダーの違い も参照してください。
Xmlのコンテンツネゴシエーションがasp.net5webapiでデフォルトでアクティブ化されているかどうかはわかりません
この記事をご覧ください: ASP.NETMVC開発者向けのコンテンツネゴシエーションとWebAPI
これは、RC2ではservices.AddMvc()。AddXmlDataContractSerializerFormatters();に簡略化されています。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.AddMvc().AddXmlDataContractSerializerFormatters();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}