Procházet zdrojové kódy

Enable nullable in Http.Extensions (#28061)

James Newton-King před 5 roky
rodič
revize
97ea8f8f68

+ 29 - 31
src/Http/Http.Extensions/src/HeaderDictionaryTypeExtensions.cs

@@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Http
             return headers.Get<DateTimeOffset?>(name);
         }
 
-        internal static void Set(this IHeaderDictionary headers, string name, object value)
+        internal static void Set(this IHeaderDictionary headers, string name, object? value)
         {
             if (headers == null)
             {
@@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Http
             }
         }
 
-        internal static void SetList<T>(this IHeaderDictionary headers, string name, IList<T> values)
+        internal static void SetList<T>(this IHeaderDictionary headers, string name, IList<T>? values)
         {
             if (headers == null)
             {
@@ -81,14 +81,14 @@ namespace Microsoft.AspNetCore.Http
             }
             else if (values.Count == 1)
             {
-                headers[name] = new StringValues(values[0].ToString());
+                headers[name] = new StringValues(values[0]!.ToString());
             }
             else
             {
                 var newValues = new string[values.Count];
                 for (var i = 0; i < values.Count; i++)
                 {
-                    newValues[i] = values[i].ToString();
+                    newValues[i] = values[i]!.ToString()!;
                 }
                 headers[name] = new StringValues(newValues);
             }
@@ -112,13 +112,13 @@ namespace Microsoft.AspNetCore.Http
                     Headers.Append(name, StringValues.Empty);
                     break;
                 case 1:
-                    Headers.Append(name, new StringValues(values[0].ToString()));
+                    Headers.Append(name, new StringValues(values[0]!.ToString()));
                     break;
                 default:
                     var newValues = new string[values.Count];
                     for (var i = 0; i < values.Count; i++)
                     {
-                        newValues[i] = values[i].ToString();
+                        newValues[i] = values[i]!.ToString()!;
                     }
                     Headers.Append(name, new StringValues(newValues));
                     break;
@@ -149,34 +149,33 @@ namespace Microsoft.AspNetCore.Http
 
         private static IDictionary<Type, object> KnownParsers = new Dictionary<Type, object>()
         {
-            { typeof(CacheControlHeaderValue), new Func<string, CacheControlHeaderValue>(value => { CacheControlHeaderValue result; return CacheControlHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(ContentDispositionHeaderValue), new Func<string, ContentDispositionHeaderValue>(value => { ContentDispositionHeaderValue result; return ContentDispositionHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(ContentRangeHeaderValue), new Func<string, ContentRangeHeaderValue>(value => { ContentRangeHeaderValue result; return ContentRangeHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(MediaTypeHeaderValue), new Func<string, MediaTypeHeaderValue>(value => { MediaTypeHeaderValue result; return MediaTypeHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(RangeConditionHeaderValue), new Func<string, RangeConditionHeaderValue>(value => { RangeConditionHeaderValue result; return RangeConditionHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(RangeHeaderValue), new Func<string, RangeHeaderValue>(value => { RangeHeaderValue result; return RangeHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(EntityTagHeaderValue), new Func<string, EntityTagHeaderValue>(value => { EntityTagHeaderValue result; return EntityTagHeaderValue.TryParse(value, out result) ? result : null; }) },
-            { typeof(DateTimeOffset?), new Func<string, DateTimeOffset?>(value => { DateTimeOffset result; return HeaderUtilities.TryParseDate(value, out result) ? result : (DateTimeOffset?)null; }) },
-            { typeof(long?), new Func<string, long?>(value => { long result; return HeaderUtilities.TryParseNonNegativeInt64(value, out result) ? result : (long?)null; }) },
+            { typeof(CacheControlHeaderValue), new Func<string, CacheControlHeaderValue?>(value => { return CacheControlHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(ContentDispositionHeaderValue), new Func<string, ContentDispositionHeaderValue?>(value => { return ContentDispositionHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(ContentRangeHeaderValue), new Func<string, ContentRangeHeaderValue?>(value => { return ContentRangeHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(MediaTypeHeaderValue), new Func<string, MediaTypeHeaderValue?>(value => { return MediaTypeHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(RangeConditionHeaderValue), new Func<string, RangeConditionHeaderValue?>(value => { return RangeConditionHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(RangeHeaderValue), new Func<string, RangeHeaderValue?>(value => { return RangeHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(EntityTagHeaderValue), new Func<string, EntityTagHeaderValue?>(value => { return EntityTagHeaderValue.TryParse(value, out var result) ? result : null; }) },
+            { typeof(DateTimeOffset?), new Func<string, DateTimeOffset?>(value => { return HeaderUtilities.TryParseDate(value, out var result) ? result : null; }) },
+            { typeof(long?), new Func<string, long?>(value => { return HeaderUtilities.TryParseNonNegativeInt64(value, out var result) ? result : null; }) },
         };
 
         private static IDictionary<Type, object> KnownListParsers = new Dictionary<Type, object>()
         {
-            { typeof(MediaTypeHeaderValue), new Func<IList<string>, IList<MediaTypeHeaderValue>>(value => { return MediaTypeHeaderValue.TryParseList(value, out IList<MediaTypeHeaderValue> result) ? result : Array.Empty<MediaTypeHeaderValue>(); })  },
-            { typeof(StringWithQualityHeaderValue), new Func<IList<string>, IList<StringWithQualityHeaderValue>>(value => { return StringWithQualityHeaderValue.TryParseList(value, out IList<StringWithQualityHeaderValue> result) ? result : Array.Empty<StringWithQualityHeaderValue>(); })  },
-            { typeof(CookieHeaderValue), new Func<IList<string>, IList<CookieHeaderValue>>(value => { return CookieHeaderValue.TryParseList(value, out IList<CookieHeaderValue> result) ? result : Array.Empty<CookieHeaderValue>(); })  },
-            { typeof(EntityTagHeaderValue), new Func<IList<string>, IList<EntityTagHeaderValue>>(value => { return EntityTagHeaderValue.TryParseList(value, out IList<EntityTagHeaderValue> result) ? result : Array.Empty<EntityTagHeaderValue>(); })  },
-            { typeof(SetCookieHeaderValue), new Func<IList<string>, IList<SetCookieHeaderValue>>(value => { return SetCookieHeaderValue.TryParseList(value, out IList<SetCookieHeaderValue> result) ? result : Array.Empty<SetCookieHeaderValue>(); })  },
+            { typeof(MediaTypeHeaderValue), new Func<IList<string>, IList<MediaTypeHeaderValue>>(value => { return MediaTypeHeaderValue.TryParseList(value, out var result) ? result : Array.Empty<MediaTypeHeaderValue>(); })  },
+            { typeof(StringWithQualityHeaderValue), new Func<IList<string>, IList<StringWithQualityHeaderValue>>(value => { return StringWithQualityHeaderValue.TryParseList(value, out var result) ? result : Array.Empty<StringWithQualityHeaderValue>(); })  },
+            { typeof(CookieHeaderValue), new Func<IList<string>, IList<CookieHeaderValue>>(value => { return CookieHeaderValue.TryParseList(value, out var result) ? result : Array.Empty<CookieHeaderValue>(); })  },
+            { typeof(EntityTagHeaderValue), new Func<IList<string>, IList<EntityTagHeaderValue>>(value => { return EntityTagHeaderValue.TryParseList(value, out var result) ? result : Array.Empty<EntityTagHeaderValue>(); })  },
+            { typeof(SetCookieHeaderValue), new Func<IList<string>, IList<SetCookieHeaderValue>>(value => { return SetCookieHeaderValue.TryParseList(value, out var result) ? result : Array.Empty<SetCookieHeaderValue>(); })  },
         };
 
-        internal static T Get<T>(this IHeaderDictionary headers, string name)
+        internal static T? Get<T>(this IHeaderDictionary headers, string name)
         {
             if (headers == null)
             {
                 throw new ArgumentNullException(nameof(headers));
             }
 
-            object temp;
             var value = headers[name];
 
             if (StringValues.IsNullOrEmpty(value))
@@ -184,7 +183,7 @@ namespace Microsoft.AspNetCore.Http
                 return default(T);
             }
 
-            if (KnownParsers.TryGetValue(typeof(T), out temp))
+            if (KnownParsers.TryGetValue(typeof(T), out var temp))
             {
                 var func = (Func<string, T>)temp;
                 return func(value);
@@ -200,7 +199,6 @@ namespace Microsoft.AspNetCore.Http
                 throw new ArgumentNullException(nameof(headers));
             }
 
-            object temp;
             var values = headers[name];
 
             if (StringValues.IsNullOrEmpty(values))
@@ -208,7 +206,7 @@ namespace Microsoft.AspNetCore.Http
                 return Array.Empty<T>();
             }
 
-            if (KnownListParsers.TryGetValue(typeof(T), out temp))
+            if (KnownListParsers.TryGetValue(typeof(T), out var temp))
             {
                 var func = (Func<IList<string>, IList<T>>)temp;
                 return func(values);
@@ -217,7 +215,7 @@ namespace Microsoft.AspNetCore.Http
             return GetListViaReflection<T>(values);
         }
 
-        private static T GetViaReflection<T>(string value)
+        private static T? GetViaReflection<T>(string value)
         {
             // TODO: Cache the reflected type for later? Only if success?
             var type = typeof(T);
@@ -244,8 +242,8 @@ namespace Microsoft.AspNetCore.Http
                     nameof(T)));
             }
 
-            var parameters = new object[] { value, null };
-            var success = (bool)method.Invoke(null, parameters);
+            var parameters = new object?[] { value, null };
+            var success = (bool)method.Invoke(null, parameters)!;
             if (success)
             {
                 return (T)parameters[1];
@@ -280,11 +278,11 @@ namespace Microsoft.AspNetCore.Http
                     nameof(T)));
             }
 
-            var parameters = new object[] { values, null };
-            var success = (bool)method.Invoke(null, parameters);
+            var parameters = new object?[] { values, null };
+            var success = (bool)method.Invoke(null, parameters)!;
             if (success)
             {
-                return (IList<T>)parameters[1];
+                return (IList<T>)parameters[1]!;
             }
             return Array.Empty<T>();
         }

+ 1 - 1
src/Http/Http.Extensions/src/HttpContextServerVariableExtensions.cs

@@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Http
         /// <c>null</c> if the server does not support the <see cref="IServerVariablesFeature"/> feature.
         /// May return null or empty if the variable does not exist or is not set.
         /// </returns>
-        public static string GetServerVariable(this HttpContext context, string variableName)
+        public static string? GetServerVariable(this HttpContext context, string variableName)
         {
             var feature = context.Features.Get<IServerVariablesFeature>();
 

+ 2 - 3
src/Http/Http.Extensions/src/HttpRequestMultipartExtensions.cs

@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
 using System;
@@ -15,8 +15,7 @@ namespace Microsoft.AspNetCore.Http.Extensions
                 throw new ArgumentNullException(nameof(request));
             }
 
-            MediaTypeHeaderValue mediaType;
-            if (!MediaTypeHeaderValue.TryParse(request.ContentType, out mediaType))
+            if (!MediaTypeHeaderValue.TryParse(request.ContentType, out var mediaType))
             {
                 return string.Empty;
             }

+ 2 - 1
src/Http/Http.Extensions/src/Microsoft.AspNetCore.Http.Extensions.csproj

@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <Description>ASP.NET Core common extension methods for HTTP abstractions, HTTP headers, HTTP request/response, and session state.</Description>
@@ -8,6 +8,7 @@
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <PackageTags>aspnetcore</PackageTags>
     <IsPackable>false</IsPackable>
+    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>

+ 90 - 90
src/Http/Http.Extensions/src/PublicAPI.Shipped.txt

@@ -51,93 +51,93 @@ static Microsoft.AspNetCore.Http.HttpResponseJsonExtensions.WriteAsJsonAsync(thi
 static Microsoft.AspNetCore.Http.HttpResponseJsonExtensions.WriteAsJsonAsync<TValue>(this Microsoft.AspNetCore.Http.HttpResponse! response, TValue value, System.Text.Json.JsonSerializerOptions? options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
 static Microsoft.AspNetCore.Http.HttpResponseJsonExtensions.WriteAsJsonAsync<TValue>(this Microsoft.AspNetCore.Http.HttpResponse! response, TValue value, System.Text.Json.JsonSerializerOptions? options, string? contentType, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
 static Microsoft.AspNetCore.Http.HttpResponseJsonExtensions.WriteAsJsonAsync<TValue>(this Microsoft.AspNetCore.Http.HttpResponse! response, TValue value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
-~Microsoft.AspNetCore.Http.Extensions.QueryBuilder.Add(string key, System.Collections.Generic.IEnumerable<string> values) -> void
-~Microsoft.AspNetCore.Http.Extensions.QueryBuilder.Add(string key, string value) -> void
-~Microsoft.AspNetCore.Http.Extensions.QueryBuilder.GetEnumerator() -> System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<string, string>>
-~Microsoft.AspNetCore.Http.Extensions.QueryBuilder.QueryBuilder(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>> parameters) -> void
-~Microsoft.AspNetCore.Http.Extensions.QueryBuilder.QueryBuilder(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> parameters) -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Accept.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.MediaTypeHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Accept.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptCharset.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.StringWithQualityHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptCharset.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptEncoding.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.StringWithQualityHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptEncoding.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptLanguage.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.StringWithQualityHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptLanguage.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Append(string name, object value) -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.AppendList<T>(string name, System.Collections.Generic.IList<T> values) -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.CacheControl.get -> Microsoft.Net.Http.Headers.CacheControlHeaderValue
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.CacheControl.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentDisposition.get -> Microsoft.Net.Http.Headers.ContentDispositionHeaderValue
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentDisposition.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentRange.get -> Microsoft.Net.Http.Headers.ContentRangeHeaderValue
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentRange.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentType.get -> Microsoft.Net.Http.Headers.MediaTypeHeaderValue
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentType.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Cookie.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.CookieHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Cookie.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Get<T>(string name) -> T
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.GetList<T>(string name) -> System.Collections.Generic.IList<T>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Headers.get -> Microsoft.AspNetCore.Http.IHeaderDictionary
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfMatch.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.EntityTagHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfMatch.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfNoneMatch.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.EntityTagHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfNoneMatch.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfRange.get -> Microsoft.Net.Http.Headers.RangeConditionHeaderValue
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfRange.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Range.get -> Microsoft.Net.Http.Headers.RangeHeaderValue
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Range.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Referer.get -> System.Uri
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Referer.set -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.RequestHeaders(Microsoft.AspNetCore.Http.IHeaderDictionary headers) -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.Set(string name, object value) -> void
-~Microsoft.AspNetCore.Http.Headers.RequestHeaders.SetList<T>(string name, System.Collections.Generic.IList<T> values) -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Append(string name, object value) -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.AppendList<T>(string name, System.Collections.Generic.IList<T> values) -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.CacheControl.get -> Microsoft.Net.Http.Headers.CacheControlHeaderValue
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.CacheControl.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentDisposition.get -> Microsoft.Net.Http.Headers.ContentDispositionHeaderValue
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentDisposition.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentRange.get -> Microsoft.Net.Http.Headers.ContentRangeHeaderValue
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentRange.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentType.get -> Microsoft.Net.Http.Headers.MediaTypeHeaderValue
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentType.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ETag.get -> Microsoft.Net.Http.Headers.EntityTagHeaderValue
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ETag.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Get<T>(string name) -> T
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.GetList<T>(string name) -> System.Collections.Generic.IList<T>
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Headers.get -> Microsoft.AspNetCore.Http.IHeaderDictionary
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Location.get -> System.Uri
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Location.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ResponseHeaders(Microsoft.AspNetCore.Http.IHeaderDictionary headers) -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Set(string name, object value) -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.SetCookie.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.SetCookieHeaderValue>
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.SetCookie.set -> void
-~Microsoft.AspNetCore.Http.Headers.ResponseHeaders.SetList<T>(string name, System.Collections.Generic.IList<T> values) -> void
-~override Microsoft.AspNetCore.Http.Extensions.QueryBuilder.Equals(object obj) -> bool
-~override Microsoft.AspNetCore.Http.Extensions.QueryBuilder.ToString() -> string
-~static Microsoft.AspNetCore.Http.Extensions.HttpRequestMultipartExtensions.GetMultipartBoundary(this Microsoft.AspNetCore.Http.HttpRequest request) -> string
-~static Microsoft.AspNetCore.Http.Extensions.StreamCopyOperation.CopyToAsync(System.IO.Stream source, System.IO.Stream destination, long? count, System.Threading.CancellationToken cancel) -> System.Threading.Tasks.Task
-~static Microsoft.AspNetCore.Http.Extensions.StreamCopyOperation.CopyToAsync(System.IO.Stream source, System.IO.Stream destination, long? count, int bufferSize, System.Threading.CancellationToken cancel) -> System.Threading.Tasks.Task
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(string scheme, Microsoft.AspNetCore.Http.HostString host, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.PathString path = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.QueryString query = default(Microsoft.AspNetCore.Http.QueryString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString)) -> string
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildRelative(Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.PathString path = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.QueryString query = default(Microsoft.AspNetCore.Http.QueryString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString)) -> string
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(System.Uri uri) -> string
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.FromAbsolute(string uri, out string scheme, out Microsoft.AspNetCore.Http.HostString host, out Microsoft.AspNetCore.Http.PathString path, out Microsoft.AspNetCore.Http.QueryString query, out Microsoft.AspNetCore.Http.FragmentString fragment) -> void
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.GetDisplayUrl(this Microsoft.AspNetCore.Http.HttpRequest request) -> string
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.GetEncodedPathAndQuery(this Microsoft.AspNetCore.Http.HttpRequest request) -> string
-~static Microsoft.AspNetCore.Http.Extensions.UriHelper.GetEncodedUrl(this Microsoft.AspNetCore.Http.HttpRequest request) -> string
-~static Microsoft.AspNetCore.Http.HeaderDictionaryTypeExtensions.AppendList<T>(this Microsoft.AspNetCore.Http.IHeaderDictionary Headers, string name, System.Collections.Generic.IList<T> values) -> void
-~static Microsoft.AspNetCore.Http.HeaderDictionaryTypeExtensions.GetTypedHeaders(this Microsoft.AspNetCore.Http.HttpRequest request) -> Microsoft.AspNetCore.Http.Headers.RequestHeaders
-~static Microsoft.AspNetCore.Http.HeaderDictionaryTypeExtensions.GetTypedHeaders(this Microsoft.AspNetCore.Http.HttpResponse response) -> Microsoft.AspNetCore.Http.Headers.ResponseHeaders
-~static Microsoft.AspNetCore.Http.HttpContextServerVariableExtensions.GetServerVariable(this Microsoft.AspNetCore.Http.HttpContext context, string variableName) -> string
-~static Microsoft.AspNetCore.Http.ResponseExtensions.Clear(this Microsoft.AspNetCore.Http.HttpResponse response) -> void
-~static Microsoft.AspNetCore.Http.ResponseExtensions.Redirect(this Microsoft.AspNetCore.Http.HttpResponse response, string location, bool permanent, bool preserveMethod) -> void
-~static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse response, Microsoft.Extensions.FileProviders.IFileInfo file, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
-~static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse response, Microsoft.Extensions.FileProviders.IFileInfo file, long offset, long? count, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
-~static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse response, string fileName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
-~static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse response, string fileName, long offset, long? count, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
-~static Microsoft.AspNetCore.Http.SessionExtensions.Get(this Microsoft.AspNetCore.Http.ISession session, string key) -> byte[]
-~static Microsoft.AspNetCore.Http.SessionExtensions.GetInt32(this Microsoft.AspNetCore.Http.ISession session, string key) -> int?
-~static Microsoft.AspNetCore.Http.SessionExtensions.GetString(this Microsoft.AspNetCore.Http.ISession session, string key) -> string
-~static Microsoft.AspNetCore.Http.SessionExtensions.SetInt32(this Microsoft.AspNetCore.Http.ISession session, string key, int value) -> void
-~static Microsoft.AspNetCore.Http.SessionExtensions.SetString(this Microsoft.AspNetCore.Http.ISession session, string key, string value) -> void
+Microsoft.AspNetCore.Http.Extensions.QueryBuilder.Add(string! key, System.Collections.Generic.IEnumerable<string!>! values) -> void
+Microsoft.AspNetCore.Http.Extensions.QueryBuilder.Add(string! key, string! value) -> void
+Microsoft.AspNetCore.Http.Extensions.QueryBuilder.GetEnumerator() -> System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<string!, string!>>!
+Microsoft.AspNetCore.Http.Extensions.QueryBuilder.QueryBuilder(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, Microsoft.Extensions.Primitives.StringValues>>! parameters) -> void
+Microsoft.AspNetCore.Http.Extensions.QueryBuilder.QueryBuilder(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, string!>>! parameters) -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Accept.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.MediaTypeHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Accept.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptCharset.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.StringWithQualityHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptCharset.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptEncoding.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.StringWithQualityHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptEncoding.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptLanguage.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.StringWithQualityHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AcceptLanguage.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Append(string! name, object! value) -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.AppendList<T>(string! name, System.Collections.Generic.IList<T>! values) -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.CacheControl.get -> Microsoft.Net.Http.Headers.CacheControlHeaderValue?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.CacheControl.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentDisposition.get -> Microsoft.Net.Http.Headers.ContentDispositionHeaderValue?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentDisposition.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentRange.get -> Microsoft.Net.Http.Headers.ContentRangeHeaderValue?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentRange.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentType.get -> Microsoft.Net.Http.Headers.MediaTypeHeaderValue?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.ContentType.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Cookie.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.CookieHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Cookie.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Get<T>(string! name) -> T?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.GetList<T>(string! name) -> System.Collections.Generic.IList<T>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Headers.get -> Microsoft.AspNetCore.Http.IHeaderDictionary!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfMatch.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.EntityTagHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfMatch.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfNoneMatch.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.EntityTagHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfNoneMatch.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfRange.get -> Microsoft.Net.Http.Headers.RangeConditionHeaderValue?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.IfRange.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Range.get -> Microsoft.Net.Http.Headers.RangeHeaderValue?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Range.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Referer.get -> System.Uri?
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Referer.set -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.RequestHeaders(Microsoft.AspNetCore.Http.IHeaderDictionary! headers) -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.Set(string! name, object? value) -> void
+Microsoft.AspNetCore.Http.Headers.RequestHeaders.SetList<T>(string! name, System.Collections.Generic.IList<T>? values) -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Append(string! name, object! value) -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.AppendList<T>(string! name, System.Collections.Generic.IList<T>! values) -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.CacheControl.get -> Microsoft.Net.Http.Headers.CacheControlHeaderValue?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.CacheControl.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentDisposition.get -> Microsoft.Net.Http.Headers.ContentDispositionHeaderValue?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentDisposition.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentRange.get -> Microsoft.Net.Http.Headers.ContentRangeHeaderValue?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentRange.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentType.get -> Microsoft.Net.Http.Headers.MediaTypeHeaderValue?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ContentType.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ETag.get -> Microsoft.Net.Http.Headers.EntityTagHeaderValue?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ETag.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Get<T>(string! name) -> T?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.GetList<T>(string! name) -> System.Collections.Generic.IList<T>!
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Headers.get -> Microsoft.AspNetCore.Http.IHeaderDictionary!
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Location.get -> System.Uri?
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Location.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.ResponseHeaders(Microsoft.AspNetCore.Http.IHeaderDictionary! headers) -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.Set(string! name, object? value) -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.SetCookie.get -> System.Collections.Generic.IList<Microsoft.Net.Http.Headers.SetCookieHeaderValue!>!
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.SetCookie.set -> void
+Microsoft.AspNetCore.Http.Headers.ResponseHeaders.SetList<T>(string! name, System.Collections.Generic.IList<T>? values) -> void
+override Microsoft.AspNetCore.Http.Extensions.QueryBuilder.Equals(object? obj) -> bool
+override Microsoft.AspNetCore.Http.Extensions.QueryBuilder.ToString() -> string!
+static Microsoft.AspNetCore.Http.Extensions.HttpRequestMultipartExtensions.GetMultipartBoundary(this Microsoft.AspNetCore.Http.HttpRequest! request) -> string!
+static Microsoft.AspNetCore.Http.Extensions.StreamCopyOperation.CopyToAsync(System.IO.Stream! source, System.IO.Stream! destination, long? count, System.Threading.CancellationToken cancel) -> System.Threading.Tasks.Task!
+static Microsoft.AspNetCore.Http.Extensions.StreamCopyOperation.CopyToAsync(System.IO.Stream! source, System.IO.Stream! destination, long? count, int bufferSize, System.Threading.CancellationToken cancel) -> System.Threading.Tasks.Task!
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(string! scheme, Microsoft.AspNetCore.Http.HostString host, Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.PathString path = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.QueryString query = default(Microsoft.AspNetCore.Http.QueryString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString)) -> string!
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildRelative(Microsoft.AspNetCore.Http.PathString pathBase = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.PathString path = default(Microsoft.AspNetCore.Http.PathString), Microsoft.AspNetCore.Http.QueryString query = default(Microsoft.AspNetCore.Http.QueryString), Microsoft.AspNetCore.Http.FragmentString fragment = default(Microsoft.AspNetCore.Http.FragmentString)) -> string!
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(System.Uri! uri) -> string!
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.FromAbsolute(string! uri, out string! scheme, out Microsoft.AspNetCore.Http.HostString host, out Microsoft.AspNetCore.Http.PathString path, out Microsoft.AspNetCore.Http.QueryString query, out Microsoft.AspNetCore.Http.FragmentString fragment) -> void
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.GetDisplayUrl(this Microsoft.AspNetCore.Http.HttpRequest! request) -> string!
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.GetEncodedPathAndQuery(this Microsoft.AspNetCore.Http.HttpRequest! request) -> string!
+static Microsoft.AspNetCore.Http.Extensions.UriHelper.GetEncodedUrl(this Microsoft.AspNetCore.Http.HttpRequest! request) -> string!
+static Microsoft.AspNetCore.Http.HeaderDictionaryTypeExtensions.AppendList<T>(this Microsoft.AspNetCore.Http.IHeaderDictionary! Headers, string! name, System.Collections.Generic.IList<T>! values) -> void
+static Microsoft.AspNetCore.Http.HeaderDictionaryTypeExtensions.GetTypedHeaders(this Microsoft.AspNetCore.Http.HttpRequest! request) -> Microsoft.AspNetCore.Http.Headers.RequestHeaders!
+static Microsoft.AspNetCore.Http.HeaderDictionaryTypeExtensions.GetTypedHeaders(this Microsoft.AspNetCore.Http.HttpResponse! response) -> Microsoft.AspNetCore.Http.Headers.ResponseHeaders!
+static Microsoft.AspNetCore.Http.HttpContextServerVariableExtensions.GetServerVariable(this Microsoft.AspNetCore.Http.HttpContext! context, string! variableName) -> string?
+static Microsoft.AspNetCore.Http.ResponseExtensions.Clear(this Microsoft.AspNetCore.Http.HttpResponse! response) -> void
+static Microsoft.AspNetCore.Http.ResponseExtensions.Redirect(this Microsoft.AspNetCore.Http.HttpResponse! response, string! location, bool permanent, bool preserveMethod) -> void
+static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse! response, Microsoft.Extensions.FileProviders.IFileInfo! file, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse! response, Microsoft.Extensions.FileProviders.IFileInfo! file, long offset, long? count, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse! response, string! fileName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+static Microsoft.AspNetCore.Http.SendFileResponseExtensions.SendFileAsync(this Microsoft.AspNetCore.Http.HttpResponse! response, string! fileName, long offset, long? count, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+static Microsoft.AspNetCore.Http.SessionExtensions.Get(this Microsoft.AspNetCore.Http.ISession! session, string! key) -> byte[]?
+static Microsoft.AspNetCore.Http.SessionExtensions.GetInt32(this Microsoft.AspNetCore.Http.ISession! session, string! key) -> int?
+static Microsoft.AspNetCore.Http.SessionExtensions.GetString(this Microsoft.AspNetCore.Http.ISession! session, string! key) -> string?
+static Microsoft.AspNetCore.Http.SessionExtensions.SetInt32(this Microsoft.AspNetCore.Http.ISession! session, string! key, int value) -> void
+static Microsoft.AspNetCore.Http.SessionExtensions.SetString(this Microsoft.AspNetCore.Http.ISession! session, string! key, string! value) -> void

+ 1 - 1
src/Http/Http.Extensions/src/QueryBuilder.cs

@@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Http.Extensions
             return ToQueryString().GetHashCode();
         }
 
-        public override bool Equals(object obj)
+        public override bool Equals(object? obj)
         {
             return ToQueryString().Equals(obj);
         }

+ 11 - 12
src/Http/Http.Extensions/src/RequestHeaders.cs

@@ -70,7 +70,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public CacheControlHeaderValue CacheControl
+        public CacheControlHeaderValue? CacheControl
         {
             get
             {
@@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public ContentDispositionHeaderValue ContentDisposition
+        public ContentDispositionHeaderValue? ContentDisposition
         {
             get
             {
@@ -106,7 +106,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public ContentRangeHeaderValue ContentRange
+        public ContentRangeHeaderValue? ContentRange
         {
             get
             {
@@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public MediaTypeHeaderValue ContentType
+        public MediaTypeHeaderValue? ContentType
         {
             get
             {
@@ -214,7 +214,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public RangeConditionHeaderValue IfRange
+        public RangeConditionHeaderValue? IfRange
         {
             get
             {
@@ -250,7 +250,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public RangeHeaderValue Range
+        public RangeHeaderValue? Range
         {
             get
             {
@@ -262,12 +262,11 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public Uri Referer
+        public Uri? Referer
         {
             get
             {
-                Uri uri;
-                if (Uri.TryCreate(Headers[HeaderNames.Referer], UriKind.RelativeOrAbsolute, out uri))
+                if (Uri.TryCreate(Headers[HeaderNames.Referer], UriKind.RelativeOrAbsolute, out var uri))
                 {
                     return uri;
                 }
@@ -287,7 +286,7 @@ namespace Microsoft.AspNetCore.Http.Headers
         /// The given type must have a static TryParse method.</typeparam>
         /// <param name="name">The name of the header to retrieve.</param>
         /// <returns>The value of the header.</returns>
-        public T Get<T>(string name)
+        public T? Get<T>(string name)
         {
             return Headers.Get<T>(name);
         }
@@ -305,7 +304,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             return Headers.GetList<T>(name);
         }
 
-        public void Set(string name, object value)
+        public void Set(string name, object? value)
         {
             if (name == null)
             {
@@ -315,7 +314,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             Headers.Set(name, value);
         }
 
-        public void SetList<T>(string name, IList<T> values)
+        public void SetList<T>(string name, IList<T>? values)
         {
             if (name == null)
             {

+ 10 - 11
src/Http/Http.Extensions/src/ResponseHeaders.cs

@@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Http.Headers
 
         public IHeaderDictionary Headers { get; }
 
-        public CacheControlHeaderValue CacheControl
+        public CacheControlHeaderValue? CacheControl
         {
             get
             {
@@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public ContentDispositionHeaderValue ContentDisposition
+        public ContentDispositionHeaderValue? ContentDisposition
         {
             get
             {
@@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public ContentRangeHeaderValue ContentRange
+        public ContentRangeHeaderValue? ContentRange
         {
             get
             {
@@ -70,7 +70,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public MediaTypeHeaderValue ContentType
+        public MediaTypeHeaderValue? ContentType
         {
             get
             {
@@ -94,7 +94,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public EntityTagHeaderValue ETag
+        public EntityTagHeaderValue? ETag
         {
             get
             {
@@ -129,12 +129,11 @@ namespace Microsoft.AspNetCore.Http.Headers
             }
         }
 
-        public Uri Location
+        public Uri? Location
         {
             get
             {
-                Uri uri;
-                if (Uri.TryCreate(Headers[HeaderNames.Location], UriKind.RelativeOrAbsolute, out uri))
+                if (Uri.TryCreate(Headers[HeaderNames.Location], UriKind.RelativeOrAbsolute, out var uri))
                 {
                     return uri;
                 }
@@ -166,7 +165,7 @@ namespace Microsoft.AspNetCore.Http.Headers
         /// The given type must have a static TryParse method.</typeparam>
         /// <param name="name">The name of the header to retrieve.</param>
         /// <returns>The value of the header.</returns>
-        public T Get<T>(string name)
+        public T? Get<T>(string name)
         {
             return Headers.Get<T>(name);
         }
@@ -184,7 +183,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             return Headers.GetList<T>(name);
         }
 
-        public void Set(string name, object value)
+        public void Set(string name, object? value)
         {
             if (name == null)
             {
@@ -194,7 +193,7 @@ namespace Microsoft.AspNetCore.Http.Headers
             Headers.Set(name, value);
         }
 
-        public void SetList<T>(string name, IList<T> values)
+        public void SetList<T>(string name, IList<T>? values)
         {
             if (name == null)
             {

+ 4 - 5
src/Http/Http.Extensions/src/SessionExtensions.cs

@@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Http
             session.Set(key, Encoding.UTF8.GetBytes(value));
         }
 
-        public static string GetString(this ISession session, string key)
+        public static string? GetString(this ISession session, string key)
         {
             var data = session.Get(key);
             if (data == null)
@@ -44,11 +44,10 @@ namespace Microsoft.AspNetCore.Http
             return Encoding.UTF8.GetString(data);
         }
 
-        public static byte[] Get(this ISession session, string key)
+        public static byte[]? Get(this ISession session, string key)
         {
-            byte[] value = null;
-            session.TryGetValue(key, out value);
+            session.TryGetValue(key, out var value);
             return value;
         }
     }
-}
+}