首页 > 解决方案 > 将 MediatR 从 MVC 项目移动到 Razor Pages。无法使基本语法正常工作

问题描述

工作的 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 版本不返回 JSON.. 而是返回..

nvalidOperationException:不支持的处理程序方法返回类型“System.Threading.Tasks.Task 1[System.Collections.Generic.IEnumerable1 [Srx.Application.StatCategories.Models.StatCategoryPreviewDto]]”。Microsoft.AspNetCore.Mvc.RazorPages.Internal.ExecutorFactory.CreateHandlerMethod(HandlerMethodDescriptor handlerDescriptor)

任何的想法 ?

标签: c#asp.net-mvcasp.net-corerazormediatr

解决方案


剃刀页面方法应返回实现IActionResult的类型,以便正确执行操作结果。如果您需要返回 json,您可以使用JsonResult并将操作返回类型更改为IActionResult就足够了

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

推荐阅读