Маршрутизация веб-API в Sitecore 8.2

Я перенес приложение sitecore 7.2 на sitecore 8.2 с помощью инструмента экспресс-миграции. После миграции перестала работать маршрутизация Web API. Я использую приведенный ниже метод для сопоставления маршрутизации

 [UsedImplicitly]
        public class ConfigRegister
        {
            /// <summary>
            /// Startup method to bind all configurations for site core pipeline.
            /// </summary>
            /// <param name="args"></param>
            public virtual void Process(PipelineArgs args)
            { RouteConfig.RegisterRoutes(RouteTable.Routes);
     }
        }

Затем зарегистрируйте его, используя следующий фрагмент кода

public static void Register(HttpConfiguration config)
        {
         config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "ControllersApi",
                routeTemplate: "WebApi/CustomerPortal/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

Я получаю сообщение об ошибке Маршрут с именем «MS_attributerouteWebApi» уже находится в коллекции маршрутов. Имена маршрутов должны быть уникальными. Имя параметра: имя.

Но когда я комментирую строку

config.MapHttpAttributeRoutes();

Я получаю сообщение об ошибке {"Message":"Произошла ошибка.","ExceptionMessage":"Объект еще не инициализирован. Убедитесь, что HttpConfiguration.EnsureInitialized() вызывается в коде запуска приложения после всего остального кода инициализации .","ExceptionType":"System.InvalidOperationException","StackTrace":" в System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\r\n в System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, запрос HttpRequestMessage)\r\n в System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)"}

Ваша помощь в решении этой проблемы высоко ценится


person Newbie    schedule 29.11.2017    source источник
comment
Я добавил HttpConfiguration.EnsureInitialized(); в global.asax, но не решил проблему   -  person Newbie    schedule 29.11.2017
comment
Используете ли вы маршрутизацию атрибутов или обычную маршрутизацию для своего API?   -  person Ahmed Okour    schedule 01.12.2017
comment
@Newbie Привет, ты решил эту проблему? Если да, то можете ли вы сообщить мне, как? Потому что я получаю ту же проблему   -  person bala3569    schedule 08.02.2018
comment
Что вы в конечном итоге делаете, чтобы решить эту проблему?   -  person tidmutt    schedule 22.04.2019


Ответы (1)


Я предполагаю, что у вас есть это в конвейере инициализации, верно?

Это то, что мы делали раньше и работает на 8.2:

    public void Process(PipelineArgs args)
    {
        HttpConfiguration httpConfig = GlobalConfiguration.Configuration;
        httpConfig.Routes.MapHttpSessionRoute("WebApiRoute", "webapi/{controller}/{action}/{id}", true, new { id = RouteParameter.Optional });          
    }

Если вышеуказанное не работает, попробуйте это (для среды обитания):

public void Process(PipelineArgs args)
{
     RouteTable.Routes.MapHttpRoute("Feature.Demo.Api", "api/demo/{action}", new
        {
           controller = "Demo"
        });
}
person Marco    schedule 29.11.2017
comment
Привет, Марко, да. Он находится в конвейере инициализации. Я попробовал ваш фрагмент кода с пространством имен System.Web.Http, но httpConfig.Route не имеет определения для MapHttpSessionRoute. В качестве альтернативы я пробовал httpConfig.Routes.MapHttpRoute, но не работал - person Newbie; 30.11.2017
comment
Я обновил свой ответ, включив в него образец из среды обитания. - person Marco; 04.12.2017