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

时间:2015-08-05 01:48:23

标签: c# asp.net-web-api web-config asp.net-web-api2

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

任何协助我指出正确的方向都将受到赞赏。

Guard 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;
    }
}

配置类

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并重定向到我的自定义离线页面。

1 个答案:

答案 0 :(得分:0)

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

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;
    }
}