Перемещение MediatR из проекта MVC в Razor Pages.Не удается получить базовый синтаксис для работы - PullRequest
1 голос
/ 20 сентября 2019

Рабочая версия 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.IEnumerable 1 [Srx.Application.StatCategories.Models.StatCategoryPreviewDto]]'.Microsoft.AspNetCore.Mvc.RazorPages.Internal.ExecutorFactory.CreateHandlerMethod (HandlerMethodDescriptor handlerDescriptor)

Есть идеи?

1 Ответ

2 голосов
/ 20 сентября 2019

Метод страницы бритвы должен возвращать тип, который реализует IActionResult, чтобы правильно выполнить результат действия.Если вам нужно вернуть json, вы можете использовать JsonResult, и достаточно изменить тип возвращаемого действия на IActionResult

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