TypedResults metadata are not inferred for API Controllers #44988
Open
Description
Is there an existing issue for this?
- I have searched the existing issues
Describe the bug
As described in HttpResults type, IResult
types are supported in API Controller, however, after #43543 the metadata from IEndpointMetadataProvider
are not populated to API Controller Actions anymore.
It is caused because the ActionDescriptor
is already created when the EndpointMetadataPopulator
is called and not getting updated.
swagger.json
{
"openapi": "3.0.1",
"info": {
"title": "WebApplication22",
"version": "1.0"
},
"paths": {
"/api/Test": {
"get": {
"tags": [
"Test"
],
"responses": {
"200": {
"description": "Success"
}
}
}
}
},
"components": { }
}
Expected Behavior
swagger.json
{
"openapi": "3.0.1",
"info": {
"title": "WebApplication22",
"version": "1.0"
},
"paths": {
"/api/Test": {
"get": {
"tags": [
"Test"
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FooBar"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"FooBar": {
"type": "object",
"properties": {
"requiredParam": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
}
}
}
}
Steps To Reproduce
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.MapControllers();
app.Run();
[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
[HttpGet]
public Ok<FooBar> GEt()
=> TypedResults.Ok(new FooBar() { RequiredParam = ""});
}
public class FooBar
{
public required string RequiredParam { get; set; }
}
Exceptions (if any)
No response
.NET Version
8.0.100-alpha.1.22472.9
Anything else?
No response