使用WebApi 2.0的RouteAttribute时出现错误。
使用WebApi 2.0的RouteAttribute时出现错误。
这是我的Global.asax文件:
protected void Application_Start() { RegisterRoutes(); } private static void RegisterRoutes() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); GlobalConfiguration.Configure(x => x.MapHttpAttributeRoutes()); GlobalConfiguration.Configuration.EnsureInitialized(); }
这是我的Web Api控制器:
[RoutePrefix("api/admin/users/")] public class UsersController : ApiController { [Route("get")] public IQueryableGetUsers() { return db.Users; } }
当我访问localhost:123/api/admin/users/get时,我遇到了以下错误:
该对象尚未初始化。请确保在应用程序的启动代码中,所有其他初始化代码之后调用HttpConfiguration.EnsureInitialized()。
我不知道我在这里做错了什么。我相信我按照新的WebApi 2.0的方式做了一切正确的事情,但我漏掉了某些东西。
提前感谢您的帮助。
更新
以下是栈信息,以防有帮助:
at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) at System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)
(Error with WebApi 2.0 RouteAttribute)这个问题出现的原因是因为在Global.asax中调用了GlobalConfiguration.Configure(x => x.MapHttpAttributeRoutes());
方法。解决方法是将该方法从Global.asax中移除,并在WebApiConfig.cs文件中调用MapHttpAttributeRoutes
方法。
具体的解决方法是,在WebApiConfig.cs文件中添加如下代码:
public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); }
这样做可以解决该问题。不确定为什么需要在WebApiConfig.cs中调用该方法,可能是一种约定。无论是什么Config.cs文件的名称,都可能与此有关。可能与这个回答有关:链接,基本上是在调用GlobalConfiguration.Configure之前必须先映射路由。