Activities of "AdamMusson"

Could not found remote action for method 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:

  • ABP Framework version: v5.2.0
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): Microservice Pro Template
  • Exception message and stack trace:Could not found remote action for method CreateAsync
  • *Steps to reproduce the issue
  1. I created a microservice solution using ABP Suite.
  2. I then used the CLI to add a new microservice to the services folder
  3. FOllwed the steps in the article https://docs.abp.io/en/commercial/latest/startup-templates/microservice/add-microservice?msclkid=960a54d5bad011eca8c9b192b6a8ffc5 to get the service running
  4. Created a simple Entity Category with only a Name property and followed the ProductService example.
  5. Added the URL to the CorsOrigins in the Auth Server
  6. Generated the csharp client proxies using the CLI abp generate-proxy -t csharp -u https://localhost:44725 -m CategoryService
  7. I seeded the database with 2 records
  8. When I run the solution the GetListAsync works and returns the items in the database but the CreateAsync and GetAsync(id) both throw the Could not found remote action for method CreateAsync The HttpApi controller code is
[RemoteService(Name = CategoryServiceRemoteServiceConsts.RemoteServiceName)]
    [Area("categoryService")]
    [Route("api/category-service/categories")]
    public class CategoryController : CategoryServiceController, ICategoryAppService
    {
        private readonly ICategoryAppService _categoryAppService;

        public CategoryController(ICategoryAppService categoryAppService)
        {
            _categoryAppService = categoryAppService;
        }
//doesn't work
        [HttpGet]
        [Route("{id}")]
        public virtual Task<CategoryDto> GetAsync(Guid id)
        {
            return _categoryAppService.GetAsync(id);
        }
//works
        [HttpGet]
        public virtual Task<PagedResultDto<CategoryDto>> GetListAsync(GetCategoriesInput input)
        {
            return _categoryAppService.GetListAsync(input);
        }
//doesn't work
        [HttpPost]
        public virtual Task<CategoryDto> CreateAsync(CategoryCreateDto input)
        {
            return _categoryAppService.CreateAsync(input);
        }

        [HttpPut]
        [Route("{id}")]
        public virtual Task<CategoryDto> UpdateAsync(Guid id, CategoryUpdateDto input)
        {
            return _categoryAppService.UpdateAsync(id, input);
        }
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _categoryAppService.DeleteAsync(id);
        }
    }
}

Where am I going wrong? Is there something simple I am missing. Thanks.

Hi enisn, Thanks for looking at this. I created a new service with the name CategoryService using the abp cli command to add it to the services directory of the main solution. The Category entity is in the new CategoryService domain and all the code looks similar to that in the ProductService except that it is dealing with Category and the CategoryDtos. Category is defined as

 public class Category : Entity<Guid>
    {
        public string Name { get; private set; }

        protected Category()
        {

        }
        public Category(Guid id, string name): base(id)
        {
            SetName(name);
        }
        public void SetName(string name)
        {
            Check.NotNullOrEmpty(name, nameof(name), 100, 3);
            Name = name;

        }

    }

The Url https://localhost:44725 is the Url for the new CategoryService. The Web Gateway URL is https://localhost:44325 which I think is the standard.

If there is anything else let me know. But I followed the ProductService as a guide very closely and there is very little difference other than the fact that it is dealing with Category entities.

Hi, The LeptonX theme is now the default but there are a number of things that are annoying and difficult to work out without documentation or source code. Can you tell me where I can find guidance on the following?

I can override the Image in the Login form using the BrandingProvider but it has an annoying Lepton watermark and Lepton logo above the login form remains even though the BrandingProvider is specifying another logo which is picked up by the other main standard layout. How can I override this as I do not have the source code to see what the original form has?

There is no language selector on the Login form. Is this intentional?

There is no code available for the LeptonX theme but there is for the Lepton theme. Should we be using Lepton or LeptonX going forward?

I am using version 6.0.0-rc.3 Thanks for your help. Adam

When I deploy the application to a docker container on azure I find that emails to gmail accounts are not accepted. I have created an email with 123-reg server and am using this to send out the emails on user registration.

