【ASP.NET Core】WebAPIで XML リクエスト/レスポンスの設定を簡潔に記述する

コード

概要

Web API のリクエスト/レスポンス形式をXMLにしたい場合があると思います。
そんな時にリクエストヘッダーによってリクエスト/レスポンス形式を指定する方法、またシリアライズ/デシリアライズをSystem.Xml.Serializationを利用して簡潔に記述する方法をご紹介します。

前提

  • .NET6 (6.01)
  • VisualStudio 2022 for mac (17.3)

事前準備

ASP.NET Core Web API アプリケーションを作成します。作成手順はこちらの記事を参考にしてください。

Program.csの設定

AddXmlSerializerFormatters()を呼び出すことでXMLシリアライズ/デシリアライズできるようにします。

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers()
    .AddXmlSerializerFormatters(); // ←これを追加する
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

コントローラークラス

コントローラークラスの設定

サンプルなのでPOSTリクエストを受け取り、そのままレスポンスに渡す簡単な処理を記述しています。

    [ApiController]
    [Route("[controller]/[action]")]
    public class SampleController : Controller
    {
        [HttpPost]
        public SampleResponse Index(SampleRequest request)
        {
            var response = new SampleResponse()
            {
                Id = request.Id
            };
            return response; 
        }
    }

リクエスト/レスポンス クラス

リクエストクラスの設定

XmlRoot属性、XmlElement属性によってXML要素をマッピングしています。
これによってリクエストのXML要素名を合わせれば勝手にシリアライズしてくれます。

using System;
using System.Xml.Serialization;

namespace SampleWebAPI.Dto
{
    [XmlRoot("REQUEST")]
    public class SampleRequest
    {
        [XmlElement("ID")]
        public string Id { get; set; } = string.Empty;
    }
}

レスポンスクラスの設定

レスポンスクラスもリクエストと同様に出力要素名を指定します。

using System;
using System.Xml.Serialization;

namespace SampleWebAPI.Dto
{
    [XmlRoot("RESPONSE")]
    public class SampleResponse
    {
        [XmlElement("ID")]
        public string Id { get; set; } = string.Empty;
    }
}

POSTリクエストの送信方法

Httpリクエストヘッダー

Postmanを利用してリクエストを送信してみます。
ヘッダーを次のように指定することでリクエスト/レスポンスの形式をXMLに指定します。
Accept : application/xml
Content-Type : application/xml

以下のように指定すればJSON形式で指定することもできます。
Accept:application/json
Content-Type : application/json

Httpリクエストボディ

bodyは次のようにします。
リクエストクラスのXmlRoot属性、XmlElement属性等で指定した要素名にする必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<REQUEST>
	<ID>A0001</ID>
</REQUEST>

レスポンス

レスポンスが返ってきます。
レスポンスクラスでXmlRoot属性、XmlElement属性に指定した要素名になっています。

まとめ

ここまでWebAPIでリクエスト/レスポンス形式をXMLにする方法とシリアライズ/デシリアライズをSystem.Xml.Serializationを利用して簡潔に記述する方法を説明しました。

Point

  • Program.csにAddXmlSerializerFormatters()を追加する。
  • リクエスト/レスポンスクラスにXmlRoot属性、XmlElement属性を記述する。
  • リクエストヘッダーにAcceptとContent-Typeを指定する。

参考文献

ASP.NET Core Web API の応答データの書式設定
ASP.NET Core Web API で応答データを書式設定する方法について説明します。
created by Rinker
¥3,740 (2026/03/04 12:35:48時点 楽天市場調べ-詳細)

コメント

タイトルとURLをコピーしました