diff --git a/src/Examples/NoEntityFrameworkExample/NullSafeExpressionRewriter.cs b/src/Examples/NoEntityFrameworkExample/NullSafeExpressionRewriter.cs
index 61ebb8b8b0..321ed3b809 100644
--- a/src/Examples/NoEntityFrameworkExample/NullSafeExpressionRewriter.cs
+++ b/src/Examples/NoEntityFrameworkExample/NullSafeExpressionRewriter.cs
@@ -6,14 +6,13 @@ namespace NoEntityFrameworkExample;
///
/// Inserts a null check on member dereference and extension method invocation, to prevent a from being thrown when
/// the expression is compiled and executed.
-///
-/// For example,
-///
+/// For example, todoItem.Assignee.Id == todoItem.Owner.Id)
-/// ]]>
-/// would throw if the database contains a
-/// TodoItem that doesn't have an assignee.
-///
+/// ]]> would throw if the database
+/// contains a TodoItem that doesn't have an assignee.
+///
+///
public sealed class NullSafeExpressionRewriter : ExpressionVisitor
{
private const string MinValueName = nameof(long.MinValue);
diff --git a/src/JsonApiDotNetCore.Annotations/Configuration/ResourceType.cs b/src/JsonApiDotNetCore.Annotations/Configuration/ResourceType.cs
index 4c0cd133f9..53ed2f882e 100644
--- a/src/JsonApiDotNetCore.Annotations/Configuration/ResourceType.cs
+++ b/src/JsonApiDotNetCore.Annotations/Configuration/ResourceType.cs
@@ -289,7 +289,7 @@ private static IReadOnlySet GetAttributesInTypeOrDerived(Resource
}
// Hiding base members using the 'new' keyword instead of 'override' (effectively breaking inheritance) is currently not supported.
- // https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords
+ // https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords
HashSet attributesInDerivedTypes = [];
foreach (AttrAttribute attributeInDerivedType in resourceType.DirectlyDerivedTypes
@@ -330,7 +330,7 @@ private static IReadOnlySet GetRelationshipsInTypeOrDeriv
}
// Hiding base members using the 'new' keyword instead of 'override' (effectively breaking inheritance) is currently not supported.
- // https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords
+ // https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords
HashSet relationshipsInDerivedTypes = [];
foreach (RelationshipAttribute relationshipInDerivedType in resourceType.DirectlyDerivedTypes
diff --git a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/EagerLoadAttribute.cs b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/EagerLoadAttribute.cs
index 7879d74e88..7db7909586 100644
--- a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/EagerLoadAttribute.cs
+++ b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/EagerLoadAttribute.cs
@@ -8,8 +8,9 @@ namespace JsonApiDotNetCore.Resources.Annotations;
///
///
/// This is intended for calculated properties that are exposed as JSON:API attributes, which depend on a related entity to always be loaded.
-///
+///
/// {
/// [Attr(AttrCapabilities.AllowFilter | AttrCapabilities.AllowSort)]
/// [NotMapped]
@@ -25,12 +26,13 @@ namespace JsonApiDotNetCore.Resources.Annotations;
/// public string Last { get; set; }
/// }
///
-/// public class Blog : Identifiable
+/// public class Blog : Identifiable
/// {
/// [HasOne]
/// public User Author { get; set; }
/// }
-/// ]]>
+/// ]]>
+///
///
[PublicAPI]
[AttributeUsage(AttributeTargets.Property)]
diff --git a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasManyAttribute.cs b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasManyAttribute.cs
index 7eb521aad8..67cbd94ab0 100644
--- a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasManyAttribute.cs
+++ b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasManyAttribute.cs
@@ -11,7 +11,7 @@ namespace JsonApiDotNetCore.Resources.Annotations;
///
///
///
/// {
/// [HasMany]
/// public ISet Articles { get; set; }
diff --git a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasOneAttribute.cs b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasOneAttribute.cs
index 51d22f9955..c88cecaa62 100644
--- a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasOneAttribute.cs
+++ b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/HasOneAttribute.cs
@@ -9,7 +9,7 @@ namespace JsonApiDotNetCore.Resources.Annotations;
///
///
///
/// {
/// [HasOne]
/// public Author Author { get; set; }
diff --git a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/RelationshipAttribute.cs b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/RelationshipAttribute.cs
index 21d5bfab1d..b580f0576f 100644
--- a/src/JsonApiDotNetCore.Annotations/Resources/Annotations/RelationshipAttribute.cs
+++ b/src/JsonApiDotNetCore.Annotations/Resources/Annotations/RelationshipAttribute.cs
@@ -25,13 +25,13 @@ public abstract class RelationshipAttribute : ResourceFieldAttribute
///
///
///
/// {
/// [HasOne] // InverseNavigationProperty: Person.Articles
/// public Person Owner { get; set; }
/// }
///
- /// public class Person : Identifiable
+ /// public class Person : Identifiable
/// {
/// [HasMany] // InverseNavigationProperty: Article.Owner
/// public ICollection Articles { get; set; }
diff --git a/src/JsonApiDotNetCore.Annotations/Resources/RuntimeTypeConverter.cs b/src/JsonApiDotNetCore.Annotations/Resources/RuntimeTypeConverter.cs
index 679d726a5d..fab50e3c37 100644
--- a/src/JsonApiDotNetCore.Annotations/Resources/RuntimeTypeConverter.cs
+++ b/src/JsonApiDotNetCore.Annotations/Resources/RuntimeTypeConverter.cs
@@ -167,12 +167,12 @@ public static bool CanContainNull(Type type)
///
/// Gets the name of a type, including the names of its generic type arguments, without any namespaces.
- ///
- ///
+ ///
+ /// Example return value: >
/// ]]>
- ///
- ///
+ ///
public static string GetFriendlyTypeName(Type type)
{
ArgumentNullException.ThrowIfNull(type);
diff --git a/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs b/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs
index b8ec3ab43e..7da33c70cf 100644
--- a/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs
+++ b/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs
@@ -191,7 +191,7 @@ public interface IJsonApiOptions
/// Enables to customize the settings that are used by the .
///
///
- /// The next example sets the naming convention to camel casing.
+ /// The following example sets the naming convention to camel casing.
///
/// Used on an ASP.NET controller class to indicate which query string parameters are blocked.
///
-///
+/// { }
-/// ]]>
-///
+/// { }
-/// ]]>
+/// ]]>
+///
[PublicAPI]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DisableQueryStringAttribute : Attribute
diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs
index 19df79dc2b..ef2cd0933c 100644
--- a/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs
+++ b/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs
@@ -5,10 +5,12 @@ namespace JsonApiDotNetCore.Controllers.Annotations;
///
/// Used on an ASP.NET controller class to indicate that a custom route is used instead of the built-in routing convention.
///
-///
+/// { }
-/// ]]>
+/// ]]>
+///
[PublicAPI]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DisableRoutingConventionAttribute : Attribute;
diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs
index acd6528500..aa91527b24 100644
--- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs
+++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs
@@ -86,9 +86,12 @@ protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resource
}
///
- /// Gets a collection of primary resources. Example:
+ /// Example endpoint:
+ ///
///
public virtual async Task GetAsync(CancellationToken cancellationToken)
{
@@ -105,9 +108,12 @@ public virtual async Task GetAsync(CancellationToken cancellation
}
///
- /// Gets a single primary resource by ID. Example:
+ /// Example endpoint:
+ ///
///
public virtual async Task GetAsync([DisallowNull] TId id, CancellationToken cancellationToken)
{
@@ -127,12 +133,15 @@ public virtual async Task GetAsync([DisallowNull] TId id, Cancell
}
///
- /// Gets a secondary resource or collection of secondary resources. Example:
+ /// Example endpoints: Example:
- ///
+ ///
+ ///
///
public virtual async Task GetSecondaryAsync([DisallowNull] TId id, [PreserveEmptyString] string relationshipName,
CancellationToken cancellationToken)
@@ -156,13 +165,15 @@ public virtual async Task GetSecondaryAsync([DisallowNull] TId id
}
///
- /// Gets a relationship value, which can be a null, a single object or a collection. Example:
- /// null, a single object or a collection.
+ ///
+ /// Example endpoints: Example:
- ///
+ ///
+ ///
///
public virtual async Task GetRelationshipAsync([DisallowNull] TId id, [PreserveEmptyString] string relationshipName,
CancellationToken cancellationToken)
@@ -186,9 +197,12 @@ public virtual async Task GetRelationshipAsync([DisallowNull] TId
}
///
- /// Creates a new resource with attributes, relationships or both. Example:
+ /// Example endpoint:
+ ///
///
public virtual async Task PostAsync([FromBody] TResource resource, CancellationToken cancellationToken)
{
@@ -233,9 +247,12 @@ private string GetLocationUrl(string resourceId)
}
///
- /// Adds resources to a to-many relationship. Example:
+ /// Example endpoint:
+ ///
///
///
/// Identifies the left side of the relationship.
@@ -274,9 +291,12 @@ public virtual async Task PostRelationshipAsync([DisallowNull] TI
///
/// Updates the attributes and/or relationships of an existing resource. Only the values of sent attributes are replaced. And only the values of sent
- /// relationships are replaced. Example:
+ /// Example endpoint:
+ ///
///
public virtual async Task PatchAsync([DisallowNull] TId id, [FromBody] TResource resource, CancellationToken cancellationToken)
{
@@ -304,13 +324,15 @@ public virtual async Task PatchAsync([DisallowNull] TId id, [From
}
///
- /// Performs a complete replacement of a relationship on an existing resource. Example:
- ///
+ /// Example endpoints: Example:
- ///
+ ///
+ ///
///
///
/// Identifies the left side of the relationship.
@@ -347,9 +369,12 @@ public virtual async Task PatchRelationshipAsync([DisallowNull] T
}
///
- /// Deletes an existing resource. Example:
+ /// Example endpoint:
+ ///
///
public virtual async Task DeleteAsync([DisallowNull] TId id, CancellationToken cancellationToken)
{
@@ -369,9 +394,12 @@ public virtual async Task DeleteAsync([DisallowNull] TId id, Canc
}
///
- /// Removes resources from a to-many relationship. Example:
+ /// Example endpoint:
+ ///
///
///
/// Identifies the left side of the relationship.
diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs
index 6c6703c132..35cc439900 100644
--- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs
+++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs
@@ -52,8 +52,8 @@ protected BaseJsonApiOperationsController(IJsonApiOptions options, IResourceGrap
/// none of the operations returns any data, then HTTP 201 is returned instead of 200.
///
///
- /// The next example creates a new resource.
- ///
///
///
- /// The next example updates an existing resource.
- ///
///
///
- /// The next example deletes an existing resource.
- /// ), the serializer naming convention is applied on the
/// controller type name (camel-case by default).
///
-///
+/// : JsonApiController { } // => /someResources
///
@@ -26,7 +27,8 @@ namespace JsonApiDotNetCore.Middleware;
///
/// // unable to determine resource type:
/// public class SomeVeryCustomController : CoreJsonApiController { } // => /someVeryCustom
-/// ]]>
+/// ]]>
+///
[PublicAPI]
public sealed partial class JsonApiRoutingConvention : IJsonApiRoutingConvention
{
diff --git a/test/TestBuildingBlocks/FakerExtensions.cs b/test/TestBuildingBlocks/FakerExtensions.cs
index b6cb073e8c..7fdb421c82 100644
--- a/test/TestBuildingBlocks/FakerExtensions.cs
+++ b/test/TestBuildingBlocks/FakerExtensions.cs
@@ -14,7 +14,7 @@ public static Faker MakeDeterministic(this Faker faker, DateTime? syste
faker.UseSeed(seed);
// Setting the system DateTime to kind Utc, so that faker calls like PastOffset() don't depend on the system time zone.
- // See https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset.op_implicit?view=net-6.0#remarks
+ // See https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.op_implicit#remarks
faker.UseDateTimeReference(systemTimeUtc ?? IntegrationTest.DefaultDateTimeUtc.UtcDateTime);
return faker;