3

Я пытался получить WebApi работы с Sitecore 7,5 (я был в состоянии получить тот же код, работающий с 7.2) я оставил в конфигурации ссылка на MVC 5.1 и Я получаю следующее исключение при попытке получить доступ к маршрут, проложенный с атрибутом:MVC инструментарий и атрибут WebAPI маршрутизации для Sitecore 7,5

[RoutePrefix("test/api/Other")] 
[Route("{action=Get}")] 
public class OtherController : ApiController 
{ 
    [HttpGet] 
    public string GetId() 
    { 
     return "test"; 
    } 
} 

сообщение: «произошла ошибка.», ExceptionMessage: «Вал ue не может быть null. Имя параметра: ключ "ExceptionType: "System.ArgumentNullException", StackTrace:" в System.Collections.Generic.Dictionary 2.FindEntry(TKey key) at System.Collections.Generic.Dictionary 2.TryGetValue (ключ TKey, TValue & значение) в Sitecore.Services.Infrastructure.Web. Http.Dispatcher.NamespaceHttpControllerSelector.SelectController (HttpRequestMessage запрос) в System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore (HttpRequestMessage запроса, CancellationToken CancellationToken) при System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext() "

Код, который я имею в запуске приложения заключается в следующем:

protected void Application_Start(object sender, EventArgs e) 
{ 
    GlobalConfiguration.Configure(ConfigureRoutes); 
} 

public static void ConfigureRoutes(HttpConfiguration config) 
{ 
    GlobalConfiguration.Configuration.MapHttpAttributeRoutes(); 
    GlobalConfiguration.Configuration.Formatters.Clear(); 
    GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter()); 
} 

любая помощь будет оценена ....

+0

Вы добавили префикс маршрута («test/api» в этом случае) к настройке IgnoreUrlPrefixes в Sitecore? – PizzaTheHut

+0

Да, я только что попробовал добавить префикс маршрута к IngnoreUrlPrefix, и он все еще не работает ... Самое забавное, что тот же код работает в чистом 7.2 экземпляре, я думаю, что новый DI Sitecore. Services.Infrastructure.Web.Http.Dispatcher.NamespaceHttpControllerSelector.SelectController получает ошибку ссылки объекта – Stelio

+0

Я думаю, что проблема заключается в маршрутизации атрибута, где происходит получение и ссылка на объект, единственный способ заставить его работать, не использовать маршрутизацию атрибутов, а классическую маршрутизацию, я говорю об этом в этом post: http://sitecorecommerce.wordpress.com/2014/11/30/webapi-attribute-routing-is-not-working-with-sitecore-7-5/ – Stelio

ответ

0

Начиная с Sitecore 7.5 они заменяют по умолчанию IHttpControllerSelector с их собственным NamespaceHttpControllerSelector который Безразлично 't Поддержка маршрутизации атрибутов.

Однако это можно обойти. Вы должны создать свой собственный вариант NamespaceHttpControllerSelector и пропатчить его в initialize трубопровод после этого один:

Sitecore.Services.Infrastructure.Sitecore.Pipelines.ServicesWebApiInitializer, Sitecore.Services.Infrastructure.Sitecore 

я создал как пакет Sitecore и пакет NuGet сделать это в зависимости от того, что вы предпочитаете, и что ваши потребности находятся.

Пакет "Custom" создает код в ваше решение, так что вы можете редактировать его самостоятельно, если у вас есть особые потребности. Пакет Sitecore и стандартный пакет NuGet просто сбрасывают мою сборку в папке bin и создают файл конфигурации в App_Config\Include, который исправляет конвейер initialize.

Если вы хотите взглянуть на код или прочитать дополнительную информацию о проблеме, обратитесь к my GitHub repository.

Смежные вопросы