2016-11-15 73 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

我已經嘗試幾次重新安裝Nuget的OData - 我似乎無法找到任何其他人遇到此問題。準備好拔出我的頭髮。有任何想法嗎?

回答

1

Aaaaand在我張貼這裏後,我知道了。通過將Nuget包降級到5.9.1,我最終得到了缺失的部分。

0

我想降級是不是一個很好的解決方案:d

的API已經改變依賴注入: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()); 
} 

我的解析器類看起來如下:

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

     set 
     { 
     } 
    } 
} 

您可以從ODataUriResolver,UnqualifiedODataUriResolverStringAsEnumResolver派生。

這是不可能寫類似

s => new ODataUriResolver { EnableCaseInsensitive = true } 

請另見 https://github.com/OData/WebApi/issues/812https://github.com/OData/WebApi/issues/853

+0

這比OP自己的自我接受的答案更好的答案。 –