2016-11-10 3 views
1

Следующая конфигурация OData выдает сообщение об ошибке: «... Ресурс не найден для сегмента ...».OData v4 Ресурс не найден для сегмента

И контроллер:

public class GlobalController : CompanyController 
{ 
    [HttpGet] 
    [ODataRoute("Company.Functions.GlobalStats")] 
    public async Task<IHttpActionResult> GetGlobalStats() 
    { 
     var stats = await Company.GlobalStats.GetAsync(); 
     return Ok(stats); 
    } 
} 

Идея заключается в том, чтобы иметь конечную точку вроде следующего:

http://api.company.com/odata/Company.Functions.GlobalStats

Пожалуйста, помогите мне выяснить, что мне не хватает в этой конфигурации ,

EDIT # 1

Я также попытался регистрации GlobalStats как ComplexType. Еще не повезло.

РЕДАКТИРОВАТЬ # 2

Ниже приводится точное сообщение об ошибке:

Исключение типа 'System.InvalidOperationException' произошло в System.Web.OData.dll , но не был обрабатывается в коде пользователя.

Дополнительная информация: шаблон пути «Company.Functions.GlobalStats» на акции «GetGlobalStats» в контроллера «Global» не шаблон действует OData путь. Ресурс не найден для сегмента 'Company.Functions.GlobalStats'.

+0

Вы хотите, чтобы вы называли это пространством имен? – TomDoesCode

+0

@TomDoesCode Да, это чище, я думаю, хотя, если по какой-то неясной причине я не могу заставить его работать с пространством имен, ну тогда уже нет выбора. – Unlimited071

+0

Я собираюсь попробовать еще раз, чтобы заставить его работать с пространством имен, но чтобы заставить его работать без пространства имен, но в то же время вы должны просто удалить 'Company.Functions.' из параметра для' ODataRoute 'и' Functions.' из параметра для вызова функции Function, чтобы заставить его работать без пространства имен. – TomDoesCode

ответ

0
  1. Определение несвязанный функции:

    modelBuilder.Function("Company.Functions.GlobalStats").Returns<GlobalStats>(); 
    
  2. Карта ваш OData маршрут:

    config.MapODataServiceRoute("ODataRoute", "odata", model); 
    
  3. Определение атрибута маршрута для метода в контроллере:

    [HttpGet] 
    [ODataRoute("Company.Functions.GlobalStats")] 
    public async Task<IHttpActionResult> GetGlobalStats() 
    { 
        // your code 
    } 
    
  4. Назовите это с http://host/odata/Company.Functions.GlobalStats

+0

Спасибо, но это работает, если пространство имен не определено «глобально», что я делаю. – Unlimited071

0

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

+0

Я не уверен, что вы имеете в виду.Не могли бы вы объяснить это кодом? Я понимаю, что нужно удалить «Function.GlobalStats» и оставить его только «GlobalStats». Если это так, то я уже пробовал, и это не сработало – Unlimited071

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