OData v4 HttpConfiguration扩展方法对我来说似乎缺少。下面是Web的Register:
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)中完全缺失。
它们存在于文档中,也存在于程序集的源代码中,但是在探索我所拥有的程序集时,它们完全丢失了:
我多次尝试从Nuget重新安装OData --我似乎找不到其他有这个问题的人。准备拔出我的头发。有什么想法吗?
发布于 2016-11-15 17:03:55
就在我发到这里之后,我就想通了。通过将Nuget包降级到5.9.1,我最终得到了丢失的部分。
发布于 2017-02-09 14:48:45
我认为降级不是一个好的解决办法。
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());
}
我的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
https://stackoverflow.com/questions/40615388
复制相似问题