使用WebApi 2.0的RouteAttribute时出现错误。

26 浏览
0 Comments

使用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 IQueryable GetUsers()
        {
            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)

0
0 Comments

在我的案例中,我遇到了这个错误,因为我在配置Autofac之前配置了WebApi:

GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configure(AutofacConfig.Register);

改变顺序后,我成功解决了这个问题:

GlobalConfiguration.Configure(AutofacConfig.Register);
GlobalConfiguration.Configure(WebApiConfig.Register);

0
0 Comments

(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之前必须先映射路由。

0