2016-02-05 74 views
1

我们正在使用ASP.NET Core重写我们的应用程序之一。我们尝试的架构有一个Web API在演示文稿的另一个URL上运行。当然,这个API的根URL会在不同的环境中发生变化,所以我想知道如何设置配置并访问JavaScript中需要检索数据的Web API根URL。例如,假设我有一个AJAX调用从API获取一些数据:在.NET Core web应用程序中访问客户端上的应用程序范围设置的策略

$.ajax({ 
    dataType: "json", 
    url: "http://this.url.will.change/api/whatever", //this will change! 
    success: function(response) { 
     //load the items 
    } 
}); 

我已经建立了appsettings.json文件不同的生成/部署方案,并让他们阅读并很好地注入,这样我就可以存储网址。

{ 
    "Data": { 
     "DefaultConnection": { 
      "ConnectionString": "whatever" 
     } 
    }, 
    "AppSettings": { 
     "ApiRootUrl": "http://apiroot/api/" 
    } 
} 

我考虑写一个UrlHelper扩展,提供网络API根,但我不认为有一种方式来注入IOptions对象转变成静态扩展方法。所以,我的问题真的是这样的:我如何在CSHTML和JavaScript中进行全局配置设置?

回答

0

更新您的Startup.cs像下面

public class Startup { 
    public IConfigurationRoot Configuration { get; set; } 

    public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) { 
     IConfigurationBuilder builder = new ConfigurationBuilder() 
      .SetBasePath(appEnv.ApplicationBasePath) 
      .AddJsonFile("appsettings.json"); 

     Configuration = builder.Build(); 
    } 

    public void ConfigureServices(IServiceCollection services) { 
     services.AddSingleton(_ => Configuration); 
    } 
} 

那么你的控制器上,你可以这样

public class ConfigurationController : Controller { 
    private readonly IConfigurationRoot config; 

    public ConfigurationController (IConfigurationRoot config) { 
     this.config = config; 
    } 

    public string Test() { 
     return config.Get<string>("AppSettings:ApiRootUrl"); 
    } 
} 
0

我们用来创建负责创建一个特殊的配置控制器配置注入一个来自选定配置设置的动态JavaScript文件。您可以将IOptions注入控制器。然后从选项中可以构建一个新的自定义配置对象,该对象将仅保存要公开的属性(您可能不希望将任何连接字符串公开给您的数据库)。 使用JSON库(如json.net)这个自定义配置对象序列化到一个JSON字符串,并创建文件的内容,它像

string fileContent = "var globalConf =" + JsonConvert.SerializeObject(configObject); 

将字符串转换为字节数组并返回它作为FileContentResult。 我们还设置了一些缓存标题,以便浏览器不会每次都打到控制器并使用缓存。

当然,您需要设置路由选择,调用特定的URL会触发您的控制器并返回您已经动态创建的JavaScript文件。您可以使用通常的脚本标记在网站上引用它。

至于服务器端渲染,您可以随时在模型中包含IOptions(或创建一个将包装选项和原始模型的新模型)

相关问题