Skip to content

Commit 5f907fb

Browse files
committed
Auto-generated documentation from 55408c9
1 parent 3e20c63 commit 5f907fb

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

usage/extensibility/controllers.html

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
8383
<h1 id="controllers">Controllers</h1>
8484

8585
<p>To expose API endpoints, ASP.NET controllers need to be defined.</p>
86+
<h2 id="auto-generated-controllers">Auto-generated controllers</h2>
8687
<p><em>since v5</em></p>
8788
<p>Controllers are auto-generated (using <a href="https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview">source generators</a>) when you add <code>[Resource]</code> on your model class:</p>
8889
<pre><code class="lang-c#">[Resource] // Generates ArticlesController.g.cs
@@ -91,7 +92,13 @@ <h1 id="controllers">Controllers</h1>
9192
// ...
9293
}
9394
</code></pre>
94-
<h2 id="resource-access-control">Resource Access Control</h2>
95+
<div class="NOTE">
96+
<h5>Note</h5>
97+
<p>Auto-generated controllers are convenient to get started, but may not work as expected with certain customizations.
98+
For example, when model classes are defined in a separate project, the controllers are generated in that project as well, which is probably not what you want.
99+
In such cases, it's perfectly fine to use <a href="#explicit-controllers">explicit controllers</a> instead.</p>
100+
</div>
101+
<h3 id="resource-access-control">Resource Access Control</h3>
95102
<p>It is often desirable to limit which endpoints are exposed on your controller.
96103
A subset can be specified too:</p>
97104
<pre><code class="lang-c#">[Resource(GenerateControllerEndpoints =
@@ -119,7 +126,7 @@ <h2 id="resource-access-control">Resource Access Control</h2>
119126
]
120127
}
121128
</code></pre>
122-
<h2 id="augmenting-controllers">Augmenting controllers</h2>
129+
<h3 id="augmenting-controllers">Augmenting controllers</h3>
123130
<p>Auto-generated controllers can easily be augmented because they are partial classes. For example:</p>
124131
<pre><code class="lang-c#">[DisableRoutingConvention]
125132
[Route(&quot;some/custom/route&quot;)]
@@ -150,8 +157,8 @@ <h2 id="augmenting-controllers">Augmenting controllers</h2>
150157
</code></pre>
151158
<p>In case you don't want to use auto-generated controllers and define them yourself (see below), remove
152159
<code>[Resource]</code> from your models or use <code>[Resource(GenerateControllerEndpoints = JsonApiEndpoints.None)]</code>.</p>
153-
<h2 id="earlier-versions">Earlier versions</h2>
154-
<p>In earlier versions of JsonApiDotNetCore, you needed to create controllers that inherit from <code>JsonApiController&lt;TResource, TId&gt;</code>. For example:</p>
160+
<h2 id="explicit-controllers">Explicit controllers</h2>
161+
<p>To define your own controller class, inherit from <code>JsonApiController&lt;TResource, TId&gt;</code>. For example:</p>
155162
<pre><code class="lang-c#">public class ArticlesController : JsonApiController&lt;Article, Guid&gt;
156163
{
157164
public ArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph,

0 commit comments

Comments
 (0)