From 895f674dca69e762dcf5818025bb137bfe061f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Sun, 1 Mar 2026 13:26:00 +0300 Subject: [PATCH] Add Blazor screenshot and update modular-crm docs Add a new screenshot asset and update the modular-crm tutorial (part-03.md). Changes include: - Add images/vscode-catalog-index-razor-blazor-webapp.png. - Wrap the "Exposing Application Services as HTTP API Controllers" section in an MVC conditional block ({{if UI == "MVC"}} ... {{end}}). - Update HttpClient proxy registrations to include ModularCrmContractsModule and keep CatalogContractsModule, with an inline comment noting the addition. - Replace the Blazor WebApp placeholder line with an actual markdown image reference to the newly added screenshot. These edits provide the actual Blazor screenshot in the docs and clarify HTTP client proxy registration for the tutorial. --- ...vscode-catalog-index-razor-blazor-webapp.png | Bin 0 -> 14414 bytes docs/en/tutorials/modular-crm/part-03.md | 10 ++++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/en/tutorials/modular-crm/images/vscode-catalog-index-razor-blazor-webapp.png diff --git a/docs/en/tutorials/modular-crm/images/vscode-catalog-index-razor-blazor-webapp.png b/docs/en/tutorials/modular-crm/images/vscode-catalog-index-razor-blazor-webapp.png new file mode 100644 index 0000000000000000000000000000000000000000..00ae4a7b8cfd9541a05cbaa13b29cfd9cafd5025 GIT binary patch literal 14414 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 ### Exposing Application Services as HTTP API Controllers +{{if UI == "MVC"}} + > This application doesn't need to expose any functionality as HTTP API, because all the module integration and communication will be done in the same process as a natural aspect of a monolith modular application. However, in this section, we will create HTTP APIs because; > > 1. We will use these HTTP API endpoints in development to create some example data. @@ -362,6 +364,8 @@ public partial class ProductToProductDtoMapper : MapperBase > > So, follow the instructions in this section and expose the product application service as an HTTP API endpoint. +{{end}} + To create HTTP API endpoints for the catalog module, you have two options: * You can create a regular ASP.NET Core Controller class in the `ModularCrm.Catalog` project, inject `IProductAppService` and create wrapper methods for each public method of the product application service. You will do this later while you create the Ordering module. (Also, you can check the `SampleController` class under the **Samples** folder in the `ModularCrm.Catalog` project for an example) @@ -400,7 +404,9 @@ public class ModularCrmClientModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.AddHttpClientProxies(typeof(CatalogContractsModule).Assembly); + ... + context.Services.AddHttpClientProxies(typeof(ModularCrmContractsModule).Assembly); + context.Services.AddHttpClientProxies(typeof(CatalogContractsModule).Assembly); // NEW: ADD HttpClientProxies } } ```` @@ -503,7 +509,7 @@ Here, you simply use the `IProductAppService` to get a list of all products and {{else if UI == "BlazorWebApp"}} Open the `ModularCrm.Catalog` .NET solution in your IDE, and find the `Pages/Catalog/Index.razor` file under the `ModularCrm.Catalog.Blazor` project. -> Blazor WebApp placeholder screenshot file: `images/vscode-catalog-index-razor-blazor-webapp.png` +![vscode-catalog-index-razor-blazor-webapp](images/vscode-catalog-index-razor-blazor-webapp.png) Replace the `Index.razor` file with the following content: