2016-11-10 3 views
0

Я повторно использую службу WCF, и я предпочитаю использовать WebAPI 2.2 + OData v4. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужен маршрут, который содержит «_», и я не могу его реализовать. В настоящее время у меня есть это:Как изменить маршрут в проекте WebApi + Odata

public class AnnotationSharedWithController : ODataController 
{ 
    ... 
    [EnableQuery] 
    public IQueryable<AnnotationSharedWith> Get() 
    { 
     return _unitOfWork.AnnotationSharedWith.Get(); 
    } 
    ... 
} 

и мои WebApiConfig.cs выглядит следующим образом:

public static void Register(HttpConfiguration config) 
{ 
    config.MapODataServiceRoute("webservice",null,GenerateEdmModel()); 
     config.Count(); 
} 

private static IEdmModel GenerateEdmModel() 
{ 
    var builder = new ODataConventionModelBuilder(); 
    builder.EntitySet<AnnotationSharedWith>("annotation_shared_with"); 
     return builder.GetEdmModel(); 
} 

Когда я выполняю GET запрос я получать следующее сообщение об ошибке

{ "Сообщение": " Ресурс HTTP не найден, который соответствует запросу URI 'http://localhost:12854/annotation_shared_with'. "," MessageDetail ": " Тип не найден, который соответствует контроллеру с именем 'annotation_shared_with'. " }

ответ

0

Вы можете использовать маршрутизацию атрибуты для достижения этой цели:

  1. Использования ODataRouteAttribute класса:

    public class AnnotationSharedWithController : ODataController 
    { 
        [EnableQuery] 
        [ODataRouteAttribute("annotation_shared_with")] 
        public IQueryable<AnnotationSharedWith> Get() 
        { 
         //your code 
        } 
    } 
    
  2. Использования ODataRoutePrefixAttribute и ODataRouteAttribute классов:

    [ODataRoutePrefixAttribute("annotation_shared_with")] 
    public class AnnotationSharedWithController : ODataController 
    { 
        [EnableQuery] 
        [ODataRouteAttribute("")] 
        public IQueryable<AnnotationSharedWith> Get() 
        { 
         //your code 
        } 
    } 
    
0

По умолчанию OData будет искать annotation_shared_withController, как определено в вашей модели EDM. Поскольку ваш контроллер имеет имя AnnotationSharedWithController, он вернет 404.

Отремонтировать ваш контроллер класс решит проблему. Но в конечном итоге вы столкнетесь с беспорядочными именами классов.

Вы можете реализовать свою собственные конвенции маршрутизации см Routing Conventions in ASP.NET Web API 2 Odata для более подробной информации

Надеется, что это помогает.

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

  • Нет связанных вопросов^_^