2016-01-08 3 views
2

Я попробовал решение, описанное в этой статье здесь: Original articleOData с никаких действий метаданных не работают

Как описано я сделал:

var defaultConventions = ODataRoutingConventions.CreateDefault(); 
var conventions = defaultConventions.Except(
     defaultConventions.OfType<MetadataRoutingConvention>()); 
config.MapODataServiceRoute(
     routeName: "ODataRoute", 
     routePrefix: null, 
     model: model, 
     pathHandler: new DefaultODataPathHandler(), 
     routingConventions: conventions); 

Все работало нормально, не больше информации метаданных. Стандартная работа запроса Хорошо, но несвязанные действия и функции больше не работают, я получаю ответ 404.

зарегистрировать действия в OData модели строителя, как:

var validateEmailAction = builder.Action("ValidateEmail"); 
     validateEmailAction.Parameter<string>("Email"); 

И в контроллере я есть:

[HttpPost] 
[ODataRoute("ValidateEmail")] 
public async Task<IHttpActionResult> ValidateEmail(ODataActionParameters parameters) 
{ 
} 

Любые предложения, как я могу достичь прячась Odatametada но до сих пор действия/функции работают?

+0

Вы пропустили пространство имен в URL-адресе или забыли включить EnableUnqualifiedNameCall? –

ответ

3

ODataRoutingConventions.CreateDefault()

создаст список конвенций маршрутизации без маршрутизации атрибута.

В то время как для несвязанных действий и функций требуется маршрутизация атрибутов.

Таким образом, вы должны измениться, чтобы позвонить:

ODataRoutingConventions.CreateDefaultWithAttributeRouting(); 
+0

Спасибо. Это сработало. –

0

, как упоминалось выше, он работает с использованием по умолчанию с атрибутом маршрутизации, но он также нуждается в конфигурации и EDM модель атрибутов.

var edmModel = builder.GetEdmModel(); 
var defaultConventions =ODataRoutingConventions.CreateDefaultWithAttributeRouting(config,edmModel); 
var conventions = defaultConventions.Except(defaultConventions.OfType<MetadataRoutingConvention>()); 
     var route = config.MapODataServiceRoute(
      "odata", 
      null, 
      edmModel, 
      pathHandler: new DefaultODataPathHandler(), 
      routingConventions: conventions); 
Смежные вопросы