2016-11-15 2 views
3

OData v4 HttpConfiguration Методы расширения для меня отсутствуют. Вот мой метод Регистрация для Web API:WebApi OData HttpConfiguration Недопустимые методы расширения

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     // Use camel case for JSON data. 
     config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

     config.EnableCaseInsensitive(); 

     config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);    
     config.MapODataServiceRoute("odata", "api", OdataConfig.GetEdm()); 

     config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

    } 
} 

Такие методы, как EnableCaseInsensitive() и EnableEnumPrefixFree() полностью отсутствует System.Web.Odata (.Extensions).

Они присутствуют в documentation, и в source code для сборки, но при изучении сборки у меня есть, они утончаются отсутствует:

missing extensions screenshot

Я попытался повторно установите OData из Nuget несколько раз - я не могу найти кого-либо еще с этой проблемой. О готовности вытащить мои волосы. Есть идеи?

ответ

1

Aaaaand сразу после отправки здесь, я выясняю это. Уменьшив пакет Nuget до 5.9.1, я получаю недостающие части.

0

Я думаю, что снижение рейтинга не является хорошим решением: D

API-интерфейс был изменен на Dependency Injection: http://odata.github.io/WebApi/#13-04-DependencyInjection

Вы должны сделать следующее: (пример)

public static void Register(HttpConfiguration config) 
{ 
    // OData 
    config.Count().Filter().OrderBy().Expand().Select().MaxTop(null); 

    config.MapODataServiceRoute("odata", "odata", BuildRoute); 
} 

private static void BuildRoute(IContainerBuilder builder) 
{ 
    builder 
     .AddService(ServiceLifetime.Singleton, s => GetEdmModel()) 
     .AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, s => ODataRoutingConventions.CreateDefault()) 
     .AddService<ODataUriResolver>(ServiceLifetime.Singleton, s => new CaseInsensitiveODataUriResolver()); 
} 

Мой класс Resolver выглядит следующим образом:

public class CaseInsensitiveODataUriResolver : UnqualifiedODataUriResolver 
{ 
    public override bool EnableCaseInsensitive 
    { 
     get 
     { 
      return true; 
     } 

     set 
     { 
     } 
    } 
} 

Вы можете получить от ODataUriResolver, UnqualifiedODataUriResolver или StringAsEnumResolver.

Это не возможно, чтобы написать что-то вроде

s => new ODataUriResolver { EnableCaseInsensitive = true } 

Смотрите также https://github.com/OData/WebApi/issues/812 и https://github.com/OData/WebApi/issues/853

+0

Это лучший ответ, чем собственный самостоятельно принял ответ на ФП в. –

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

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