在混合编程中,IHttpContextAccessor.HttpContext变量的值为空可能是由于.Net Core 2.2的默认Startup.cs文件未正确配置所致。可以通过以下步骤解决该问题:
下面是示例代码:
Middleware/CurrentUserService.cs
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
public interface ICurrentUserService
{
Task GetUsernameAsync();
}
public class CurrentUserService : ICurrentUserService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public CurrentUserService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public Task GetUsernameAsync()
{
var username = _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier);
return Task.FromResult(username);
}
}
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped();
// 添加其他服务
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 添加其他中间件
app.UseMiddleware();
// 添加其他中间件
}
}