ASP.NET Core OData 8.x changelog

ASP.NET Core OData 8.x is available on the Nuget gallery

You can install or update the NuGet package for ASP.NET Core OData using the Package Manager Console.


  • DeltaOfT out of sync with WebAPI: missing UpdatableProperties
  • Update model builder dependency to 1.0.7
  • move the ReadUntypedAsString=false to setting
  • Fix issue: filter binder does not use the timezone info from settings
  • Fix bug in Filter Any within Expand
  • Fix incorrect GetProperties method logic
  • Change public virtual to protected virtual for ValidateCountNode
  • Add support for $count segment in $filter


  • Make methods as virtual in ODataSerializerProvider
  • Make methods as virtual in ODataDeserializerProvider


  • Change AddModel() to AddRouteComponents, Add EnableQueryFeatures() in ODataOptions
  • Remove IODataBuilder, DefaultODataBuilder, Eliminate BuilderFactory and the need for external ContainerBuilder
  • Rename ODataRoutingAttribute to ODataAttributeRoutingAttribute
  • Rename ODataModelAttribute to ODataRouteComponentAttribute
  • Remove NonODataControllerAttribute and NonODataActionAttribute and replace them using ODataIgnoredAttribute
  • Rename PrefixName to RoutePrefix, Rename SubServiceProvider to Services in IODataFeature
  • Add ODataOptions() in HttpContextExtensions and HttpRequestExtensions
  • Rename {Get|Create|Delete}SubServiceProvider to {Get|Create|Delete}RouteServices in HttpRequestExtensions
  • Improvement to (de)serialization code, using interface for (de)serializer
  • Improve OData debug route and its pattern
  • Enable $this query option
  • Update dependency to ODL 7.9, ModelBuilder 1.0.6
  • Fix AmbiguousMatchException for properties with new modifier
  • Add bunch of test cases to increase the code coverage
  • Other code clean up, for example, remove IODataTypeMappingProvider etc


  • Be noted Breaking changes in ODataSegmentTemplate
  • Use ActionName in conventional routing
  • Make CreateRef, DeleteRef, GetRef for generic navigation property working
  • Support alternate key in attribute routing
  • ClrTypeCache has memory leak owing to IEdmTypeReference
  • Change ODataOptions by removing unnecessary APIs
  • Remove EdmDeltaKind
  • Change EdmDeltaLink, EdmDeltaDeletedLink, etc
  • Add a config for non-parenthesis of empty parameter function
  • Add a config for controller name case insensitive
  • Enable string without single quote in key as segment


  • Be noted Move AddOData() to IMvcBuilder and IMvcCoreBuilder
  • Move routing conventions to ODataOptions & use options setup
  • Add the API for navigation source, navigation property, operation link builder
  • Enable payload property case-insensitive
  • Remove ContentLength check, support chunked request
  • Add SingleResult JSON value converter
  • Improve the "EnumTryParse" reflect for .NET 6
  • Support long query URL pattern using $query
  • Add a OData routing debug middleware. Call app.UseODataRouteDebug() to enable it
  • Count in filter throws not supported
  • Retrieve the default query setting
  • Fix issue about absolute route template with two selector models
  • Reuse WriteObjectInlineAsyc in ODataDeltaResourceSetSerializer
  • Create selector model if we have route template on controller
  • Improve ConvertPrimtiveValue assert


  • Attribute routing: Remove ODataRouteAttribute, ODataRoutePrefix, use RouteAttribute, HttpGet, HttpPost,... for attribute routing
  • Delta resource set: Add DeltaSetOfT, DeltaT, DeltaLinkT and related interfaces
  • Entity Reference: Support odata.bind and link
  • Fix the TimeZone issue when deserializing
  • Stream property serialization & stream property query
  • Make basic non-Edm scenario working
  • Add Json value converter for PageResult, SelectExpandWrapper
  • Add Dynamic type wrapper type converter
  • Rename IsUntyped to IsNoClrType in Deserializer context
  • Rename ODataDeltaFeedSerializer to ODataDeltaResourceSetSerializer
  • Retrieve the returned entity set for function from annotation
  • Add / prefix for OData route template to prevent mergeing routing template from controller
  • Use metadata writer async, change other WriteObjectAsync
  • Change the Translate in segment template to TryTranslate
  • Remove CompatibilityOptions and code clean
  • Add request and timezone to the nested deserializer context
  • Change PathTemplateSegment, DynamicSegment
  • Add the OData version to reader settings when specified in the request


  • Fix the TimeZone issue when serializing
  • Add the key/value pair parser
  • Set ReadAsUntypedAsString=false
  • Fix the query information concurrency problem. #72
  • Remove model container and inject Edm model into query wrapper
  • Fix the navigation property routing convention http method
  • Enhance batch accept header descision
  • ResourceContext.ResourceInstance throws exception
  • Fix child collection nextlink
  • Enable model query in select and expand binder
  • Fix invalid location header generated when key property for model contains unicode chars


  • Enable CSDL-JSON metadata, use the following ways:

    • Query: $format=application/json
    • Query: $format=json
    • Header: Accept=application/json
  • Add all attributes to new selector model. #34

  • Change the Order value for Entity and OperationImport routing convention

  • Add null check for the model

  • Remove OmitNullDynanicProperty setting

  • Remove CompatibilityOptions setting

  • Change CreatedODataResult and UpdatedODataResult

  • EnableQuery should perform checks before controller execution. #51

  • Full serialization and deserialization async


  • Improve key and function segment template
  • Remove the GuidCompare