将 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.IEnumerable
1[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);
}
工作的 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.IEnumerable
1[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);
}