I have a requirement where I am trying to call the FormAppService from the Forms module in my AuthServe. I have to get the form details from the FormId that I will provide. I have done all the configuration. Added the FormHttpApiClientModule in my AuthServer project's module.cs file. I have created an instance of the IFormAppService interface in the Register.cshtml.cs file. And using it I am calling the GetAsync method of the interface which will fetch the form data with the Id parameter. But when the GetAsync method is called it throws the following exception.
NullReferenceException: Object reference not set to an instance of an object. Volo.Abp.Http.Client.ClientProxying.ClientProxyApiDescriptionFinder.Initialize()
DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Volo.Abp.VirtualFileSystem.IVirtualFileProvider, Volo.Abp.Json.IJsonSerializer)' on type 'ClientProxyApiDescriptionFinder'. Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
DependencyResolutionException: An exception was thrown while activating λ:Volo.Abp.Http.Client.ClientProxying.IClientProxyApiDescriptionFinder -> Volo.Abp.Http.Client.ClientProxying.ClientProxyApiDescriptionFinder. Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action<ResolveRequestContext> next)
DependencyResolutionException: An exception was thrown while activating λ:Volo.Abp.Http.Client.ClientProxying.IClientProxyApiDescriptionFinder -> Volo.Abp.Http.Client.ClientProxying.ClientProxyApiDescriptionFinder. Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action<ResolveRequestContext> next) Autofac.Core.Resolving.Middleware.SharingMiddleware+<>c__DisplayClass5_0.<Execute>b__0() Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func<object> creator) Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable<Guid> qualifyingId, Func<object> creator) Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action<ResolveRequestContext> next) Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action<ResolveRequestContext> next) Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request) Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request) Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable<Parameter> parameters, out object instance) Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable<Parameter> parameters) System.Lazy<T>.ViaFactory(LazyThreadSafetyMode mode) System.Lazy<T>.ExecutionAndPublication(LazyHelper executionAndPublication, bool useDefaultConstructor) System.Lazy<T>.CreateValue() Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) Volo.Abp.DependencyInjection.AbpLazyServiceProvider.LazyGetRequiredService<T>() Volo.Abp.Http.Client.ClientProxying.ClientProxyBase<TService>.get_ClientProxyApiDescriptionFinder() Volo.Abp.Http.Client.ClientProxying.ClientProxyBase<TService>.BuildHttpProxyClientProxyContext(string methodName, ClientProxyRequestTypeValue arguments) Volo.Abp.Http.Client.ClientProxying.ClientProxyBase<TService>.RequestAsync<T>(string methodName, ClientProxyRequestTypeValue arguments) Volo.Forms.Forms.ClientProxies.FormClientProxy.GetAsync(Guid id) in FormClientProxy.Generated.cs + return await RequestAsync<FormWithDetailsDto>(nameof(GetAsync), new ClientProxyRequestTypeValue G1.health.AuthServer.Pages.Account.RegisterModel.CreateExtraFields() in Register.cshtml.cs + var form = await FormAppService.GetAsync((Guid)tenant.TenantId); G1.health.AuthServer.Pages.Account.RegisterModel.OnGetAsync() in Register.cshtml.cs + await CreateExtraFields(); Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory+GenericTaskHandlerMethod.Convert<T>(object taskAsObject) Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory+GenericTaskHandlerMethod.Execute(object receiver, object[] arguments) Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync() Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync() Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Rethrow(PageHandlerExecutedContext context) Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeInnerFilterAsync() Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ExceptionContextSealed context) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) Volo.Abp.AspNetCore.Uow.AbpUnitOfWorkMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Volo.Abp.AspNetCore.Serilog.AbpSerilogMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Volo.Abp.AspNetCore.MultiTenancy.MultiTenancyMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Microsoft.AspNetCore.Builder.ApplicationBuilderAbpOpenIddictMiddlewareExtension+<>c__DisplayClass0_0+<<UseAbpOpenIddictValidation>b__0>d.MoveNext() Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) Prometheus.HttpMetrics.HttpRequestDurationMiddleware.Invoke(HttpContext context) Prometheus.HttpMetrics.HttpRequestCountMiddleware.Invoke(HttpContext context) Prometheus.HttpMetrics.HttpInProgressMiddleware.Invoke(HttpContext context) Volo.Abp.AspNetCore.Security.AbpSecurityHeadersMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context) Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+<>c__DisplayClass6_1+<<UseMiddlewareInterface>b__1>d.MoveNext() Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
It was working day before yesterday, but all of a sudden it's throwing the above error. I am not sure, what am I missing here. Can you suggest me what can be the possible solution to resolve this?
I have created a microservice called FormsService, on which I have added the FormsModule as a project. I want to call the APIs of other microservice into the FormsService microservice (specifically SaasService here). I have followed the following document to do so.
https://docs.abp.io/en/commercial/latest/startup-templates/microservice/synchronous-interservice-communication
The configuration is completed, and the required data is also seeded in the database. But when I run the whole application and try to call an API endpoint from the SaasService, I get an error in my Blazor UI project. I checked the logs of the Blazor UI project, I get the following error :
2023-12-08 20:54:02.276 +05:30 [ERR] Could not found remote action for method: System.Threading.Tasks.Task1[System.Collections.Generic.List
1[G1.health.SaasService.TenantDto]] GetTenantNamesList() on the URL: https://localhost:44325
Volo.Abp.AbpException: Could not found remote action for method: System.Threading.Tasks.Task1[System.Collections.Generic.List
1[G1.health.SaasService.TenantDto]] GetTenantNamesList() on the URL: https://localhost:44325
at Volo.Abp.Http.Client.DynamicProxying.ApiDescriptionFinder.FindActionAsync(HttpClient client, String baseUrl, Type serviceType, MethodInfo method)
at Volo.Abp.Http.Client.DynamicProxying.DynamicHttpProxyInterceptor1.GetActionApiDescriptionModel(IAbpMethodInvocation invocation) at Volo.Abp.Http.Client.DynamicProxying.DynamicHttpProxyInterceptor
1.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func
3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter
1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Volo.Forms.Web.Pages.Forms.CreateModalModel.OnGetAsync() in D:\G1 Health WorkSpace\Branches\DEV Branch\G1.health\services\forms\modules\Volo.Forms\src\Volo.Forms.Web\Pages\Forms\CreateModal.cshtml.cs:line 33
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.GenericTaskHandlerMethod.Convert[T](Object taskAsObject)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.GenericTaskHandlerMethod.Execute(Object receiver, Object[] arguments)
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync()
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync()
2023-12-08 20:54:02.316 +05:30 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'.
2023-12-08 20:54:02.322 +05:30 [INF] Executed page /Forms/CreateModal in 8739.3474ms
2023-12-08 20:54:02.322 +05:30 [INF] Executed endpoint '/Forms/CreateModal'
2023-12-08 20:54:02.323 +05:30 [INF] Request finished HTTP/2 GET https://localhost:44314/Forms/CreateModal - - - 500 - application/json;+charset=utf-8 9008.7077ms
It says that it couldn't find the API endpoint on the 44325 port, but my SaasService runs on the 44381 port. The 44325 port runs the Web Gateway application. I don't understand why the API call is redirected to the 44325 port and not 44381 port. This is the configuration I have done in my FormsService appsettings.json file,
"RemoteServices": { "AbpIdentity": { "BaseUrl": "https://localhost:44381/", "UseCurrentAccessToken": "false" } }, "IdentityClients": { "Default": { "GrantType": "client_credentials", "ClientId": "health_FormsService", "ClientSecret": "1q2w3e*", "Authority": "https://localhost:44322", "Scope": "SaasService" } }
Can you tell me why is it redirecting to the 44325 port? Or is there any configuration I am missing? I have also referred to the following ticket https://support.abp.io/QA/Questions/2268/Questions-regarding-new-microservice-design where it is stated that the Internal Gateway has been removed since last few versions. So, then which port should I be using in the above configuration to make it work? Please guide.
I have downloaded the Forms Module in my project, and have added one endpoint in one of my controllers. All the other endpoints are working fine, but there's an issue with the new endpoint that I have added. While trying to run my Blazor UI, it throws the following error while starting the Blazor application.
The action 'Volo.Forms.Forms.ClientProxies.FormClientProxy.GetTenantsList (Volo.Forms.HttpApi.Client)' has ApiExplorer enabled, but is using conventional routing. Only actions which use attribute routing support ApiExplorer.
Here the GetTenantsList is my endpoint in one of my controllers, can you tell me what I am missing here, do I have to do any configuration in the controller? Please enlighten.
I have an application template with EF Core MySQL and Angular. I want the Forms module to be included in my project, but since ABP is not providing UI for Forms in Angular as of now, I want to keep one separate microservice (with Blazor Server) for the Forms module. For that I have created a new microservice in my solution. And there I had the HttpApi.Host project, where Swagger UI is already configured. Here, I integrated the Forms module as a project, and I added the required Razor pages in the HttpApi.Host project of the service along with the required configuration.
But, now I am not sure how exactly I have to configure the authentication and authorization for the Forms Razor pages. Even though I am able to access the pages on the UI, but I can't perform anything because the user is unauthenticated. I have implemented the usual "oidc" authentication, which is as of now working, but authorization is something I'm not sure how to configure. I have granted all the forms permissions to the admin user through Angular UI, but it still says unauthorized. Can you help me with that?
When we create a Tenant, it creates an admin user by default with all the permissions being granted to that Tenant admin user. Is there a way through which I can assign a specific role to that admin user while the creation of the Tenant? Also, I want a way in which only few of the permissions should be visible to that tenant admin user to be modified. For example, I have a form wizard, which is used to setup the new organizations in the application. I want a way in which only the host user should be able to use that form and only the host user should be allowed to see the form permissions and that permission should not be visible to the admin user of any tenant.
Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.
If you're creating a bug/problem report, please include followings:
I followed the steps mentioned in the below URL to add the File Management module in our project https://docs.abp.io/en/commercial/latest/modules/file-management
After following all these steps, I tried to Upload a file. But when clicking on the "Upload File" button, nothing happens. There should be a modal opening up to select the file to upload, but it's not opening.
Steps followed to add the File Management Module :
Added File Management module in the Administration service using ABP Suite (Added as a package)
Installed and configured the @volo/file-management npm package in Angular
Added the following code to configure Blob Storage in the AdministrationServiceApplicationModule.cs file
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.Configure<FileManagementContainer>(c =>
{
c.UseFileSystem(fileSystem =>
{
fileSystem.BasePath = "<I have put the file path here>";
}); // You can use FileSystem or Azure providers also.
});
});
After that I seeded the data using DB Migrator and the following tables were created in administration database fmdirectorydescriptors fmfiledescriptors
Then I configured the path for file management in angular project
After following all these steps, I ran the project. Clicked on File Management, I was able to create folders, but when clicking on the Upload File button, nothing happens. Can you help me what I might be missing?