如何从 Startup.cs 的 InjectsAuthElements 方法中的配置中获取连接字符串

Posted

技术标签:

【中文标题】如何从 Startup.cs 的 InjectsAuthElements 方法中的配置中获取连接字符串【英文标题】:How can I get the connection string from configuration in the InjectsAuthElements methods in Startup.cs 【发布时间】:2021-09-19 17:59:26 【问题描述】:

我正在尝试使用 sql server 配置 elmah。 我看到的配置就是这种形式

public class Startup

    public void ConfigureServices(IServiceCollection services)
    
        ...
    
    private static void InjectsAuthElements(IServiceCollection services)
    
        ...
        services.AddElmah<SqlErrorLog>(options =>
        
            options.Path = "ElmahNewNameForSecurity.axd";
            options.OnPermissionCheck = context => context.User.Identity.IsAuthenticated && context.User.IsInRole("Admin");
            options.ConnectionString = "MyConnectionString";
        );
    

我想将 MyConnectionString 替换为 Configuration.GetConnectionString("Default")

【问题讨论】:

您能否添加更多代码来显示InjectsAuthElements 方法的位置?我的意思是,它是在Startup.cs 中还是在不同的文件中? 是的,它在 Startup.cs 中。我编辑了我的问题。 是否可以在方法中添加IConfiguration接口作为第二个参数,并在调用方法时传递Configuration 是的,它确实有效。您能否将您的评论作为答案,以便我可以将问题标记为已解决? 【参考方案1】:

只需在方法中添加一个IConfiguration 接口作为第二个参数,并在调用该方法时传递Configuration

private static void InjectsAuthElements(
    IServiceCollection services,
    IConfiguration configuration)

    ...
    services.AddElmah<SqlErrorLog>(options =>
    
        options.Path = "ElmahNewNameForSecurity.axd";
        options.OnPermissionCheck = context => context.User.Identity.IsAuthenticated && context.User.IsInRole("Admin");
        options.ConnectionString = "MyConnectionString";
    );

【讨论】:

【参考方案2】:

要获取连接字符串,可以使用IConfiguration

public class Startup

  private readonly IConfiguration _configuration;
  public Startup(IConfiguration configuration)
  
        _configuration = configuration; 
  

  public void ConfigureServices(IServiceCollection services)
  
    ...
  

  private static void InjectsAuthElements(IServiceCollection services)
  
    ...
    services.AddElmah<SqlErrorLog>(options =>
    
        options.Path = "ElmahNewNameForSecurity.axd";
        options.OnPermissionCheck = context => 
        context.User.Identity.IsAuthenticated && 
        context.User.IsInRole("Admin");
        options.ConnectionString = 
               _configuration.GetConnectionString("MyConnectionString");
        );
     
   

【讨论】:

以上是关于如何从 Startup.cs 的 InjectsAuthElements 方法中的配置中获取连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Startup.cs 的 InjectsAuthElements 方法中的配置中获取连接字符串

如何更新 startup.cs 中的服务顶部使用 ITableEntity 和 TableClient 作为 dotnet3.1 中的服务

在 Startup.cs 中初始化 Blob 存储

ASP .NET MVC 5 中使用的 Startup.Auth.cs 和 Startup.cs 是啥?

如何在 .NET 5 隔离进程中使用 Azure Functions v3 时添加以前在 Startup.cs 中的代码->配置方法

在 Startup.cs 中使 ConfigureServices 方法异步