The email gets sent successfully to many email accounts I have but is rejected by all the gmail accounts I have tested. The response is below. How can we set the MessageId in abp?

Any help would be appreciated as I need to allow users with gmail addresses to be able to register.

FYI, The message id header is not required currently, but is used by several spam filters including gmail. As for what it needs to be set to, something unique.

  • ABP Framework version: v6.0.0-rc1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no
  • Exception message and stack trace:none but here is the response from gmail when sending the email This is an automatically generated Delivery Status Notification.

Reason: There was an error while attempting to deliver your message with [Subject: "Please Confirm your email"] to adam.musson@gmail.com. MTA p3plwbeout16-03.prod.phx3.secureserver.net received this response from the destination host IP - 142.250.141.27 - 550 , 550-5.7.1 [173.201.193.58] Messages missing a valid messageId header are not 550 5.7.1 accepted. lb10-20020a17090b4a4a00b00200b96d234csi12474831pjb.49 - gsmtp

  • Steps to reproduce the issue:" Deploy the application to docker and try and register to get a confirmation email

Hi, Are you saying that in an ABP application we are forced to use the Google SMTP server? And therefore create a gmail email address for the sending of emails from the application.

I am sending email from the 123-reg SMTP server and so I am not using the Google SMTP server. The problem is that because we can't set the MessageId using the ABP IEmailSender the Gmail Spam filters prevent emails from being delivered to Gmail addresses meaning people with Gmail accounts can't register for the application and confirm their emails.

If we could set the MessageId in the email header we could send email from any SMTP server and they would pass through the spam filter used by Gmail. It seems to me that if the ABP email sending service added this header the issue would be fixed.

The emails are sent successfully to email accounts that don't check the messageId for spam with my current setup.

Thanks - that's great. I noticed you have checked this into the Abp MailKitSmtpEmailSender too now. Will this be included in the version 6.0 final release? Or will it be sometime later that we will no longer need to do this override ourselves?

Thanks a lot.

I think there is a bug in the CmsKit in that you can't override the model and view as you should be able to do under the normal Abp principles. The OnGet method in the base class cannot be overriden.

How can I solve this as I do not have access to the source code to completely write my own handler by copying everything in the base class and building it up from there?

  • ABP Framework version: v6.0.0-rc.4
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no
  • Exception message and stack trace:

InvalidOperationException: Multiple handlers matched. The following handlers matched route data and had all constraints satisfied: Void OnGetAsync(), System.Threading.Tasks.Task OnGetAsync()

  • Steps to reproduce the issue:"
    1. Create a view Index.cshtml in a folder ~Pages/Public/CmsKit/Blogs/ in the Public Website project - this is to override that view
    1. Create a model BlogIndexModel that inherits from **Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs.IndexModel ** This works according to the naming conventions.
    1. Try to create an OnGet or OnGetAsync method so that you can setup the model for your overridden Blogs Page. For example

public BlogPostPublicDto LatestPost { get; set; } public void OnGetAsync() { base.OnGetAsync(); LatestPost = base.Blogs.Items.OrderByDescending(d => d.CreationTime).Take(1).First();

}

This compiles but throws the exception because of the OnGet handler in the base class.

public new void OnGetAsync() to hide the base class implementation also compiles but still get the same Exception as multiple handlers match when you run it.

The fix would normally be to override the method. I've done this with other pages but it doesn't work here.

public override void OnGetAsync() { }

But this doesn't compile as the OnGet method in the base class has not been marked virtual and cannot be overridden. Any help to sort this out would be appreciated.

Hi, I had a working Text Templating Email with a layout using the Razor Engine in version 6.0.

