根据Web.config appSettings设置API URL

时间:2018-03-08 17:08:06

标签: c# .net angularjs api

因此,我已经继承了一个角色应用程序,它将API url定义为常量变量并且可以正常工作。然而,当我想要指向部署API,测试API和开发API时,我必须更改变量值,这有它的缺点。

有没有办法访问我的web.config文件来读取appSettings并返回API URL? (我已经使用XML转换应用了不同的API URL)。

我已经实现了一个从我的web项目访问API控制器并以这种方式返回值的解决方案,但我不确定这是否是正确的方法。

1 个答案:

答案 0 :(得分:1)

您可以将值从web.config序列化为JSON,并将它们添加到JavaScript可以读取和解析的<script type="application/json">元素中。

这是我能提出的最简单的例子。您可能希望更好地封装从服务器代码中编写此代码的方式以及如何从JavaScript中读取它(并提供更好的名称。)

首先,在您的web.config中,定义包含您要传递给JavaScript的键/值对的部分:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="jsConfigurationValues" 
          type="System.Configuration.NameValueSectionHandler" />
      </configSections>

      <jsConfigurationValues>
        <add key="someValue" value="a" />
        <add key="apiUrl" value="http://theurl" />
      </jsConfigurationValues>

      <!-- the rest of your web.config -->

    </configuration>

在Web表单的代码隐藏中就是这个函数。

protected string JavascriptConfigurationValues()
{
    var configurationValues =
        (NameValueCollection)ConfigurationManager.GetSection("jsConfigurationValues");
    var dictionary = new Dictionary<string, string>();
    foreach(var key in configurationValues.AllKeys) 
        dictionary.Add(key, configurationValues[key]);
    return JsonConvert.SerializeObject(dictionary);
}

在网络表单的标记中是这样的:

<script type="application/json" id="mySettings">
    <% =JavascriptConfigurationValues() %>
</script>

(您可以将部分或全部内容放在UserControl中或以其他方式封装。)

此脚本读取JSON并将其分配给变量:

var mySettings = JSON.parse(document.getElementById("mySettings").textContent);

现在可以访问:

var apiUrl = mySettings.apiUrl;