web-dev-qa-db-ja.com

ASP.NET Core 1.0 WebAPIがXMLを返さない

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();
    }
}
10
Tim

.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でのコンテンツネゴシエーション

12
hsop

これが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.MvcMicrosoft.AspNetCore.Mvc になったことを忘れないでください。

"dependencies": {
   "Microsoft.AspNetCore.Mvc" : "1.0.2",
   "Microsoft.AspNetCore.Mvc.Formatters.Xml" : "1.0.2",
4
KCD

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" />
2
Spivonious

MVC 6RespectBrowserAcceptHeaderはデフォルトでfalseです。したがって、コンテンツネゴシエーションをバイパスします。そのため、XMLフォーマッターを有効にした後は常にXMLを取得している可能性があります。

スタートアップファイルに以下を追加することで、RespectBrowserAcceptHeaderをtrueに設定できます。

services.Configure<MvcOptions>(options =>
        {
            options.RespectBrowserAcceptHeader = true;
        });
2
Hasan Salameh

AcceptHeaderapplication/xmlを送信する必要があります

承認:「application/json」、「application/xml」などの応答に受け入れられるメディアタイプ、または「application/vnd.example + xml」などのカスタムメディアタイプ

content-typeは、送信する内容を定義します。 AcceptとContentTypeヘッダーの違い も参照してください。

Xmlのコンテンツネゴシエーションがasp.net5webapiでデフォルトでアクティブ化されているかどうかはわかりません

この記事をご覧ください: ASP.NETMVC開発者向けのコンテンツネゴシエーションとWebAPI

1
Boas Enkler

これは、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>();
        }
0
Darren Sim