将 MediatR 从 MVC 项目移动到 Razor Pages。无法使用基本语法

Moving MediatR from a MVC project to Razor Pages. Cannot get basic syntax to work

工作的 MVC 版本是

 public class StatCategoriesController : BaseController
{
    [HttpGet]
    public async Task<ActionResult<IEnumerable<StatCategoryPreviewDto>>> GetStatCategoryPreview([FromQuery] GetStatCategoryPreviewQuery query)
    {
        return Ok(await Mediator.Send(query));
    }    
}

RAZOR 版本是

  public class CategoriesModel : PageModel
{
    private IMediator _mediator;

    protected IMediator Mediator =>
        _mediator ?? (_mediator = HttpContext.RequestServices.GetService<IMediator>());

    public async Task<IEnumerable<StatCategoryPreviewDto>> OnGet([FromQuery] GetStatCategoryPreviewQuery query)
    {
        return await Mediator.Send(query);
    }

}

而且 RAZOR 版本没有 return JSON.. 而是 returns..

nvalidOperationException:不支持的处理程序方法 return 类型 'System.Threading.Tasks.Task1[System.Collections.Generic.IEnumerable1[Srx.Application.StatCategories.Models.StatCategoryPreviewDto]]'。 Microsoft.AspNetCore.Mvc.RazorPages.Internal.ExecutorFactory.CreateHandlerMethod(HandlerMethodDescriptor 处理程序描述符)

有什么想法吗?

razor 页面方法应 return 类型实现 IActionResult 才能正确执行操作结果。如果您需要 return json,您可以使用 JsonResult 并将操作 return 类型更改为 IActionResult 就足够了

public async Task<IActionResult> OnGet([FromQuery] GetStatCategoryPreviewQuery query)
{
    var result = await Mediator.Send(query);
    return new JsonResult(result);
}