Подтвердить что ты не робот

Почему я получаю InvalidOperationException при попытке использовать маршрутизацию атрибутов с помощью Web API 2?

Я просто обновил свои пакеты веб-API в своем приложении MVC 4, чтобы я мог использовать маршрутизацию атрибутов. Когда я добавляю config.MapHttpAttributeRoutes(), я получаю сообщение об ошибке " Объект еще не инициализирован. Убедитесь, что HttpConfiguration.EnsureInitialized() вызывается в стартовом коде приложения после всего другого кода инициализации." Если Я удаляю config.MapHttpAttributeRoutes() и атрибуты Route, все работает так, как раньше. Как я могу устранить эту ошибку?

Вот мой класс WebApiConfig:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );



            // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
            // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
            // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.
            //config.EnableQuerySupport();
        }
    }

И сведения об ошибке:

Объект еще не инициализирован. Убедитесь, что HttpConfiguration.EnsureInitialized() вызывается в стартовом коде приложения после всего другого кода инициализации.

Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.InvalidOperationException: объект еще не инициализирован. Убедитесь, что HttpConfiguration.EnsureInitialized() вызывается в стартовом коде приложения после всего другого кода инициализации.

Ошибка источника:

Необработанное исключение было создано во время выполнения текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием трассы стека исключений ниже.

Трассировка стека:

[InvalidOperationException: The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application startup code after all other initialization code.]
   System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() +127
   System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) +99
   System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) +191
   System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext) +233
   System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +60
   System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +82
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
4b9b3361

Ответ 1

В Global.asax событие Application_Start должно измениться с

WebApiConfig.Register(GlobalConfiguration.Configuration);

в

GlobalConfiguration.Configure(WebApiConfig.Register);

Ответ 2

Прокомментируйте или удалите эту строку кода в WebApiConfig:

config.MapHttpAttributeRoutes();