A "direct route" AND "The object has not yet been initialized" errors, WebAPI 一个“直接路线”和“对象尚未初始化”错误,WebAPI
A "direct route" AND "The object has not yet been initialized" errors, WebAPI 一个“直接路线”和“对象尚未初始化”错误,WebAPI
我在Visual Studio 2013上有一个Web Api项目。
突然间,我开始收到这个错误,而没有做任何更改:
直接路由不能使用参数'controller'。请在此参数的位置上指定一个字面路径,以创建到控制器的路由。
> 第12行:protected void Application_Start() > 第13行:{ > 第14行:GlobalConfiguration.Configure(WebApiConfig.Register); > 第15行:GlobalConfiguration.Configuration.IncludeErrorDetailPolicy IncludeErrorDetailPolicy.Always; > 第16行:GlobalConfiguration.Configuration.EnsureInitialized();
当我刷新页面时,我会收到另一个错误:
{ "message": "发生了错误。", "exceptionMessage": "对象尚未初始化。请确保在所有其他初始化代码之后,在应用程序的启动代码中调用HttpConfiguration.EnsureInitialized()。", "exceptionType":
"System.InvalidOperationException", "stackTrace": " at
System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\r\n at
System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String
virtualPathRoot, HttpRequestMessage request)\r\n at
System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase
httpContext)" }
这是我的WebApiConfig:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
我的Global.asax.cs:
protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; GlobalConfiguration.Configuration.EnsureInitialized(); }
这是我的Test Controller上的测试函数:
public string Get(int id) { return "value"; }
请指导,任何帮助将不胜感激。
在使用WebAPI时,有些开发者可能会遇到"A 'direct route' AND 'The object has not yet been initialized' errors"这个错误。下面是一个解决这个问题的方法:
首先,注释掉WebApiConfig文件中的以下代码:
// config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "{controller}/{id}", // defaults: new { id = RouteParameter.Optional } //);
然后,确保在控制器上设置了路由属性,如下所示:
[RoutePrefix("api/test")] public class TestController : ApiController { [Route("{id}")] public string Get(int id) { return "value"; } }
接下来,可以通过以下方式调用API:
http://myapiurl/api/test/1
或者将routeTemplate设置为:
routeTemplate: "api/{controller}/{id}"
在处理WebAPI的路由时,有很多方法可以实现相同的功能,但我更喜欢使用属性约定,尤其是在故障排除时。明确路由可以帮助我找出许多问题,特别是当控制器变得很大时。
可能是有些改动导致了这些错误的出现。通过搜索错误信息,我发现可能由于多种问题导致,你可能需要逐个排除这些问题:[stackoverflow.com/questions/19969228/...](http://stackoverflow.com/questions/19969228)
你是对的,我尝试了所有我找到的解决方法,但都没有帮助!
最后,我重新创建了项目...问题解决了!
嗯,典型的VS。你应该回答自己的问题,并详细说明你做了什么,并将其标记为正确 🙂