在vb.net中添加区分大小写的OData



我在WebApi中添加了一个OData v4,它运行得很好。我遵循了以下指示:https://learn.microsoft.com/en-us/odata/webapi/getting-started

然而,我注意到,我需要一个对案件不敏感的人。我在C#中找到了一个解决方案:OData和.NET Core 2 Web API-禁用区分大小写?

但不知怎么的,它对我不起作用。当我尝试它时,它说:

未找到与请求URI"[my-url]"匹配的HTTP资源。

注册有效的方法:

Public Shared Sub Register(ByVal config As HttpConfiguration)
builder = New ODataConventionModelBuilder()
builder.EntitySet(Of vw_CompanyPerson)("profiles")
config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel())
config.Select().Expand().Filter().OrderBy().MaxTop(Nothing).Count()
End Sub

这是我的代码:

Imports System.Web.Http
Imports Guestline.RezLynx.Persistence
Imports Microsoft.AspNet.OData.Builder
Imports Microsoft.AspNet.OData.Extensions
Imports Microsoft.OData
Imports Microsoft.OData.UriParser
Public Class WebApiConfig
Private Shared Property builder() As ODataModelBuilder
Public Shared Sub Register(ByVal config As HttpConfiguration)
builder = New ODataConventionModelBuilder()
builder.EntitySet(Of vw_CompanyPerson)("profiles")
config.MapODataServiceRoute(
"odata",
"odata",
New Action(Of IContainerBuilder)(AddressOf ModifyContainer))
config.Select().Expand().Filter().OrderBy().MaxTop(Nothing).Count()
End Sub
Private Shared Sub ModifyContainer(obj As IContainerBuilder)
obj.AddService(ServiceLifetime.Singleton, New Func(Of IServiceProvider, ODataUriResolver)(AddressOf CreateUriResolver))
obj.AddService(ServiceLifetime.Singleton, New Func(Of IServiceProvider, Edm.IEdmModel)(AddressOf GetEdmModel))
End Sub
Private Shared Function GetEdmModel(arg As IServiceProvider) As Edm.IEdmModel
Return builder.GetEdmModel()
End Function
Private Shared Function CreateUriResolver(arg As IServiceProvider) As ODataUriResolver
Return New CaseInsensitiveUriResolver()
End Function
End Class

和:

Imports Microsoft.OData.UriParser
Public Class CaseInsensitiveUriResolver
Inherits ODataUriResolver
Public Overrides Property EnableCaseInsensitive As Boolean
Get
Return True
End Get
Set(value As Boolean)
End Set
End Property
End Class

我修复了它。

我发现我并没有返回IQueryable接口,并且比较是在代码中进行的,而不是在数据库中。一旦我使用了IQueryable,SQL就会以正确的方式生成,并且比较也会正确进行。

专业提示:使用SQLServerProfiler来检查您对数据库的请求!

最新更新