WebApi 2 - 在启动时检查 web.config 值

WebApi 2 - Check for web.config values on startup

我有兴趣为我的 API 构建启动例程,以检查 web.config 中是否存在某些配置值。如果例程不包含我想重定向到路由的值,请记录缺少的配置项并显示自定义应用程序离线页面。

如能为我指明正确的方向,我们将不胜感激。

后卫Class

public static class Guard
{
    public static bool ConfigurationValueExists(string key, [CallerMemberName] string caller = null)
    {
        if (!string.IsNullOrEmpty(Configuration.GetAppConfig(key, string.Empty))) return true;

        ApiLogger.Log($"The configuration value {key} is not present and needs to be defined. Calling method is {caller}.");
        return false;
    }
}

配置Class

public static class Configuration
{
    public static T GetAppConfig<T>(string key, T defaultVal = default(T))
    {
        if (null == ConfigurationManager.AppSettings[key])
        {
            return defaultVal;
        }

        return string.IsNullOrEmpty(key)
            ? defaultVal
            : Generic.Turn(ConfigurationManager.AppSettings[key], defaultVal);
    }

    public static bool ConfigurationsAreInPlace()
    {
        return AssertMainApplicationConfiguration();
    }

    private static bool AssertMainApplicationConfiguration()
    {
        return Guard.ConfigurationValueExists("MyKey1");
    }
}

我希望能够在启动例程中调用 ConfigurationsAreInPlace 并重定向到我的自定义离线页面。

我决定创建一个索引控制器并使用 root 的路由属性来覆盖页面上发生的事情。然后我检查配置是否到位并根据需要发出新的响应。 感兴趣的代码:

public class IndexController : ApiController
{
    [AllowAnonymous]
    [Route]
    public HttpResponseMessage GetIndex()
    {
        string startUrl = "/help/";
        if (!Helpers.Configuration.ConfigurationsAreInPlace())
        {
            startUrl += "offline";
        }
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Moved);
        string fullyQualifiedUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority);
        response.Headers.Location = new Uri(fullyQualifiedUrl + startUrl);
        return response;
    }
}