Получение пустой ошибки строки подключения в проекте веб-API ASP.NET Core 10C#

Место общения программистов C#
Anonymous
Получение пустой ошибки строки подключения в проекте веб-API ASP.NET Core 10

Сообщение Anonymous »

Я использую .NET 10 с самыми последними обновлениями для всего. Я использую EF Core и ASP.NET Core.
Вот мой файл program.cs; когда я получаю строку подключения, я получаю то, что ожидаю. Когда я нажимаю LoginController, я вижу переданные настройки IConfiuguration. Однако, когда я устанавливаю точку останова в конструкторе FSMUserStore, я проверяю переданный контекст, и его строка подключения не установлена ​​​​правильно (вообще).
Я столько раз запускал отладчик Visual Studio и пробовал так много вещей, что я просто теряюсь в этом. Есть ли у кого-нибудь предложения?
using ElmahCore.Mvc;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Portal.Libraries;
using PortalDataModels.Models;
using System.Text;
using Twilio.TwiML.Voice;

var builder = WebApplication.CreateBuilder(args);
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();

var connString = configuration.GetConnectionString("DefaultConnection");

// Add services to the container.

// For Entity Framework
builder.Services.AddDbContext
(options => options.UseSqlServer(configuration.GetConnectionString(connString)));

builder.Services.AddScoped();

builder.Services.AddIdentity()
.AddEntityFrameworkStores()
.AddUserManager()
.AddSignInManager()
.AddDefaultTokenProviders();

builder.Services.AddElmah(options => {
options.ConnectionString = connString;
options.SqlServerDatabaseTableName = "Elmah_Error"; //Defaults to ELMAH_Error if not set
options.OnPermissionCheck = context => false;
});

// Adding Authentication
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
// Adding Jwt Bearer
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.MapInboundClaims = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidAudience = configuration["Jwt:ValidAudience"],
ValidIssuer = configuration["Jwt:ValidIssuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Jwt:Key"]))
};
});

builder.Services.AddScoped();

builder.Services.AddElmah(options =>
{
options.ConnectionString = connString;
options.SqlServerDatabaseTableName = "Elmah_Error"; //Defaults to ELMAH_Error if not set
options.OnPermissionCheck = context => false;
});

builder.Services.AddControllers();
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}

app.UseHttpsRedirection();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

LoginController.cs файл:
[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class LoginController : ControllerBase
{
private readonly SignInManager _signInManager;
private readonly UserManager _userManager;
private readonly RoleManager _roleManager;
private readonly IConfiguration _configuration;

public LoginController(
SignInManager signInManager,
UserManager userManager,
RoleManager roleManager,
IConfiguration configuration)
{
_signInManager = signInManager;
_userManager = userManager;
_roleManager = roleManager;
_configuration = configuration;
}

[HttpPost]
public async Task Login([FromBody] Login model)
{
var user = await _userManager.FindByNameAsync(model.Username);

if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
{
// var userRoles = await _userManager.GetRolesAsync(user);
var authClaims = new List
{
new Claim(ClaimTypes.Name, user.UserName.Trim()),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
};

// authClaims.Add(new Claim("UserId", user.Id));
var token = GetToken(authClaims);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token),
expiration = token.ValidTo,
Id = user.Id.Trim(),
});
}

return Unauthorized();
}

private JwtSecurityToken GetToken(List authClaims)
{
var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(s: _configuration["Jwt:Key"]));

var token = new JwtSecurityToken(
issuer: _configuration["Jwt:ValidIssuer"],
audience: _configuration["Jwt:ValidAudience"],
expires: DateTime.Now.AddYears(30),
claims: authClaims,
signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256)
);

return token;
}
}

FSMUserStore.cs файл:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using PortalDataModels.Models;
using System.Data.Common;
using System.Data.SqlClient;

namespace Portal.Libraries
{
public class FSMUserStore : IUserStore, IUserPasswordStore
{
private bool disposedValue;
private POA_CSMContext _ctx;

public FSMUserStore(POA_CSMContext ctx)
{
_ctx = ctx; //

Вернуться в «C#»