How to format response data in ASP.NET Core

By FoxLearn 1/3/2025 7:25:25 AM   111
In this article, we will learn how to use the FormatFilterAttribute in ASP.NET Core to control the format of response data based on the request URL.

ASP.NET Core allows APIs to return data in different formats like JSON or XML, and this feature can be leveraged to return data in the appropriate format based on the requested URL extension (e.g., /api/default.json for JSON, /api/default.xml for XML).

To get started, let's create an ASP.NET Core API project in Visual Studio, then install the Microsoft.AspNetCore.Mvc.Formatters.Xml package either through the NuGet Package Manager in Visual Studio or by using the .NET CLI command.

dotnet add package Microsoft.AspNetCore.Mvc.Formatters.Xml

Use the FormatFilter attribute in ASP.NET Core

You can use the FormatFilter attribute to specify the output format based on the URL.

Here's an example where the format can be passed as a URL parameter:

[HttpGet("{id}.{format?}")]
public string Get(int id)
{
    return "The value is: " + id.ToString();
}

In this example, the FormatFilter attribute is applied to the action method. You can test the API with different formats by appending the desired format to the URL.

For example, calling the following URL will return the data in JSON format:

http://localhost:5239/api/default/11

or explicitly requesting the JSON format:

http://localhost:5239/api/default/11.json

By default, the JSON formatter is included in the pipeline. However, if you try to access the API using a format that isn't registered (e.g., XML), you'll encounter an HTTP 404 error unless the XML formatter has been added and configured.

For reference, here’s the complete code for the DefaultController class:

[Route("api/[controller]")]
[ApiController]
[FormatFilter]
public class DefaultController : ControllerBase
{
    [HttpGet("{id}.{format?}")]
    public string Get(int id)
    {
        return "The value is: " + id.ToString();
    }
}

Add the XML serialization formatters method in ASP.NET Core 

To enable XML serialization for both input and output data in ASP.NET Core, you can use the AddXmlSerializerFormatters() method.

Here’s how you can add support for XML formatters in the ConfigureServices method:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers().AddXmlSerializerFormatters();
}

Alternatively, if you're using MVC instead of just controllers, you can call the method like this:

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

If you only want to format the output as XML, but do not need to read XML from the request body, you can configure it as follows:

services.AddMvc(options =>
{
    options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
});

After making these changes, run your application and visit the following URL to test XML formatting:

http://localhost:5239/api/product/11.xml

The response should now be returned in XML format.

The AddXmlSerializerFormatters() method enables XML serialization for both request and response bodies. Once applied, the FormatFilterAttribute can automatically detect the format to use based on the URL extension. This allows you to easily serve data in different formats, such as XML or JSON.