# Microsoft.AspNetCore.Routing.Abstractions

``` diff
 {
-    namespace Microsoft.AspNetCore.Http {
 {
-        public class Endpoint {
 {
-            public Endpoint(RequestDelegate requestDelegate, EndpointMetadataCollection metadata, string displayName);

-            public string DisplayName { get; }

-            public EndpointMetadataCollection Metadata { get; }

-            public RequestDelegate RequestDelegate { get; }

-            public override string ToString();

-        }
-        public sealed class EndpointMetadataCollection : IEnumerable, IEnumerable<object>, IReadOnlyCollection<object>, IReadOnlyList<object> {
 {
-            public static readonly EndpointMetadataCollection Empty;

-            public EndpointMetadataCollection(IEnumerable<object> items);

-            public EndpointMetadataCollection(params object[] items);

-            public int Count { get; }

-            public object this[int index] { get; }

-            public EndpointMetadataCollection.Enumerator GetEnumerator();

-            public T GetMetadata<T>() where T : class;

-            public IEnumerable<T> GetOrderedMetadata<T>() where T : class;

-            IEnumerator<object> System.Collections.Generic.IEnumerable<System.Object>.GetEnumerator();

-            IEnumerator System.Collections.IEnumerable.GetEnumerator();

-            public struct Enumerator : IDisposable, IEnumerator, IEnumerator<object> {
 {
-                public object Current { get; private set; }

-                public void Dispose();

-                public bool MoveNext();

-                public void Reset();

-            }
-        }
-    }
-    namespace Microsoft.AspNetCore.Http.Features {
 {
-        public interface IEndpointFeature {
 {
-            Endpoint Endpoint { get; set; }

-        }
-        public interface IRouteValuesFeature {
 {
-            RouteValueDictionary RouteValues { get; set; }

-        }
-    }
     namespace Microsoft.AspNetCore.Routing {
         public class RouteData {
-            public struct RouteDataSnapshot
+            public readonly struct RouteDataSnapshot
         }
-        public class RouteValueDictionary : ICollection<KeyValuePair<string, object>>, IDictionary<string, object>, IEnumerable, IEnumerable<KeyValuePair<string, object>>, IReadOnlyCollection<KeyValuePair<string, object>>, IReadOnlyDictionary<string, object> {
 {
-            public RouteValueDictionary();

-            public RouteValueDictionary(object values);

-            public IEqualityComparer<string> Comparer { get; }

-            public int Count { get; }

-            public ICollection<string> Keys { get; }

-            bool System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.IsReadOnly { get; }

-            IEnumerable<string> System.Collections.Generic.IReadOnlyDictionary<System.String,System.Object>.Keys { get; }

-            IEnumerable<object> System.Collections.Generic.IReadOnlyDictionary<System.String,System.Object>.Values { get; }

-            public object this[string key] { get; set; }

-            public ICollection<object> Values { get; }

-            public void Add(string key, object value);

-            public void Clear();

-            public bool ContainsKey(string key);

-            public static RouteValueDictionary FromArray(KeyValuePair<string, object>[] items);

-            public RouteValueDictionary.Enumerator GetEnumerator();

-            public bool Remove(string key);

-            public bool Remove(string key, out object value);

-            void System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.Add(KeyValuePair<string, object> item);

-            bool System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.Contains(KeyValuePair<string, object> item);

-            void System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.CopyTo(KeyValuePair<string, object>[] array, int arrayIndex);

-            bool System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.Remove(KeyValuePair<string, object> item);

-            IEnumerator<KeyValuePair<string, object>> System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.GetEnumerator();

-            IEnumerator System.Collections.IEnumerable.GetEnumerator();

-            public bool TryAdd(string key, object value);

-            public bool TryGetValue(string key, out object value);

-            public struct Enumerator : IDisposable, IEnumerator, IEnumerator<KeyValuePair<string, object>> {
 {
-                public Enumerator(RouteValueDictionary dictionary);

-                public KeyValuePair<string, object> Current { get; private set; }

-                object System.Collections.IEnumerator.Current { get; }

-                public void Dispose();

-                public bool MoveNext();

-                public void Reset();

-            }
-        }
     }
 }
```

