diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
index 9ee8ac023..b63863cbc 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
@@ -60,7 +60,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
/// The name of the app.
/// The id or slug of the asset.
/// Optional suffix that can be used to seo-optimize the link to the image Has not effect.
- /// The query string parameters.
+ /// The query string parameters.
///
/// 200 => Asset found and content or (resized) image returned.
/// 404 => Asset or app not found.
@@ -71,7 +71,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
[ApiPermission]
[ApiCosts(0.5)]
[AllowAnonymous]
- public async Task GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto query)
+ public async Task GetAssetContentBySlug(string app, string idOrSlug, string more, [FromQuery] AssetContentQueryDto queries)
{
IAssetEntity? asset;
@@ -84,14 +84,14 @@ namespace Squidex.Areas.Api.Controllers.Assets
asset = await assetRepository.FindAssetBySlugAsync(App.Id, idOrSlug);
}
- return await DeliverAssetAsync(asset, query);
+ return await DeliverAssetAsync(asset, queries);
}
///
/// Get the asset content.
///
/// The id of the asset.
- /// The query string parameters.
+ /// The query string parameters.
///
/// 200 => Asset found and content or (resized) image returned.
/// 404 => Asset or app not found.
@@ -102,16 +102,16 @@ namespace Squidex.Areas.Api.Controllers.Assets
[ApiPermission]
[ApiCosts(0.5)]
[AllowAnonymous]
- public async Task GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto query)
+ public async Task GetAssetContent(Guid id, [FromQuery] AssetContentQueryDto queries)
{
var asset = await assetRepository.FindAssetAsync(id);
- return await DeliverAssetAsync(asset, query);
+ return await DeliverAssetAsync(asset, queries);
}
- private async Task DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto query)
+ private async Task DeliverAssetAsync(IAssetEntity? asset, AssetContentQueryDto queries)
{
- query ??= new AssetContentQueryDto();
+ queries ??= new AssetContentQueryDto();
if (asset == null)
{
@@ -123,20 +123,20 @@ namespace Squidex.Areas.Api.Controllers.Assets
return StatusCode(403);
}
- if (query.Version > EtagVersion.Any && asset.Version != query.Version)
+ if (queries.Version > EtagVersion.Any && asset.Version != queries.Version)
{
- asset = await assetLoader.GetAsync(asset.Id, query.Version);
+ asset = await assetLoader.GetAsync(asset.Id, queries.Version);
}
- var resizeOptions = query.ToResizeOptions(asset);
+ var resizeOptions = queries.ToResizeOptions(asset);
FileCallback callback;
Response.Headers[HeaderNames.ETag] = asset.FileVersion.ToString();
- if (query.CacheDuration > 0)
+ if (queries.CacheDuration > 0)
{
- Response.Headers[HeaderNames.CacheControl] = $"public,max-age={query.CacheDuration}";
+ Response.Headers[HeaderNames.CacheControl] = $"public,max-age={queries.CacheDuration}";
}
var contentLength = (long?)null;
@@ -147,7 +147,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
{
var resizedAsset = $"{asset.Id}_{asset.FileVersion}_{resizeOptions}";
- if (query.ForceResize)
+ if (queries.ForceResize)
{
await ResizeAsync(asset, bodyStream, resizedAsset, resizeOptions, true, ct);
}
@@ -181,7 +181,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
FileDownloadName = asset.FileName,
FileSize = contentLength,
LastModified = asset.LastModified.ToDateTimeOffset(),
- SendInline = query.Download != 1
+ SendInline = queries.Download != 1
};
}
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
index 32daf8efb..7c5f30c0f 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
@@ -43,7 +43,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// GraphQL endpoint.
///
/// The name of the app.
- /// The graphql query.
+ /// The graphql query.
///
/// 200 => Contents retrieved or mutated.
/// 404 => Schema or app not found.
@@ -52,6 +52,35 @@ namespace Squidex.Areas.Api.Controllers.Contents
/// You can read the generated documentation for your app at /api/content/{appName}/docs.
///
[HttpGet]
+ [Route("content/{app}/graphql/")]
+ [ApiPermission]
+ [ApiCosts(2)]
+ public async Task GetGraphQL(string app, [FromQuery] GraphQLQuery? queries = null)
+ {
+ var (hasError, response) = await graphQl.QueryAsync(Context, queries ?? new GraphQLQuery());
+
+ if (hasError)
+ {
+ return BadRequest(response);
+ }
+ else
+ {
+ return Ok(response);
+ }
+ }
+
+ ///
+ /// GraphQL endpoint.
+ ///
+ /// The name of the app.
+ /// The graphql query.
+ ///
+ /// 200 => Contents retrieved or mutated.
+ /// 404 => Schema or app not found.
+ ///
+ ///
+ /// You can read the generated documentation for your app at /api/content/{appName}/docs.
+ ///
[HttpPost]
[Route("content/{app}/graphql/")]
[ApiPermission]
@@ -82,7 +111,6 @@ namespace Squidex.Areas.Api.Controllers.Contents
///
/// You can read the generated documentation for your app at /api/content/{appName}/docs.
///
- [HttpGet]
[HttpPost]
[Route("content/{app}/graphql/batch")]
[ApiPermission]