【问题标题】:OData and .NET Core 2 Web API - disable case-sensitivity?OData 和 .NET Core 2 Web API - 禁用区分大小写?
【发布时间】:2018-06-29 02:19:55
【问题描述】:

我是 OData 新手,我正在尝试使用 Microsoft.AspNetCore.OData 7.0.0-beta1 NuGet 包将其集成到我们的 .NET Core 2.0 Web API 中。我希望我的 OData URL 不区分大小写(即 http://localhost:1234/odata/productshttp://localhost:1234/odata/Products 相同)。我怎样才能做到这一点?我的启动代码的相关部分如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime)
{
    // ...
    var odataBuilder = new ODataConventionModelBuilder(app.ApplicationServices);
    odataBuilder.EntitySet<Product>("products");

    app.UseMvc(routeBuilder =>
    {
        routeBuilder.MapODataServiceRoute("ODataRoute", "odata", odataBuilder.GetEdmModel());
        // Workaround for https://github.com/OData/WebApi/issues/1175.
        routeBuilder.EnableDependencyInjection();
    });
    // ...
}

【问题讨论】:

    标签: asp.net-core odata asp.net-core-webapi


    【解决方案1】:

    这是我自己想出来的。可以参考https://github.com/OData/WebApi/issues/812

    总而言之,您需要先将这样的类添加到您的项目中:

    public class CaseInsensitiveResolver : ODataUriResolver
    {
        private bool _enableCaseInsensitive;
    
        public override bool EnableCaseInsensitive
        {
            get => true;
            set => _enableCaseInsensitive = value;
        }
    }
    

    然后您必须以稍微不同的方式创建您的服务路线:

    routeBuilder.MapODataServiceRoute("ODataRoute", "odata", 
       b => b.AddService(ServiceLifetime.Singleton, sp => odataBuilder.GetEdmModel())                        
             .AddService<ODataUriResolver>(ServiceLifetime.Singleton, sp => new CaseInsensitiveResolver()));
    

    这解决了我周一的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多