We noticed in our application that it loads the page pretty quickly first, but non-interactive, then after some seconds, loads the application WebAssembly which is interactive. This is, as far as I've understood, the pre-rendering showing a non-interactive server-side rendered version of the page as a placeholder while the client application is loading.
Yes, that's totally correct. This is how our Blazor WebApp template works.
Is there a way to skip the step of fetching everything twice, first on the server and then on the client? Users mistake the prerendered page to be a broken page that is not working. We are currently doing all loading of data in the OnInitializedAsync lifecycle method.
If you don't want this behavior, I suggest you go with Blazor WASM.
Also, is it very complex to convert form an ABP Blazor WebApp to ABP Blazor WASM, and do you have any guide for doing so?
Actually, we don't have a guide to show you how to migrate from Blazor WebApp to Blazor WASM, but we have a guide that shows the opposite, migrating from Blazor to Blazor WebApp, which you can check at https://abp.io/docs/9.2/release-info/migration-guides/abp-8-2-blazor-web-app
You can check this documentation to see the main differences in the template and apply it to your own template to make it pure Blazor WASM application. For example, as a first step, you need to configure AbpAspNetCoreComponentsWebOptions and set IsBlazorWebApp property as false etc.
Hello,
Can you give me your email?
You can send your solution to support@abp.io website (with the ticket number - #9332). Regards.
Hi, in .NET you can apply HMAC validation to all your API endpoints by implementing a custom middleware. This ensures that all incoming requests are validated for authenticity and integrity using a shared secret key, for example.
However, we don't provide such a middleware by default and you need to create it yourself. But, after you create your middleware, if you want you can use our own String Encryption system.
Regards.
so i do not need to change this line: installdir_update="${installdir}/Update.exe"
Sorry, for the inconvenience. ${installdir} should be changed for Mac. And also, instead of update.exe, you should rename it as update.
Hi,
Thank for your suggestion.
Is there any way to change the name of javascript function when it is dynamically generated at runtime. For example: In report module I have a
ReportItemAppServicein namespaceMZH.MHIBS.ReportwithGetListmethod. I add this module into AMLReportService after running, the javascript code will be generated like this:abp.utils.createNamespace(window, 'mZH.mHIBS.report.reportItems.reportItem'); mZH.mHIBS.report.reportItems.reportItem.getList = function(options, permission, ajaxParams) { return abp.ajax($.extend(true, { url: abp.appPath + 'api/aml-report-service/report-item' + abp.utils.buildQueryString(...) + '', type: 'GET' }, ajaxParams)); };Now, if I use this module in CICReportService, the javascript code will be generated the same. I can change the API
api/aml-report-service/report-itemandapi/cic-report-service/report-itembut the name of javascript function still the same. How to change it.
Unfortunately, there is no support for that, and the dynamic JS API client proxy is generated by method naming convention.
Regards.
Hi, when you use module entity extensions, ABP renders the ExtensionProperties component (https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.BlazoriseUI/Components/ObjectExtending/ExtensionProperties.razor) on the create/edit models.
So, my understanding was that by setting the data type of my property to as shown below, it should result in a text area field where I can type multiple lines of text, but that is not the case.
You are right that when you use the DataType.MultilineText, it should have rendered a textarea (MemoEdit component in Blazorise), but it seems currently it's not supported (see for current data-type equivalent components: https://github.com/abpframework/abp/blob/24b3bf2b79f5a973948a5f6d4cfcae891e216f01/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiObjectExtensionPropertyInfoExtensions.cs#L231-L249).
I've created an issue for that: https://github.com/abpframework/abp/issues/22935
Regards.
Hi, lpx-settings component comes from @volosoft/ngx-lepton-x. You can use the following command to add the related package with the source code:
abp add-package @volosoft/ngx-lepton-x --with-source-code
Then, you can find the settings.component.ts and the relevant HTML file and replace the component as you wish.
Regards.
Hi, do you clear your NuGet package each week? Because ABP Studio uses the Volo.Abp.Studio.Extensions.StandardSolutionTemplates NuGet package for the solution templates, and it seems it could not be found in the NuGet cache, this is the reason for the error:
19:13:33.138 Warning "Volo.Abp.Studio.Extensions.StandardSolutionTemplates" extension not found in the NuGet cache. Directory: "C:\Users\steve.nuget\packages\volo.abp.studio.extensions.standardsolutiontemplates\0.9.26\lib\net9.0"
Can you confirm if is there any folder named volo.abp.studio.extensions.standardsolutiontemplates under the directory? If you can see the folder, please delete it and then close & re-open ABP Studio, so it can install the NuGet package again and your problem will be resolved. (Alternatively, if it's not important for you, then you can clear all NuGet cache with the command: dotnet nuget locals --clear all then close & run ABP Studio, so it can install the package)
Regards.
Hi, the value ::1 represents the IPv6 loopback address, which is equivalent to 127.0.0.1 in IPv4. This typically occurs when you're accessing the application locally (e.g., via localhost) during development or testing. So, if you are seeing this in development mode, then it's the expected behavior.
Hi, you're encountering this error because changing the render mode to InteractiveWebAssemblyRenderMode (with prerender: false) shifts your Blazor app to pure WebAssembly mode, which doesn't execute any server-side code at startup.
The default ABP Blazor WebApp project uses Blazor Server + WebAssembly hybrid mode (InteractiveAuto). Switching to pure WebAssembly breaks this assumption, so if you want your all application as blazor wasm, you don't need to start with a blazor web app template. It's used to mix the both approaches, and deciding per component/page.
Regards.