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;