【问题标题】:What is GlobalConfiguration.Configuration.EnsureInitialized() in Global.asax ASP.Net Web API什么是 Global.asax ASP.Net Web API 中的 GlobalConfiguration.Configuration.EnsureInitialized()
【发布时间】:2016-10-12 16:01:23
【问题描述】:

在我的WebApi项目下,不知道这行是什么 GlobalConfiguration.Configuration.EnsureInitialized() 正在 Global.asax Application_Start() 方法中进行操作。没有这个,即使一切都很好。那为什么要这样做?

有必要在这里吗?如果是,那为什么?谁能解释一下 详细的需求和目的

protected void Application_Start()
{   
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);

    ////////////      What is this for   ////////////////
    GlobalConfiguration.Configuration.EnsureInitialized();
}

NOT A DUPLICATE : 在堆栈溢出中很多人建议使用EnsureInitialized()。但是为什么要使用它呢?它来自哪里?它是 webApi2 的一部分还是其他东西?这些都是我想知道的。 MSDN 本身对此没有任何解释。

【问题讨论】:

标签: .net asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-web-api2


【解决方案1】:

MSDN:

HttpConfiguration.EnsureInitialized 方法

调用初始化器钩子。从现在开始,它被认为是不可变的。多次调用它是安全的。

更多信息

正如this answer 指出的那样,这可能是由于 Web API 在 Web API v1 和 Web API v2 中的注册方式发生了变化而被放入您的应用程序中的。

升级 Web API 后未进行更改的任何人都会收到错误消息:

对象尚未初始化。确保在所有其他初始化代码之后在应用程序的启动代码中调用 HttpConfiguration.EnsureInitialized()

很遗憾,错误消息中给出的解决方案具有误导性。你是actually supposed to change while upgrading from V1 就是替换这一行:

WebApiConfig.Register(GlobalConfiguration.Configuration);

用这一行:

GlobalConfiguration.Configure(WebApiConfig.Register);

后一种方法在内部调用EnsureInitialized,因此您不必从启动代码中调用。

我注意到您的配置中没有这些 Web Api 初始化程序,因此我建议您按如下方式更改您的启动:

protected void Application_Start()
{   
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    GlobalConfiguration.Configure(WebApiConfig.Register);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多