首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Asp.NET Core 3.1启动类访问launchSettings.json中的`applicationUrl`属性?

如何从Asp.NET Core 3.1启动类访问launchSettings.json中的`applicationUrl`属性?
EN

Stack Overflow用户
提问于 2019-12-19 02:53:32
回答 4查看 8.7K关注 0票数 10

我目前正在创建一个Asp.NET Core3.1API应用程序。在它里面,我有一个launchSettings.json如下所示:

代码语言:javascript
复制
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:61392",
      "sslPort": 44308
    }
  },
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "environmentVariables": {
        "Key": "Value",
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Application.API": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
  }
}

特别是,我有兴趣获得applicationUrl此文件中定义的值。不幸的是,除了通过JSON序列化直接加载文件并探测其中的值之外,我没有看到任何明显的方法来访问它们。

因此,我正在寻找一个更优雅的解决方案。有没有办法从Startup.Configure

和/或Startup.ConfigureServices方法?

我在想这样的事情:

代码语言:javascript
复制
public void Configure(IApplicationBuilder builder)
{
    var url = builder.ApplicationServices.GetRequiredService().ApplicationUrl
}

作为参考,我确实看到了this question,但这似乎需要HTTP请求。在我的例子中,在发出请求之前,我仍然在配置服务器。

对于进一步参考资料和上下文:我正在构建一个.NET GitHub应用程序,并且正在制作相应的Smee.io客户端,它的Javascript代码can be found here.。

客户端使用一个source(通过服务器发送的事件)并将其发送到target。我拿到了source已经弄清楚并配置好了,但讽刺的是,我在访问和建立targetURL (applicationUrl如上图所示)以一种明显且配置好的方式。

最后,我意识到我可以将值硬编码到appSettings.json,但这意味着我将在两个地方保持相同的值--一个在appSettings.json和一个在已经存在的launchSettings.json。如果可能的话,我宁愿把它放在一个地方,以减轻维护负担。

EN

回答 4

Stack Overflow用户

发布于 2020-03-02 21:22:39

实际上,我自己最近也在寻找类似的东西。

事实证明,您可以通过查看环境变量来确定Visual Studio在调试会话期间(从launchSettings.json中的applicationUrl )传递给应用程序的URL。

尽管请记住,这可能只对使用launchSettings.json文件的VStudio集成开发环境中的调试有用

代码语言:javascript
复制
var urls = Environment.GetEnvironmentVariable("ASPNETCORE_URLS").Split(";");
票数 4
EN

Stack Overflow用户

发布于 2019-12-19 03:44:32

我还没有测试过它,但是我使用这个模式来访问appsettings.json。

在startup.cs中,将launchsettings.json添加到配置构建器:

代码语言:javascript
复制
public Startup(IConfiguration configuration)
    {
        var builder = new ConfigurationBuilder().AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), "Properties", "launchSettings.json"));
        Configuration = builder.Build();
    }

public IConfiguration Configuration { get; }

将其添加为服务:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton  (Configuration);
}

将其注入控制器并获取键值:

代码语言:javascript
复制
public class SomeController: ControllerBase {  
    private IConfiguration _iconfiguration;  
    public SomeController(IConfiguration iconfiguration) {  
        _iconfiguration = iconfiguration;  
    }
void SomeMethod(){
string appUrl = _iConfiguration.GetValue("applicationUrl","someDefaultValue")

}}

希望这能帮到你!

票数 3
EN

Stack Overflow用户

发布于 2019-12-19 03:36:29

在您的Startup构造函数,您可以获得一个IConfiguration从依赖注入。这样,您就可以访问appsettings.json通过使用如下配置:

代码语言:javascript
复制
var appUrl = _configuration["profiles:applicationUrl"];

如果您要访问appsettings.json您可以使用IConfiguration.Bind()方法将配置json中的所有属性绑定到一个类实例。例如,您将拥有:

代码语言:javascript
复制
public class Config
{
   public Profile Profiles { get; set; }
}
public class Profile
{
   public string ApplicationUrl { get; set; }
}

然后在ConfigureServices

代码语言:javascript
复制
var config = new Config();
_configuration.Bind(config);

然后,如果您将配置注册到serviceprovider中,则可以通过DI在任何地方访问您的配置:

代码语言:javascript
复制
services.AddSingleton(config);

编辑

要添加默认appsettings.json以外的json文件,请调用ConfigureAppConfiguration()之后在IWebHostBuilder上CreateDefaultBuilderProgram.cs记录如下。

Link to File Configuration Docs

在回调参数中,您可以将任意多个json、xml、ini文件添加到配置中,然后使用上面的答案从所有文件中获取任何值。请注意,如果存在两个相同的键,则将使用该键的最后一个值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59398439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档