diff --git a/src/OrchardCore.Modules/OrchardCore.Queries/Controllers/ApiController.cs b/src/OrchardCore.Modules/OrchardCore.Queries/Controllers/ApiController.cs index c453a6af237..c8b2733def8 100644 --- a/src/OrchardCore.Modules/OrchardCore.Queries/Controllers/ApiController.cs +++ b/src/OrchardCore.Modules/OrchardCore.Queries/Controllers/ApiController.cs @@ -1,3 +1,5 @@ +using System.Text; +using System.IO; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; @@ -25,9 +27,7 @@ IQueryManager queryManager [HttpPost, HttpGet] [Route("{name}")] - public async Task Query( - string name, - string parameters) + public async Task Query(string name) { var query = await _queryManager.GetQueryAsync(name); @@ -43,12 +43,30 @@ public async Task Query( return NotFound(); } - var queryParameters = parameters != null ? + string parameters; + if (Request.Method == "GET") + { + parameters = Request.Query["parameters"].ToString(); + } + else if (Request.Method == "POST") + { + using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) + { + parameters = await reader.ReadToEndAsync(); + } + } + else + { + return BadRequest("Invalid request method"); + } + + var queryParameters = !string.IsNullOrEmpty(parameters) ? JsonConvert.DeserializeObject>(parameters) : new Dictionary(); var result = await _queryManager.ExecuteQueryAsync(query, queryParameters); return new ObjectResult(result); } + } }