Now I have updated the project to version 7.0.1 and it didn't compile due to the .withRazorEngine() line in the following code in the EmailTemplateDefinitionProvider class

 public override void Define(ITemplateDefinitionContext context)
        {
            context.Add(
               new TemplateDefinition(
                   "EmailLayout",
                   isLayout: true
               )
               .WithRazorEngine()
               .WithVirtualFilePath(
                   "/Templates/EmailLayout.cshtml",
                   isInlineLocalized: true
               )
            );


            context.Add(new TemplateDefinition("ConfirmEmail",
                                                typeof(HourcoinResource), 
                                                layout: "EmailLayout")
                                   .WithVirtualFilePath(
                                       "/Templates/ConfirmEmail.cshtml",
                                       isInlineLocalized: true
                                      
                                   )
                                  .WithRazorEngine()
            );

            
        }

To get the code to compile I had to remove the .WithRazorEngine() line

I thought there may have been an update and so following the TextTemplating documentation for version 7 I used the following command abp add-package Volo.Abp.TextTemplating.Razor and got the following message.

[13:03:04 WRN] 'Volo.Abp.TextTemplating.Razor' nuget package could not be found!

So now I receive the email but instead of it being rendered I see the @Body from the EmailLayout instead of the contents from the model.

It appears the documentation is therefore out of date. How can I get this to work in version 7? Has it moved to another package?

Kind Regards

  • ABP Framework version: v7.0.1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): no

No Exception the email is sent but it isn't rendered by the razor engine as it doesn't seem to be there anymore.

  • Steps to reproduce the issue:"

If you're creating a bug/problem report, please include followings:

  • ABP Framework version: v7.0.1
  • UI type: MVC
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): No
  • Exception message and stack trace: Could not find a file/folder at the location: /Templates/ConfirmEmail.cshtml
  • Steps to reproduce the issue: I have followed steps in articles for overriding the registermodel with a custom one that has some steps for my application's registration. The EmailTemplate for the ConfirmEmail is located in the Templates directory in the DomainModule project. The system sends the email and everything works fine locally but when it is deployed to IIS the VirtualFileSystem is not picking up the /Templates/ConfirmEmail.cshtml even though it is an embedded resource.

I have this code in the WebModule to configure the VirtualFIleSystem

 private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
    {
        Configure<AbpVirtualFileSystemOptions>(options =>
        {
            options.FileSets.AddEmbedded<HourcoinWebModule>();
            options.FileSets.AddEmbedded<HourcoinDomainModule>(
                 baseNamespace: "Hourcoin.Templates",
                 baseFolder: "/Templates");

            options.FileSets.AddEmbedded<RegistrationDomainModule>();
            


            if (hostingEnvironment.IsDevelopment())
            {

                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Domain.Shared", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Domain", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Application.Contracts", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Application", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinHttpApiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Hourcoin.HttpApi", Path.DirectorySeparatorChar)));
                options.FileSets.ReplaceEmbeddedByPhysical<HourcoinWebModule>(hostingEnvironment.ContentRootPath);
            }
        });
    }

This works in development as the Physical File is used using the above ReplaceEmbeddedByPhysical. When deployed to IIS at myasp.net the email is not working because the template is not being rendered. I have caught the error and displayed it in the following screenshot image.

I have made sure the files in the Templates directory are Embedded Resources.

What could I be missing? Any help or suggestions would be appreciated .as i have followed all the documentation I can find and have not had any luck. I keep getting the error even after specifically ensuring the environment is Production in the web.c onfig which shouldn't be necessary. Is there a bug in the VirtualFIleSystem?

Hi, I have shared a demo project Github repository with you so you can see a project based on the template project illustrating the problem. The code connects to the same database that has been deployed to myasp.net and as you can see works in Debug on the local machine.

http://vfsdemo-001-site1.btempurl.com/ Is the Url you can see the code is deployed to. When you run it here and try to register the registration will fail because the ConfirmEmail template can't be found.

On localhost the code works because of the ReplaceEmbeddedAsPhysical. On the deployed version it doesn't work because the EmbeddedFiles aren't being found in the virtualfilesyste,.

Everything else is the same as both the local and deployed code are pointing to the same database. Any help in what I have done wrong here, if it isn't a bugm, would be helpful.

Let me know if you need anything else. Thanks

Showing 1 to 10 of 13 entries
Made with ❤️ on ABP v8.2.0-preview Updated on March 25, 2024, 15:11