❔ 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:
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
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:
- How can I get and manipulate the response body?
- 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?
- If it happens at a later stage, how can I then manipulate the body and send back the response in XML instead?
- 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?
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
