diff --git a/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs b/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs
index 7ed77e24..2b0a4e6e 100644
--- a/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs
+++ b/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs
@@ -732,9 +732,8 @@ public async Task GetLanguagesAsync()
[Fact]
public async Task QueryParameters()
{
- string url = $"{_baseUrl}/items?elements.personas%5Ball%5D=barista%2Ccoffee%2Cblogger&elements.personas%5Bany%5D=barista%2Ccoffee%2Cblogger&system.sitemap_locations%5Bcontains%5D=cafes&elements.product_name%5Beq%5D=Hario%20V60&elements.product_name%5Bneq%5D=Hario%20V42&elements.price%5Bgt%5D=1000&elements.price%5Bgte%5D=50&system.type%5Bin%5D=cafe%2Ccoffee&system.type%5Bnin%5D=article%2Cblog_post&elements.price%5Blt%5D=10&elements.price%5Blte%5D=4&elements.country%5Brange%5D=Guatemala%2CNicaragua&elements.price%5Bempty%5D&elements.country%5Bnempty%5D&depth=2&elements=price%2Cproduct_name&limit=10&order=elements.price%5Bdesc%5D&skip=2&language=en&includeTotalCount";
- _mockHttp
- .When($"{url}")
+ _mockHttp.Expect($"{_baseUrl}/items")
+ .WithExactQueryString("elements.personas%5Ball%5D=barista%2Ccoffee%2Cblogger&elements.personas%5Bany%5D=barista%2Ccoffee%2Cblogger&system.sitemap_locations%5Bcontains%5D=cafes&elements.product_name%5Beq%5D=Hario%20V60&elements.product_name%5Bneq%5D=Hario%20V42&elements.price%5Bgt%5D=1000&elements.price%5Bgte%5D=50&system.type%5Bin%5D=cafe%2Ccoffee&system.type%5Bnin%5D=article%2Cblog_post&elements.price%5Blt%5D=10&elements.price%5Blte%5D=4&elements.country%5Brange%5D=Guatemala%2CNicaragua&elements.price%5Bempty%5D&elements.country%5Bnempty%5D&depth=2&elements=price%2Cproduct_name&excludeElements=product_description%2Cproduct_thumbnail&limit=10&order=elements.price%5Bdesc%5D&skip=2&language=en&includeTotalCount")
.Respond("application/json", " { 'items': [],'modular_content': {},'pagination': {'skip': 2,'limit': 10,'count': 0, 'total_count': 0, 'next_page': ''}}");
var client = InitializeDeliveryClientWithACustomTypeProvider(_mockHttp);
@@ -757,6 +756,7 @@ public async Task QueryParameters()
new NotEmptyFilter("elements.country"),
new DepthParameter(2),
new ElementsParameter("price", "product_name"),
+ new ExcludeElementsParameter("product_description", "product_thumbnail"),
new LimitParameter(10),
new OrderParameter("elements.price", SortOrder.Descending),
new SkipParameter(2),
diff --git a/Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeElementsParameter.cs b/Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeElementsParameter.cs
new file mode 100644
index 00000000..f4fd1215
--- /dev/null
+++ b/Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeElementsParameter.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Kontent.Ai.Delivery.Abstractions;
+
+namespace Kontent.Ai.Urls.Delivery.QueryParameters
+{
+ ///
+ /// Specifies the content elements to exclude from response.
+ ///
+ public sealed class ExcludeElementsParameter : IQueryParameter
+ {
+ ///
+ /// Gets the list of codenames of content elements that should be excluded from response.
+ ///
+ public IReadOnlyList ElementCodenames { get; }
+
+ ///
+ /// Initializes a new instance of the class using the specified content elements codenames.
+ ///
+ /// An array that contains zero or more codenames of the content elements that should be excluded from response.
+ public ExcludeElementsParameter(params string[] elementCodenames)
+ {
+ ElementCodenames = elementCodenames.ToList().AsReadOnly();
+ }
+
+ ///
+ /// Returns the query string representation of the query parameter.
+ ///
+ public string GetQueryStringParameter()
+ {
+ return $"excludeElements={string.Join(Uri.EscapeDataString(","), ElementCodenames.Select(Uri.EscapeDataString))}";
+ }
+ }
+}
\ No newline at end of file