Mal*_*lil 7 .net asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-web-api2
在我的WebApi项目下,我不知道这行在
Global.asax方法中GlobalConfiguration.Configuration.EnsureInitialized()做了什么.如果没有这个,即使每件事都很好.那么为什么这样呢? Application_Start()
有必要来这儿吗?如果是,那为什么呢?任何人都可以详细解释其需要和目的.
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
//////////// What is this for ////////////////
GlobalConfiguration.Configuration.EnsureInitialized();
}
Run Code Online (Sandbox Code Playgroud)
不是重复:堆栈溢出很多人建议使用
EnsureInitialized().但为什么要使用它?它来自哪里?它是webApi2的一部分还是其他什么?这些是我想知道的事情.MSDN本身没有解释.
每个MSDN:
HttpConfiguration.EnsureInitialized方法
调用Intializer挂钩。从现在开始,它被认为是不变的。多次调用是安全的。
正如该答案所指出的,由于更改了Web API v1与Web API v2中应该注册Web API的方式,因此可能将其放入您的应用程序中。
升级Web API后未进行任何更改的任何人都将收到错误消息:
该对象尚未初始化。确保在所有其他初始化代码之后,在应用程序的启动代码中调用HttpConfiguration.EnsureInitialized()。
不幸的是,错误消息中给出的解决方案具有误导性。你所真正应该改变,而从V1升级是替代这一行:
WebApiConfig.Register(GlobalConfiguration.Configuration);
Run Code Online (Sandbox Code Playgroud)
用这一行:
GlobalConfiguration.Configure(WebApiConfig.Register);
Run Code Online (Sandbox Code Playgroud)
后一种方法在内部调用,EnsureInitialized因此您不必从启动代码开始。
我注意到您的配置中没有这两个Web Api初始化程序,因此我建议您按以下方式更改启动方式:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |