dvdmeer
❔ Add content negotiation to my .net 7 Minimal API project
.NET 7 Minimal API does not do content negotiation and as such always returns JSON.
What if I would like my Minimal API to return XML, based on the Accept request header?
So far I can create an endpoint filter and have some basic code that checks for the Accept header that I want but a few things are not clear to me:
1. How can I get and manipulate the response body?
2. I noticed that for my API, when I send an authentication request "result" will be of type Ok<AuthResult> where "AuthResult" is one of my model classes that holds my token and some other info. As this is not yet JSON I assume that the conversion to JSON happens at a later stage. Is this correct?
3. If it happens at a later stage, how can I then manipulate the body and send back the response in XML instead?
4. I assume that when I have it working for my single authentication endpoint in order to make it work for the rest I will need to create an endpoint filter factory in order to make it generic enough so that it will work for other objects also?
Note that my sample filter does not do anything yet as I have yet to figure out how to add the rest.
public class SampleEndpointFilter : IEndpointFilter
{
public async ValueTask<object?> InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
{
var result = await next(context);
if (context.HttpContext.Request.Headers.Accept.ToString().ToUpper() == "APPLICATION/XML")
{
}
return result;
}
}
Can anyone help me adding the necessary code to let me change the JSON body to XML instead? Or at least help me on my way?
Thanks
5 replies