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

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

Сообщение Anonymous »

Я использую .NET 10 с самыми последними обновлениями для всего. Я в ЭФ. Я ASP.NET Core. Ниже приведен мой файл program.cs. Внутри файла program.cs, когда я звоню, чтобы получить строку подключения, я получаю то, что ожидал. Когда я нажимаю LoginController, я вижу настройки в IConfiguration, которые были переданы. Однако, когда я устанавливаю точку останова в конструкторе 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#»