I am using a ASP.NET .net7.0 solution and am trying to get the result of request, which for some reason seems to keep throwing an error as shown below. I have no 'Action' type in the solution. The request completes successfully and in the API Base Controller says success and returns OK. But the swagger UI displays the below:
Error:
System.NotSupportedException: Serialization and deserialization of 'System.Action' instances are not supported. Path: $.MoveNextAction. ---> System.NotSupportedException: Serialization and deserialization of 'System.Action' instances are not supported.
[ApiController]
[Route("[controller]")]
public class SyntaxBuilderController : ApiBaseController
{
private readonly ILogger<SyntaxBuilderController> _logger;
public SyntaxBuilderController(ILogger<SyntaxBuilderController> logger)
{
_logger = logger;
}
[HttpGet(Name = "executeSyntaxBuilder")]
public async Task<ActionResult<ServiceResult<SyntaxesDto>>> GetSyntaxes([FromQuery] ExecuteSyntaxBuilder query, CancellationToken cancellationToken)
{
return await Handle(Mediator.Send(query, cancellationToken));
}
}
Base Controller:
ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
public class ApiBaseController : ControllerBase
{
private ISender _mediator;
protected ISender Mediator => GetMediator();
protected async virtual Task<ActionResult<ServiceResult<T>>> Handle<T>(Task<ServiceResult<T>> serviceResult)
{
var result = await serviceResult;
if (result.Succeeded)
{
return Ok(serviceResult);
}
return Problem(detail: $"{result.Error.Message}. Internal error code: {result.Error.Code}.", statusCode: 400);
}
private ISender GetMediator()
{
if(_mediator == null)
{
_mediator = HttpContext.RequestServices.GetService<ISender>();
}
return _mediator;
}
}
Syntaxes Dto
public class SyntaxesDto
{
public string Syntax { get; set; } = "test";
}
in ApiBaseController i adjusted the 'Handle' method to send in the awaited result not serviceResult object, which was not awaited.
protected async virtual Task<ActionResult<ServiceResult<T>>> Handle<T>(Task<ServiceResult<T>> serviceResult)
{
var result = await serviceResult;
if (result.Succeeded)
{
return Ok(result);
}
return Problem(detail: $"{result.Error.Message}. Internal error code: {result.Error.Code}.", statusCode: 400);
}