Open Closed

Extension property in Identity Users not working in Azure #6195 #8205


User avatar
0
drg_tverkroost created

Hi there,

Unfortunately the issue still exists. Still got NullReferenceException. Why? I checked the documentation and solutions in support forum. I created a custom LookupApiRequestService. See

Module Entity Extensions

and

[Extension property in Identity Users not working in Azure #6195](https://abp.io/support/questions/6195/Extension-property-in-Identity-Users-not-working-in-Azure)

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System;
using Volo.Abp.AspNetCore.Components.Web.Extensibility;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client.Authentication;
using Volo.Abp.Http.Client;
using Volo.Abp.MultiTenancy;

namespace NEXTjeugd.Blazor
{
    [Dependency(ReplaceServices = true)]
    public class CustomBlazorServerLookupApiRequestService : ILookupApiRequestService, ITransientDependency
    {
        public IHttpClientFactory HttpClientFactory { get; }
        public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; }
        public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; }
        public ICurrentTenant CurrentTenant { get; }
        public IHttpContextAccessor HttpContextAccessor { get; }
        public NavigationManager NavigationManager { get; }

        public ILogger<CustomBlazorServerLookupApiRequestService> Logger { get; }

        public CustomBlazorServerLookupApiRequestService(IHttpClientFactory httpClientFactory,
            IRemoteServiceHttpClientAuthenticator httpClientAuthenticator,
            ICurrentTenant currentTenant,
            IHttpContextAccessor httpContextAccessor,
            NavigationManager navigationManager,
            IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider,
            ILogger<CustomBlazorServerLookupApiRequestService> logger)
        {
            HttpClientFactory = httpClientFactory;
            HttpClientAuthenticator = httpClientAuthenticator;
            CurrentTenant = currentTenant;
            HttpContextAccessor = httpContextAccessor;
            NavigationManager = navigationManager;
            RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider;
            Logger = logger;
        }

        public async Task<string> SendAsync(string url)
        {
            var client = HttpClientFactory.CreateClient();
            var requestMessage = new HttpRequestMessage(HttpMethod.Get, url);

            var uri = new Uri(url, UriKind.RelativeOrAbsolute);
            if (!uri.IsAbsoluteUri)
            {
                var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultOrNullAsync("Default");
                if (remoteServiceConfig != null)
                {
                    // Blazor tiered mode
                    var baseUrl = remoteServiceConfig.BaseUrl;
                    client.BaseAddress = new Uri(baseUrl);
                    AddHeaders(requestMessage);
                    await HttpClientAuthenticator.Authenticate(new RemoteServiceHttpClientAuthenticateContext(client, requestMessage, new RemoteServiceConfiguration(baseUrl), string.Empty));
                }
                else
                {
                    // Blazor server mode
                    client.BaseAddress = new Uri(NavigationManager.BaseUri);
                    foreach (var header in HttpContextAccessor.HttpContext!.Request.Headers.Where(x => x.Key != "Accept-Encoding"))
                    {
                        requestMessage.Headers.TryAddWithoutValidation(header.Key, header.Value.ToArray());
                    }
                }
            }

            var response = await client.SendAsync(requestMessage);

            var responseString = await response.Content.ReadAsStringAsync();

            Logger.LogInformation("Response: {0}", responseString);

            return responseString;
        }

        protected virtual void AddHeaders(HttpRequestMessage requestMessage)
        {
            if (CurrentTenant.Id.HasValue)
            {
                requestMessage.Headers.Add(TenantResolverConsts.DefaultTenantKey, CurrentTenant.Id.Value.ToString());
            }

            var currentCulture = CultureInfo.CurrentUICulture.Name ?? CultureInfo.CurrentCulture.Name;
            if (!currentCulture.IsNullOrEmpty())
            {
                requestMessage.Headers.AcceptLanguage.Add(new(currentCulture));
            }
        }
    }
}

Is there a solution for this?

ABP Framework version**: v8.2.3 UI Type**: Blazor Server Database System**: EF Core (SQL Server) Tiered (for MVC) Exception message and full stack trace**:

Markdown supported.
Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)

1 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    It seems that the HttpContextAccessor.HttpContext is null. Can you set a breakpoint to confirm this?

    You can skip adding headers if HttpContext is null

    if (HttpContextAccessor.HttpContext != null )
    {
        foreach (var header in HttpContextAccessor.HttpContext!.Request.Headers.Where(x => x.Key != "Accept-Encoding"))
        {
            requestMessage.Headers.TryAddWithoutValidation(header.Key, header.Value.ToArray());
        }
    }
    

    Thanks.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on September 16, 2026, 14:50
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.