Annotate Microsoft.AspNetCore.Http with nullable attributes (#22928)
* Annotate Microsoft.AspNetCore.Http with nullable attributes * Annotate Hosting with nullable
This commit is contained in:
parent
c93b61156d
commit
8efcca43ce
|
|
@ -2,6 +2,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>$(DefaultNetCoreTargetFramework)</TargetFrameworks>
|
<TargetFrameworks>$(DefaultNetCoreTargetFramework)</TargetFrameworks>
|
||||||
|
<Nullable>annotations</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
|
<ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
|
||||||
<Compile Include="Microsoft.AspNetCore.Hosting.Abstractions.netcoreapp.cs" />
|
<Compile Include="Microsoft.AspNetCore.Hosting.Abstractions.netcoreapp.cs" />
|
||||||
|
|
|
||||||
|
|
@ -93,8 +93,8 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
Microsoft.AspNetCore.Hosting.IWebHostBuilder ConfigureAppConfiguration(System.Action<Microsoft.AspNetCore.Hosting.WebHostBuilderContext, Microsoft.Extensions.Configuration.IConfigurationBuilder> configureDelegate);
|
Microsoft.AspNetCore.Hosting.IWebHostBuilder ConfigureAppConfiguration(System.Action<Microsoft.AspNetCore.Hosting.WebHostBuilderContext, Microsoft.Extensions.Configuration.IConfigurationBuilder> configureDelegate);
|
||||||
Microsoft.AspNetCore.Hosting.IWebHostBuilder ConfigureServices(System.Action<Microsoft.AspNetCore.Hosting.WebHostBuilderContext, Microsoft.Extensions.DependencyInjection.IServiceCollection> configureServices);
|
Microsoft.AspNetCore.Hosting.IWebHostBuilder ConfigureServices(System.Action<Microsoft.AspNetCore.Hosting.WebHostBuilderContext, Microsoft.Extensions.DependencyInjection.IServiceCollection> configureServices);
|
||||||
Microsoft.AspNetCore.Hosting.IWebHostBuilder ConfigureServices(System.Action<Microsoft.Extensions.DependencyInjection.IServiceCollection> configureServices);
|
Microsoft.AspNetCore.Hosting.IWebHostBuilder ConfigureServices(System.Action<Microsoft.Extensions.DependencyInjection.IServiceCollection> configureServices);
|
||||||
string GetSetting(string key);
|
string? GetSetting(string key);
|
||||||
Microsoft.AspNetCore.Hosting.IWebHostBuilder UseSetting(string key, string value);
|
Microsoft.AspNetCore.Hosting.IWebHostBuilder UseSetting(string key, string? value);
|
||||||
}
|
}
|
||||||
public partial interface IWebHostEnvironment : Microsoft.Extensions.Hosting.IHostEnvironment
|
public partial interface IWebHostEnvironment : Microsoft.Extensions.Hosting.IHostEnvironment
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key">The key of the setting to look up.</param>
|
/// <param name="key">The key of the setting to look up.</param>
|
||||||
/// <returns>The value the setting currently contains.</returns>
|
/// <returns>The value the setting currently contains.</returns>
|
||||||
string GetSetting(string key);
|
string? GetSetting(string key);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add or replace a setting in the configuration.
|
/// Add or replace a setting in the configuration.
|
||||||
|
|
@ -58,6 +58,6 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
/// <param name="key">The key of the setting to add or replace.</param>
|
/// <param name="key">The key of the setting to add or replace.</param>
|
||||||
/// <param name="value">The value of the setting to add or replace.</param>
|
/// <param name="value">The value of the setting to add or replace.</param>
|
||||||
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
||||||
IWebHostBuilder UseSetting(string key, string value);
|
IWebHostBuilder UseSetting(string key, string? value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<PackageTags>aspnetcore;hosting</PackageTags>
|
<PackageTags>aspnetcore;hosting</PackageTags>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,11 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="IWebHostEnvironment" /> initialized by the <see cref="IWebHost" />.
|
/// The <see cref="IWebHostEnvironment" /> initialized by the <see cref="IWebHost" />.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IWebHostEnvironment HostingEnvironment { get; set; }
|
public IWebHostEnvironment HostingEnvironment { get; set; } = default!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="IConfiguration" /> containing the merged configuration of the application and the <see cref="IWebHost" />.
|
/// The <see cref="IConfiguration" /> containing the merged configuration of the application and the <see cref="IWebHost" />.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IConfiguration Configuration { get; set; }
|
public IConfiguration Configuration { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
public partial interface IApplicationBuilder
|
public partial interface IApplicationBuilder
|
||||||
{
|
{
|
||||||
System.IServiceProvider ApplicationServices { get; set; }
|
System.IServiceProvider ApplicationServices { get; set; }
|
||||||
System.Collections.Generic.IDictionary<string, object> Properties { get; }
|
System.Collections.Generic.IDictionary<string, object?> Properties { get; }
|
||||||
Microsoft.AspNetCore.Http.Features.IFeatureCollection ServerFeatures { get; }
|
Microsoft.AspNetCore.Http.Features.IFeatureCollection ServerFeatures { get; }
|
||||||
Microsoft.AspNetCore.Http.RequestDelegate Build();
|
Microsoft.AspNetCore.Http.RequestDelegate Build();
|
||||||
Microsoft.AspNetCore.Builder.IApplicationBuilder New();
|
Microsoft.AspNetCore.Builder.IApplicationBuilder New();
|
||||||
|
|
@ -108,13 +108,13 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public abstract partial class ConnectionInfo
|
public abstract partial class ConnectionInfo
|
||||||
{
|
{
|
||||||
protected ConnectionInfo() { }
|
protected ConnectionInfo() { }
|
||||||
public abstract System.Security.Cryptography.X509Certificates.X509Certificate2 ClientCertificate { get; set; }
|
public abstract System.Security.Cryptography.X509Certificates.X509Certificate2? ClientCertificate { get; set; }
|
||||||
public abstract string Id { get; set; }
|
public abstract string Id { get; set; }
|
||||||
public abstract System.Net.IPAddress LocalIpAddress { get; set; }
|
public abstract System.Net.IPAddress? LocalIpAddress { get; set; }
|
||||||
public abstract int LocalPort { get; set; }
|
public abstract int LocalPort { get; set; }
|
||||||
public abstract System.Net.IPAddress RemoteIpAddress { get; set; }
|
public abstract System.Net.IPAddress? RemoteIpAddress { get; set; }
|
||||||
public abstract int RemotePort { get; set; }
|
public abstract int RemotePort { get; set; }
|
||||||
public abstract System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
|
public abstract System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2?> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
|
||||||
}
|
}
|
||||||
public partial class CookieBuilder
|
public partial class CookieBuilder
|
||||||
{
|
{
|
||||||
|
|
@ -231,7 +231,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public abstract System.Threading.CancellationToken RequestAborted { get; set; }
|
public abstract System.Threading.CancellationToken RequestAborted { get; set; }
|
||||||
public abstract System.IServiceProvider RequestServices { get; set; }
|
public abstract System.IServiceProvider RequestServices { get; set; }
|
||||||
public abstract Microsoft.AspNetCore.Http.HttpResponse Response { get; }
|
public abstract Microsoft.AspNetCore.Http.HttpResponse Response { get; }
|
||||||
public abstract Microsoft.AspNetCore.Http.ISession? Session { get; set; }
|
public abstract Microsoft.AspNetCore.Http.ISession Session { get; set; }
|
||||||
public abstract string TraceIdentifier { get; set; }
|
public abstract string TraceIdentifier { get; set; }
|
||||||
public abstract System.Security.Claims.ClaimsPrincipal User { get; set; }
|
public abstract System.Security.Claims.ClaimsPrincipal User { get; set; }
|
||||||
public abstract Microsoft.AspNetCore.Http.WebSocketManager WebSockets { get; }
|
public abstract Microsoft.AspNetCore.Http.WebSocketManager WebSockets { get; }
|
||||||
|
|
@ -326,7 +326,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
public partial interface IHttpContextAccessor
|
public partial interface IHttpContextAccessor
|
||||||
{
|
{
|
||||||
Microsoft.AspNetCore.Http.HttpContext HttpContext { get; set; }
|
Microsoft.AspNetCore.Http.HttpContext? HttpContext { get; set; }
|
||||||
}
|
}
|
||||||
public partial interface IHttpContextFactory
|
public partial interface IHttpContextFactory
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -15,16 +15,16 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract string Id { get; set; }
|
public abstract string Id { get; set; }
|
||||||
|
|
||||||
public abstract IPAddress RemoteIpAddress { get; set; }
|
public abstract IPAddress? RemoteIpAddress { get; set; }
|
||||||
|
|
||||||
public abstract int RemotePort { get; set; }
|
public abstract int RemotePort { get; set; }
|
||||||
|
|
||||||
public abstract IPAddress LocalIpAddress { get; set; }
|
public abstract IPAddress? LocalIpAddress { get; set; }
|
||||||
|
|
||||||
public abstract int LocalPort { get; set; }
|
public abstract int LocalPort { get; set; }
|
||||||
|
|
||||||
public abstract X509Certificate2 ClientCertificate { get; set; }
|
public abstract X509Certificate2? ClientCertificate { get; set; }
|
||||||
|
|
||||||
public abstract Task<X509Certificate2> GetClientCertificateAsync(CancellationToken cancellationToken = new CancellationToken());
|
public abstract Task<X509Certificate2?> GetClientCertificateAsync(CancellationToken cancellationToken = new CancellationToken());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the object used to manage user session data for this request.
|
/// Gets or sets the object used to manage user session data for this request.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract ISession? Session { get; set; }
|
public abstract ISession Session { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Aborts the connection underlying this request.
|
/// Aborts the connection underlying this request.
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a key/value collection that can be used to share data between middleware.
|
/// Gets a key/value collection that can be used to share data between middleware.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IDictionary<string, object> Properties { get; }
|
IDictionary<string, object?> Properties { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds a middleware delegate to the application's request pipeline.
|
/// Adds a middleware delegate to the application's request pipeline.
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,6 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the current <see cref="HttpContext"/>. Returns <see langword="null" /> if there is no active <see cref="HttpContext" />.
|
/// Gets or sets the current <see cref="HttpContext"/>. Returns <see langword="null" /> if there is no active <see cref="HttpContext" />.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
HttpContext HttpContext { get; set; }
|
HttpContext? HttpContext { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
public partial interface IFormFileCollection : System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyCollection<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.IEnumerable
|
public partial interface IFormFileCollection : System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyCollection<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
Microsoft.AspNetCore.Http.IFormFile this[string name] { get; }
|
Microsoft.AspNetCore.Http.IFormFile? this[string name] { get; }
|
||||||
Microsoft.AspNetCore.Http.IFormFile GetFile(string name);
|
Microsoft.AspNetCore.Http.IFormFile? GetFile(string name);
|
||||||
System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile> GetFiles(string name);
|
System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile> GetFiles(string name);
|
||||||
}
|
}
|
||||||
public partial interface IHeaderDictionary : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.Generic.IDictionary<string, Microsoft.Extensions.Primitives.StringValues>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
public partial interface IHeaderDictionary : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.Generic.IDictionary<string, Microsoft.Extensions.Primitives.StringValues>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
||||||
|
|
@ -58,10 +58,10 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public partial interface IRequestCookieCollection : System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>, System.Collections.IEnumerable
|
public partial interface IRequestCookieCollection : System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
int Count { get; }
|
int Count { get; }
|
||||||
string this[string key] { get; }
|
string? this[string key] { get; }
|
||||||
System.Collections.Generic.ICollection<string> Keys { get; }
|
System.Collections.Generic.ICollection<string> Keys { get; }
|
||||||
bool ContainsKey(string key);
|
bool ContainsKey(string key);
|
||||||
bool TryGetValue(string key, out string value);
|
bool TryGetValue(string key, [System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute(false)] out string? value);
|
||||||
}
|
}
|
||||||
public partial interface IResponseCookies
|
public partial interface IResponseCookies
|
||||||
{
|
{
|
||||||
|
|
@ -121,8 +121,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public FeatureReferences(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { throw null; }
|
public FeatureReferences(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { throw null; }
|
||||||
public Microsoft.AspNetCore.Http.Features.IFeatureCollection Collection { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public Microsoft.AspNetCore.Http.Features.IFeatureCollection Collection { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public int Revision { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public int Revision { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public TFeature Fetch<TFeature>([System.Diagnostics.CodeAnalysis.AllowNullAttribute, System.Diagnostics.CodeAnalysis.MaybeNullAttribute] ref TFeature cached, System.Func<Microsoft.AspNetCore.Http.Features.IFeatureCollection, TFeature> factory) where TFeature : class { throw null; }
|
public TFeature Fetch<TFeature>([System.Diagnostics.CodeAnalysis.AllowNullAttribute, System.Diagnostics.CodeAnalysis.MaybeNullAttribute] ref TFeature cached, System.Func<Microsoft.AspNetCore.Http.Features.IFeatureCollection, TFeature> factory) where TFeature : class? { throw null; }
|
||||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public TFeature Fetch<TFeature, TState>([System.Diagnostics.CodeAnalysis.AllowNullAttribute, System.Diagnostics.CodeAnalysis.MaybeNullAttribute] ref TFeature cached, TState state, System.Func<TState, TFeature> factory) where TFeature : class { throw null; }
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public TFeature Fetch<TFeature, TState>([System.Diagnostics.CodeAnalysis.AllowNullAttribute, System.Diagnostics.CodeAnalysis.MaybeNullAttribute] ref TFeature cached, TState state, System.Func<TState, TFeature> factory) where TFeature : class? { throw null; }
|
||||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { }
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { }
|
||||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection, int revision) { }
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection, int revision) { }
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +152,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial interface IFormFeature
|
public partial interface IFormFeature
|
||||||
{
|
{
|
||||||
Microsoft.AspNetCore.Http.IFormCollection Form { get; set; }
|
Microsoft.AspNetCore.Http.IFormCollection? Form { get; set; }
|
||||||
bool HasFormContentType { get; }
|
bool HasFormContentType { get; }
|
||||||
Microsoft.AspNetCore.Http.IFormCollection ReadForm();
|
Microsoft.AspNetCore.Http.IFormCollection ReadForm();
|
||||||
System.Threading.Tasks.Task<Microsoft.AspNetCore.Http.IFormCollection> ReadFormAsync(System.Threading.CancellationToken cancellationToken);
|
System.Threading.Tasks.Task<Microsoft.AspNetCore.Http.IFormCollection> ReadFormAsync(System.Threading.CancellationToken cancellationToken);
|
||||||
|
|
@ -170,9 +170,9 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public partial interface IHttpConnectionFeature
|
public partial interface IHttpConnectionFeature
|
||||||
{
|
{
|
||||||
string ConnectionId { get; set; }
|
string ConnectionId { get; set; }
|
||||||
System.Net.IPAddress LocalIpAddress { get; set; }
|
System.Net.IPAddress? LocalIpAddress { get; set; }
|
||||||
int LocalPort { get; set; }
|
int LocalPort { get; set; }
|
||||||
System.Net.IPAddress RemoteIpAddress { get; set; }
|
System.Net.IPAddress? RemoteIpAddress { get; set; }
|
||||||
int RemotePort { get; set; }
|
int RemotePort { get; set; }
|
||||||
}
|
}
|
||||||
public partial interface IHttpMaxRequestBodySizeFeature
|
public partial interface IHttpMaxRequestBodySizeFeature
|
||||||
|
|
@ -225,7 +225,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
System.IO.Stream Body { get; set; }
|
System.IO.Stream Body { get; set; }
|
||||||
bool HasStarted { get; }
|
bool HasStarted { get; }
|
||||||
Microsoft.AspNetCore.Http.IHeaderDictionary Headers { get; set; }
|
Microsoft.AspNetCore.Http.IHeaderDictionary Headers { get; set; }
|
||||||
string ReasonPhrase { get; set; }
|
string? ReasonPhrase { get; set; }
|
||||||
int StatusCode { get; set; }
|
int StatusCode { get; set; }
|
||||||
void OnCompleted(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
void OnCompleted(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
||||||
void OnStarting(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
void OnStarting(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
||||||
|
|
@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial interface IItemsFeature
|
public partial interface IItemsFeature
|
||||||
{
|
{
|
||||||
System.Collections.Generic.IDictionary<object, object> Items { get; set; }
|
System.Collections.Generic.IDictionary<object, object?> Items { get; set; }
|
||||||
}
|
}
|
||||||
public partial interface IQueryFeature
|
public partial interface IQueryFeature
|
||||||
{
|
{
|
||||||
|
|
@ -287,8 +287,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial interface ITlsConnectionFeature
|
public partial interface ITlsConnectionFeature
|
||||||
{
|
{
|
||||||
System.Security.Cryptography.X509Certificates.X509Certificate2 ClientCertificate { get; set; }
|
System.Security.Cryptography.X509Certificates.X509Certificate2? ClientCertificate { get; set; }
|
||||||
System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken);
|
System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2?> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
public partial interface ITlsTokenBindingFeature
|
public partial interface ITlsTokenBindingFeature
|
||||||
{
|
{
|
||||||
|
|
@ -309,6 +309,6 @@ namespace Microsoft.AspNetCore.Http.Features.Authentication
|
||||||
{
|
{
|
||||||
public partial interface IHttpAuthenticationFeature
|
public partial interface IHttpAuthenticationFeature
|
||||||
{
|
{
|
||||||
System.Security.Claims.ClaimsPrincipal User { get; set; }
|
System.Security.Claims.ClaimsPrincipal? User { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
public partial interface IFormFileCollection : System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyCollection<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.IEnumerable
|
public partial interface IFormFileCollection : System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyCollection<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
Microsoft.AspNetCore.Http.IFormFile this[string name] { get; }
|
Microsoft.AspNetCore.Http.IFormFile? this[string name] { get; }
|
||||||
Microsoft.AspNetCore.Http.IFormFile GetFile(string name);
|
Microsoft.AspNetCore.Http.IFormFile? GetFile(string name);
|
||||||
System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile> GetFiles(string name);
|
System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile> GetFiles(string name);
|
||||||
}
|
}
|
||||||
public partial interface IHeaderDictionary : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.Generic.IDictionary<string, Microsoft.Extensions.Primitives.StringValues>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
public partial interface IHeaderDictionary : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.Generic.IDictionary<string, Microsoft.Extensions.Primitives.StringValues>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
||||||
|
|
@ -58,10 +58,10 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public partial interface IRequestCookieCollection : System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>, System.Collections.IEnumerable
|
public partial interface IRequestCookieCollection : System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
int Count { get; }
|
int Count { get; }
|
||||||
string this[string key] { get; }
|
string? this[string key] { get; }
|
||||||
System.Collections.Generic.ICollection<string> Keys { get; }
|
System.Collections.Generic.ICollection<string> Keys { get; }
|
||||||
bool ContainsKey(string key);
|
bool ContainsKey(string key);
|
||||||
bool TryGetValue(string key, out string value);
|
bool TryGetValue(string key, out string? value);
|
||||||
}
|
}
|
||||||
public partial interface IResponseCookies
|
public partial interface IResponseCookies
|
||||||
{
|
{
|
||||||
|
|
@ -118,8 +118,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public FeatureReferences(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { throw null; }
|
public FeatureReferences(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { throw null; }
|
||||||
public Microsoft.AspNetCore.Http.Features.IFeatureCollection Collection { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public Microsoft.AspNetCore.Http.Features.IFeatureCollection Collection { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public int Revision { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public int Revision { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public TFeature Fetch<TFeature>(ref TFeature cached, System.Func<Microsoft.AspNetCore.Http.Features.IFeatureCollection, TFeature> factory) where TFeature : class { throw null; }
|
public TFeature Fetch<TFeature>(ref TFeature cached, System.Func<Microsoft.AspNetCore.Http.Features.IFeatureCollection, TFeature> factory) where TFeature : class? { throw null; }
|
||||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public TFeature Fetch<TFeature, TState>(ref TFeature cached, TState state, System.Func<TState, TFeature> factory) where TFeature : class { throw null; }
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public TFeature Fetch<TFeature, TState>(ref TFeature cached, TState state, System.Func<TState, TFeature> factory) where TFeature : class? { throw null; }
|
||||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { }
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection) { }
|
||||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection, int revision) { }
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]public void Initalize(Microsoft.AspNetCore.Http.Features.IFeatureCollection collection, int revision) { }
|
||||||
}
|
}
|
||||||
|
|
@ -148,7 +148,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial interface IFormFeature
|
public partial interface IFormFeature
|
||||||
{
|
{
|
||||||
Microsoft.AspNetCore.Http.IFormCollection Form { get; set; }
|
Microsoft.AspNetCore.Http.IFormCollection? Form { get; set; }
|
||||||
bool HasFormContentType { get; }
|
bool HasFormContentType { get; }
|
||||||
Microsoft.AspNetCore.Http.IFormCollection ReadForm();
|
Microsoft.AspNetCore.Http.IFormCollection ReadForm();
|
||||||
System.Threading.Tasks.Task<Microsoft.AspNetCore.Http.IFormCollection> ReadFormAsync(System.Threading.CancellationToken cancellationToken);
|
System.Threading.Tasks.Task<Microsoft.AspNetCore.Http.IFormCollection> ReadFormAsync(System.Threading.CancellationToken cancellationToken);
|
||||||
|
|
@ -166,9 +166,9 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public partial interface IHttpConnectionFeature
|
public partial interface IHttpConnectionFeature
|
||||||
{
|
{
|
||||||
string ConnectionId { get; set; }
|
string ConnectionId { get; set; }
|
||||||
System.Net.IPAddress LocalIpAddress { get; set; }
|
System.Net.IPAddress? LocalIpAddress { get; set; }
|
||||||
int LocalPort { get; set; }
|
int LocalPort { get; set; }
|
||||||
System.Net.IPAddress RemoteIpAddress { get; set; }
|
System.Net.IPAddress? RemoteIpAddress { get; set; }
|
||||||
int RemotePort { get; set; }
|
int RemotePort { get; set; }
|
||||||
}
|
}
|
||||||
public partial interface IHttpMaxRequestBodySizeFeature
|
public partial interface IHttpMaxRequestBodySizeFeature
|
||||||
|
|
@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
System.IO.Stream Body { get; set; }
|
System.IO.Stream Body { get; set; }
|
||||||
bool HasStarted { get; }
|
bool HasStarted { get; }
|
||||||
Microsoft.AspNetCore.Http.IHeaderDictionary Headers { get; set; }
|
Microsoft.AspNetCore.Http.IHeaderDictionary Headers { get; set; }
|
||||||
string ReasonPhrase { get; set; }
|
string? ReasonPhrase { get; set; }
|
||||||
int StatusCode { get; set; }
|
int StatusCode { get; set; }
|
||||||
void OnCompleted(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
void OnCompleted(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
||||||
void OnStarting(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
void OnStarting(System.Func<object, System.Threading.Tasks.Task> callback, object state);
|
||||||
|
|
@ -251,7 +251,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial interface IItemsFeature
|
public partial interface IItemsFeature
|
||||||
{
|
{
|
||||||
System.Collections.Generic.IDictionary<object, object> Items { get; set; }
|
System.Collections.Generic.IDictionary<object, object?> Items { get; set; }
|
||||||
}
|
}
|
||||||
public partial interface IQueryFeature
|
public partial interface IQueryFeature
|
||||||
{
|
{
|
||||||
|
|
@ -283,8 +283,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial interface ITlsConnectionFeature
|
public partial interface ITlsConnectionFeature
|
||||||
{
|
{
|
||||||
System.Security.Cryptography.X509Certificates.X509Certificate2 ClientCertificate { get; set; }
|
System.Security.Cryptography.X509Certificates.X509Certificate2? ClientCertificate { get; set; }
|
||||||
System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken);
|
System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2?> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
public partial interface ITlsTokenBindingFeature
|
public partial interface ITlsTokenBindingFeature
|
||||||
{
|
{
|
||||||
|
|
@ -305,6 +305,6 @@ namespace Microsoft.AspNetCore.Http.Features.Authentication
|
||||||
{
|
{
|
||||||
public partial interface IHttpAuthenticationFeature
|
public partial interface IHttpAuthenticationFeature
|
||||||
{
|
{
|
||||||
System.Security.Claims.ClaimsPrincipal User { get; set; }
|
System.Security.Claims.ClaimsPrincipal? User { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,6 @@ namespace Microsoft.AspNetCore.Http.Features.Authentication
|
||||||
{
|
{
|
||||||
public interface IHttpAuthenticationFeature
|
public interface IHttpAuthenticationFeature
|
||||||
{
|
{
|
||||||
ClaimsPrincipal User { get; set; }
|
ClaimsPrincipal? User { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,9 +62,9 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
// Generally Fetch is called at a ratio > x4 of UpdateCached so this is a large gain
|
// Generally Fetch is called at a ratio > x4 of UpdateCached so this is a large gain
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public TFeature Fetch<TFeature, TState>(
|
public TFeature Fetch<TFeature, TState>(
|
||||||
[AllowNull, MaybeNull]ref TFeature cached,
|
[AllowNull, MaybeNull] ref TFeature cached,
|
||||||
TState state,
|
TState state,
|
||||||
Func<TState, TFeature> factory) where TFeature : class
|
Func<TState, TFeature> factory) where TFeature : class?
|
||||||
{
|
{
|
||||||
var flush = false;
|
var flush = false;
|
||||||
var revision = Collection?.Revision ?? ContextDisposed();
|
var revision = Collection?.Revision ?? ContextDisposed();
|
||||||
|
|
@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update and cache clearing logic, when the fast-path in Fetch isn't applicable
|
// Update and cache clearing logic, when the fast-path in Fetch isn't applicable
|
||||||
private TFeature UpdateCached<TFeature, TState>(ref TFeature cached, TState state, Func<TState, TFeature> factory, int revision, bool flush) where TFeature : class
|
private TFeature UpdateCached<TFeature, TState>(ref TFeature cached, TState state, Func<TState, TFeature> factory, int revision, bool flush) where TFeature : class?
|
||||||
{
|
{
|
||||||
if (flush)
|
if (flush)
|
||||||
{
|
{
|
||||||
|
|
@ -108,8 +108,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TFeature Fetch<TFeature>([AllowNull, MaybeNull]ref TFeature cached, Func<IFeatureCollection, TFeature> factory)
|
public TFeature Fetch<TFeature>([AllowNull, MaybeNull] ref TFeature cached, Func<IFeatureCollection, TFeature> factory)
|
||||||
where TFeature : class => Fetch(ref cached!, Collection, factory);
|
where TFeature : class? => Fetch(ref cached!, Collection, factory);
|
||||||
|
|
||||||
private static int ContextDisposed()
|
private static int ContextDisposed()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,12 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The parsed form, if any.
|
/// The parsed form, if any.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IFormCollection Form { get; set; }
|
IFormCollection? Form { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Parses the request body as a form.
|
/// Parses the request body as a form.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns>The <see cref="IFormCollection"/>.</returns>
|
||||||
IFormCollection ReadForm();
|
IFormCollection ReadForm();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// The requested file, or null if it is not present.
|
/// The requested file, or null if it is not present.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
IFormFile this[string name] { get; }
|
IFormFile? this[string name] { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the first file with the specified name.
|
/// Gets the first file with the specified name.
|
||||||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// The requested file, or null if it is not present.
|
/// The requested file, or null if it is not present.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
IFormFile GetFile(string name);
|
IFormFile? GetFile(string name);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets an <see cref="IReadOnlyList{T}" /> containing the files of the
|
/// Gets an <see cref="IReadOnlyList{T}" /> containing the files of the
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,12 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The IPAddress of the client making the request. Note this may be for a proxy rather than the end user.
|
/// The IPAddress of the client making the request. Note this may be for a proxy rather than the end user.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IPAddress RemoteIpAddress { get; set; }
|
IPAddress? RemoteIpAddress { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The local IPAddress on which the request was received.
|
/// The local IPAddress on which the request was received.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IPAddress LocalIpAddress { get; set; }
|
IPAddress? LocalIpAddress { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The remote port of the client making the request.
|
/// The remote port of the client making the request.
|
||||||
|
|
@ -35,4 +35,4 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// </summary>
|
/// </summary>
|
||||||
int LocalPort { get; set; }
|
int LocalPort { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The reason-phrase as defined in RFC 7230. Note this field is no longer supported by HTTP/2.
|
/// The reason-phrase as defined in RFC 7230. Note this field is no longer supported by HTTP/2.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string ReasonPhrase { get; set; }
|
string? ReasonPhrase { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The response headers to send. Headers with multiple values will be emitted as multiple headers.
|
/// The response headers to send. Headers with multiple values will be emitted as multiple headers.
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,6 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public interface IItemsFeature
|
public interface IItemsFeature
|
||||||
{
|
{
|
||||||
IDictionary<object, object> Items { get; set; }
|
IDictionary<object, object?> Items { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Http
|
namespace Microsoft.AspNetCore.Http
|
||||||
{
|
{
|
||||||
|
|
@ -63,7 +64,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <exception cref="System.ArgumentNullException">
|
/// <exception cref="System.ArgumentNullException">
|
||||||
/// key is null.
|
/// key is null.
|
||||||
/// </exception>
|
/// </exception>
|
||||||
bool TryGetValue(string key, out string value);
|
bool TryGetValue(string key, [MaybeNullWhen(false)] out string? value);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the value with the specified key.
|
/// Gets the value with the specified key.
|
||||||
|
|
@ -82,6 +83,6 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <see cref="IDictionary{TKey, TValue}" />, as it will return <c>string.Empty</c> for missing entries
|
/// <see cref="IDictionary{TKey, TValue}" />, as it will return <c>string.Empty</c> for missing entries
|
||||||
/// rather than throwing an Exception.
|
/// rather than throwing an Exception.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
string this[string key] { get; }
|
string? this[string key] { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,12 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Synchronously retrieves the client certificate, if any.
|
/// Synchronously retrieves the client certificate, if any.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
X509Certificate2 ClientCertificate { get; set; }
|
X509Certificate2? ClientCertificate { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asynchronously retrieves the client certificate, if any.
|
/// Asynchronously retrieves the client certificate, if any.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<X509Certificate2> GetClientCertificateAsync(CancellationToken cancellationToken);
|
Task<X509Certificate2?> GetClientCertificateAsync(CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>$(DefaultNetCoreTargetFramework)</TargetFrameworks>
|
<TargetFrameworks>$(DefaultNetCoreTargetFramework)</TargetFrameworks>
|
||||||
|
<Nullable>annotations</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
|
<ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
|
||||||
<Compile Include="Microsoft.AspNetCore.Http.netcoreapp.cs" />
|
<Compile Include="Microsoft.AspNetCore.Http.netcoreapp.cs" />
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
public ApplicationBuilder(System.IServiceProvider serviceProvider) { }
|
public ApplicationBuilder(System.IServiceProvider serviceProvider) { }
|
||||||
public ApplicationBuilder(System.IServiceProvider serviceProvider, object server) { }
|
public ApplicationBuilder(System.IServiceProvider serviceProvider, object server) { }
|
||||||
public System.IServiceProvider ApplicationServices { get { throw null; } set { } }
|
public System.IServiceProvider ApplicationServices { get { throw null; } set { } }
|
||||||
public System.Collections.Generic.IDictionary<string, object> Properties { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public System.Collections.Generic.IDictionary<string, object?> Properties { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Http.Features.IFeatureCollection ServerFeatures { get { throw null; } }
|
public Microsoft.AspNetCore.Http.Features.IFeatureCollection ServerFeatures { get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Http.RequestDelegate Build() { throw null; }
|
public Microsoft.AspNetCore.Http.RequestDelegate Build() { throw null; }
|
||||||
public Microsoft.AspNetCore.Builder.IApplicationBuilder New() { throw null; }
|
public Microsoft.AspNetCore.Builder.IApplicationBuilder New() { throw null; }
|
||||||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public int Port { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public int Port { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public string Scheme { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public string Scheme { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public string UnixPipePath { get { throw null; } }
|
public string UnixPipePath { get { throw null; } }
|
||||||
public override bool Equals(object obj) { throw null; }
|
public override bool Equals(object? obj) { throw null; }
|
||||||
public override int GetHashCode() { throw null; }
|
public override int GetHashCode() { throw null; }
|
||||||
public static Microsoft.AspNetCore.Http.BindingAddress Parse(string address) { throw null; }
|
public static Microsoft.AspNetCore.Http.BindingAddress Parse(string address) { throw null; }
|
||||||
public override string ToString() { throw null; }
|
public override string ToString() { throw null; }
|
||||||
|
|
@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public Microsoft.AspNetCore.Http.Features.FormOptions FormOptions { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public Microsoft.AspNetCore.Http.Features.FormOptions FormOptions { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||||
public Microsoft.AspNetCore.Http.HttpContext HttpContext { get { throw null; } }
|
public Microsoft.AspNetCore.Http.HttpContext HttpContext { get { throw null; } }
|
||||||
public override System.Collections.Generic.IDictionary<object, object> Items { get { throw null; } set { } }
|
public override System.Collections.Generic.IDictionary<object, object?> Items { get { throw null; } set { } }
|
||||||
public override Microsoft.AspNetCore.Http.HttpRequest Request { get { throw null; } }
|
public override Microsoft.AspNetCore.Http.HttpRequest Request { get { throw null; } }
|
||||||
public override System.Threading.CancellationToken RequestAborted { get { throw null; } set { } }
|
public override System.Threading.CancellationToken RequestAborted { get { throw null; } set { } }
|
||||||
public override System.IServiceProvider RequestServices { get { throw null; } set { } }
|
public override System.IServiceProvider RequestServices { get { throw null; } set { } }
|
||||||
|
|
@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public partial class FormCollection : Microsoft.AspNetCore.Http.IFormCollection, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
public partial class FormCollection : Microsoft.AspNetCore.Http.IFormCollection, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
public static readonly Microsoft.AspNetCore.Http.FormCollection Empty;
|
public static readonly Microsoft.AspNetCore.Http.FormCollection Empty;
|
||||||
public FormCollection(System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues> fields, Microsoft.AspNetCore.Http.IFormFileCollection files = null) { }
|
public FormCollection(System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>? fields, Microsoft.AspNetCore.Http.IFormFileCollection? files = null) { }
|
||||||
public int Count { get { throw null; } }
|
public int Count { get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Http.IFormFileCollection Files { get { throw null; } }
|
public Microsoft.AspNetCore.Http.IFormFileCollection Files { get { throw null; } }
|
||||||
public Microsoft.Extensions.Primitives.StringValues this[string key] { get { throw null; } }
|
public Microsoft.Extensions.Primitives.StringValues this[string key] { get { throw null; } }
|
||||||
|
|
@ -96,14 +96,14 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public partial class FormFileCollection : System.Collections.Generic.List<Microsoft.AspNetCore.Http.IFormFile>, Microsoft.AspNetCore.Http.IFormFileCollection, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyCollection<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.IEnumerable
|
public partial class FormFileCollection : System.Collections.Generic.List<Microsoft.AspNetCore.Http.IFormFile>, Microsoft.AspNetCore.Http.IFormFileCollection, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyCollection<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
public FormFileCollection() { }
|
public FormFileCollection() { }
|
||||||
public Microsoft.AspNetCore.Http.IFormFile this[string name] { get { throw null; } }
|
public Microsoft.AspNetCore.Http.IFormFile? this[string name] { get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Http.IFormFile GetFile(string name) { throw null; }
|
public Microsoft.AspNetCore.Http.IFormFile? GetFile(string name) { throw null; }
|
||||||
public System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile> GetFiles(string name) { throw null; }
|
public System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Http.IFormFile> GetFiles(string name) { throw null; }
|
||||||
}
|
}
|
||||||
public partial class HeaderDictionary : Microsoft.AspNetCore.Http.IHeaderDictionary, System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.Generic.IDictionary<string, Microsoft.Extensions.Primitives.StringValues>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
public partial class HeaderDictionary : Microsoft.AspNetCore.Http.IHeaderDictionary, System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.Generic.IDictionary<string, Microsoft.Extensions.Primitives.StringValues>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
||||||
{
|
{
|
||||||
public HeaderDictionary() { }
|
public HeaderDictionary() { }
|
||||||
public HeaderDictionary(System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues> store) { }
|
public HeaderDictionary(System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>? store) { }
|
||||||
public HeaderDictionary(int capacity) { }
|
public HeaderDictionary(int capacity) { }
|
||||||
public long? ContentLength { get { throw null; } set { } }
|
public long? ContentLength { get { throw null; } set { } }
|
||||||
public int Count { get { throw null; } }
|
public int Count { get { throw null; } }
|
||||||
|
|
@ -139,15 +139,15 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public partial class HttpContextAccessor : Microsoft.AspNetCore.Http.IHttpContextAccessor
|
public partial class HttpContextAccessor : Microsoft.AspNetCore.Http.IHttpContextAccessor
|
||||||
{
|
{
|
||||||
public HttpContextAccessor() { }
|
public HttpContextAccessor() { }
|
||||||
public Microsoft.AspNetCore.Http.HttpContext HttpContext { get { throw null; } set { } }
|
public Microsoft.AspNetCore.Http.HttpContext? HttpContext { get { throw null; } set { } }
|
||||||
}
|
}
|
||||||
[System.ObsoleteAttribute("This is obsolete and will be removed in a future version. Use DefaultHttpContextFactory instead.")]
|
[System.ObsoleteAttribute("This is obsolete and will be removed in a future version. Use DefaultHttpContextFactory instead.")]
|
||||||
public partial class HttpContextFactory : Microsoft.AspNetCore.Http.IHttpContextFactory
|
public partial class HttpContextFactory : Microsoft.AspNetCore.Http.IHttpContextFactory
|
||||||
{
|
{
|
||||||
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions) { }
|
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions) { }
|
||||||
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions, Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor) { }
|
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions, Microsoft.AspNetCore.Http.IHttpContextAccessor? httpContextAccessor) { }
|
||||||
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions, Microsoft.Extensions.DependencyInjection.IServiceScopeFactory serviceScopeFactory) { }
|
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions, Microsoft.Extensions.DependencyInjection.IServiceScopeFactory serviceScopeFactory) { }
|
||||||
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions, Microsoft.Extensions.DependencyInjection.IServiceScopeFactory serviceScopeFactory, Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor) { }
|
public HttpContextFactory(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Http.Features.FormOptions> formOptions, Microsoft.Extensions.DependencyInjection.IServiceScopeFactory serviceScopeFactory, Microsoft.AspNetCore.Http.IHttpContextAccessor? httpContextAccessor) { }
|
||||||
public Microsoft.AspNetCore.Http.HttpContext Create(Microsoft.AspNetCore.Http.Features.IFeatureCollection featureCollection) { throw null; }
|
public Microsoft.AspNetCore.Http.HttpContext Create(Microsoft.AspNetCore.Http.Features.IFeatureCollection featureCollection) { throw null; }
|
||||||
public void Dispose(Microsoft.AspNetCore.Http.HttpContext httpContext) { }
|
public void Dispose(Microsoft.AspNetCore.Http.HttpContext httpContext) { }
|
||||||
}
|
}
|
||||||
|
|
@ -161,7 +161,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public partial class MiddlewareFactory : Microsoft.AspNetCore.Http.IMiddlewareFactory
|
public partial class MiddlewareFactory : Microsoft.AspNetCore.Http.IMiddlewareFactory
|
||||||
{
|
{
|
||||||
public MiddlewareFactory(System.IServiceProvider serviceProvider) { }
|
public MiddlewareFactory(System.IServiceProvider serviceProvider) { }
|
||||||
public Microsoft.AspNetCore.Http.IMiddleware Create(System.Type middlewareType) { throw null; }
|
public Microsoft.AspNetCore.Http.IMiddleware? Create(System.Type middlewareType) { throw null; }
|
||||||
public void Release(Microsoft.AspNetCore.Http.IMiddleware middleware) { }
|
public void Release(Microsoft.AspNetCore.Http.IMiddleware middleware) { }
|
||||||
}
|
}
|
||||||
public partial class QueryCollection : Microsoft.AspNetCore.Http.IQueryCollection, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
public partial class QueryCollection : Microsoft.AspNetCore.Http.IQueryCollection, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>>, System.Collections.IEnumerable
|
||||||
|
|
@ -204,7 +204,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
{
|
{
|
||||||
public StreamResponseBodyFeature(System.IO.Stream stream) { }
|
public StreamResponseBodyFeature(System.IO.Stream stream) { }
|
||||||
public StreamResponseBodyFeature(System.IO.Stream stream, Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature priorFeature) { }
|
public StreamResponseBodyFeature(System.IO.Stream stream, Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature priorFeature) { }
|
||||||
public Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature PriorFeature { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature? PriorFeature { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public System.IO.Stream Stream { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
public System.IO.Stream Stream { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||||
public System.IO.Pipelines.PipeWriter Writer { get { throw null; } }
|
public System.IO.Pipelines.PipeWriter Writer { get { throw null; } }
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute]
|
[System.Diagnostics.DebuggerStepThroughAttribute]
|
||||||
|
|
@ -228,7 +228,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public FormFeature(Microsoft.AspNetCore.Http.HttpRequest request) { }
|
public FormFeature(Microsoft.AspNetCore.Http.HttpRequest request) { }
|
||||||
public FormFeature(Microsoft.AspNetCore.Http.HttpRequest request, Microsoft.AspNetCore.Http.Features.FormOptions options) { }
|
public FormFeature(Microsoft.AspNetCore.Http.HttpRequest request, Microsoft.AspNetCore.Http.Features.FormOptions options) { }
|
||||||
public FormFeature(Microsoft.AspNetCore.Http.IFormCollection form) { }
|
public FormFeature(Microsoft.AspNetCore.Http.IFormCollection form) { }
|
||||||
public Microsoft.AspNetCore.Http.IFormCollection Form { get { throw null; } set { } }
|
public Microsoft.AspNetCore.Http.IFormCollection? Form { get { throw null; } set { } }
|
||||||
public bool HasFormContentType { get { throw null; } }
|
public bool HasFormContentType { get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Http.IFormCollection ReadForm() { throw null; }
|
public Microsoft.AspNetCore.Http.IFormCollection ReadForm() { throw null; }
|
||||||
public System.Threading.Tasks.Task<Microsoft.AspNetCore.Http.IFormCollection> ReadFormAsync() { throw null; }
|
public System.Threading.Tasks.Task<Microsoft.AspNetCore.Http.IFormCollection> ReadFormAsync() { throw null; }
|
||||||
|
|
@ -256,9 +256,9 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public HttpConnectionFeature() { }
|
public HttpConnectionFeature() { }
|
||||||
public string ConnectionId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string ConnectionId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public System.Net.IPAddress LocalIpAddress { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.Net.IPAddress? LocalIpAddress { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public int LocalPort { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public int LocalPort { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public System.Net.IPAddress RemoteIpAddress { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.Net.IPAddress? RemoteIpAddress { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public int RemotePort { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public int RemotePort { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
}
|
}
|
||||||
public partial class HttpRequestFeature : Microsoft.AspNetCore.Http.Features.IHttpRequestFeature
|
public partial class HttpRequestFeature : Microsoft.AspNetCore.Http.Features.IHttpRequestFeature
|
||||||
|
|
@ -291,7 +291,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public System.IO.Stream Body { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.IO.Stream Body { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public virtual bool HasStarted { get { throw null; } }
|
public virtual bool HasStarted { get { throw null; } }
|
||||||
public Microsoft.AspNetCore.Http.IHeaderDictionary Headers { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public Microsoft.AspNetCore.Http.IHeaderDictionary Headers { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string ReasonPhrase { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string? ReasonPhrase { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public int StatusCode { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public int StatusCode { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public virtual void OnCompleted(System.Func<object, System.Threading.Tasks.Task> callback, object state) { }
|
public virtual void OnCompleted(System.Func<object, System.Threading.Tasks.Task> callback, object state) { }
|
||||||
public virtual void OnStarting(System.Func<object, System.Threading.Tasks.Task> callback, object state) { }
|
public virtual void OnStarting(System.Func<object, System.Threading.Tasks.Task> callback, object state) { }
|
||||||
|
|
@ -299,7 +299,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public partial class ItemsFeature : Microsoft.AspNetCore.Http.Features.IItemsFeature
|
public partial class ItemsFeature : Microsoft.AspNetCore.Http.Features.IItemsFeature
|
||||||
{
|
{
|
||||||
public ItemsFeature() { }
|
public ItemsFeature() { }
|
||||||
public System.Collections.Generic.IDictionary<object, object> Items { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.Collections.Generic.IDictionary<object, object?> Items { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
}
|
}
|
||||||
public partial class QueryFeature : Microsoft.AspNetCore.Http.Features.IQueryFeature
|
public partial class QueryFeature : Microsoft.AspNetCore.Http.Features.IQueryFeature
|
||||||
{
|
{
|
||||||
|
|
@ -320,7 +320,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
public partial class RequestServicesFeature : Microsoft.AspNetCore.Http.Features.IServiceProvidersFeature, System.IAsyncDisposable, System.IDisposable
|
public partial class RequestServicesFeature : Microsoft.AspNetCore.Http.Features.IServiceProvidersFeature, System.IAsyncDisposable, System.IDisposable
|
||||||
{
|
{
|
||||||
public RequestServicesFeature(Microsoft.AspNetCore.Http.HttpContext context, Microsoft.Extensions.DependencyInjection.IServiceScopeFactory scopeFactory) { }
|
public RequestServicesFeature(Microsoft.AspNetCore.Http.HttpContext context, Microsoft.Extensions.DependencyInjection.IServiceScopeFactory? scopeFactory) { }
|
||||||
public System.IServiceProvider RequestServices { get { throw null; } set { } }
|
public System.IServiceProvider RequestServices { get { throw null; } set { } }
|
||||||
public void Dispose() { }
|
public void Dispose() { }
|
||||||
public System.Threading.Tasks.ValueTask DisposeAsync() { throw null; }
|
public System.Threading.Tasks.ValueTask DisposeAsync() { throw null; }
|
||||||
|
|
@ -328,7 +328,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public partial class ResponseCookiesFeature : Microsoft.AspNetCore.Http.Features.IResponseCookiesFeature
|
public partial class ResponseCookiesFeature : Microsoft.AspNetCore.Http.Features.IResponseCookiesFeature
|
||||||
{
|
{
|
||||||
public ResponseCookiesFeature(Microsoft.AspNetCore.Http.Features.IFeatureCollection features) { }
|
public ResponseCookiesFeature(Microsoft.AspNetCore.Http.Features.IFeatureCollection features) { }
|
||||||
public ResponseCookiesFeature(Microsoft.AspNetCore.Http.Features.IFeatureCollection features, Microsoft.Extensions.ObjectPool.ObjectPool<System.Text.StringBuilder> builderPool) { }
|
public ResponseCookiesFeature(Microsoft.AspNetCore.Http.Features.IFeatureCollection features, Microsoft.Extensions.ObjectPool.ObjectPool<System.Text.StringBuilder>? builderPool) { }
|
||||||
public Microsoft.AspNetCore.Http.IResponseCookies Cookies { get { throw null; } }
|
public Microsoft.AspNetCore.Http.IResponseCookies Cookies { get { throw null; } }
|
||||||
}
|
}
|
||||||
public partial class RouteValuesFeature : Microsoft.AspNetCore.Http.Features.IRouteValuesFeature
|
public partial class RouteValuesFeature : Microsoft.AspNetCore.Http.Features.IRouteValuesFeature
|
||||||
|
|
@ -344,8 +344,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public partial class TlsConnectionFeature : Microsoft.AspNetCore.Http.Features.ITlsConnectionFeature
|
public partial class TlsConnectionFeature : Microsoft.AspNetCore.Http.Features.ITlsConnectionFeature
|
||||||
{
|
{
|
||||||
public TlsConnectionFeature() { }
|
public TlsConnectionFeature() { }
|
||||||
public System.Security.Cryptography.X509Certificates.X509Certificate2 ClientCertificate { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.Security.Cryptography.X509Certificates.X509Certificate2? ClientCertificate { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
public System.Threading.Tasks.Task<System.Security.Cryptography.X509Certificates.X509Certificate2?> GetClientCertificateAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace Microsoft.AspNetCore.Http.Features.Authentication
|
namespace Microsoft.AspNetCore.Http.Features.Authentication
|
||||||
|
|
@ -353,7 +353,7 @@ namespace Microsoft.AspNetCore.Http.Features.Authentication
|
||||||
public partial class HttpAuthenticationFeature : Microsoft.AspNetCore.Http.Features.Authentication.IHttpAuthenticationFeature
|
public partial class HttpAuthenticationFeature : Microsoft.AspNetCore.Http.Features.Authentication.IHttpAuthenticationFeature
|
||||||
{
|
{
|
||||||
public HttpAuthenticationFeature() { }
|
public HttpAuthenticationFeature() { }
|
||||||
public System.Security.Claims.ClaimsPrincipal User { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.Security.Claims.ClaimsPrincipal? User { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace Microsoft.Extensions.DependencyInjection
|
namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,10 @@ namespace Microsoft.AspNetCore.Http
|
||||||
{
|
{
|
||||||
private const string UnixPipeHostPrefix = "unix:/";
|
private const string UnixPipeHostPrefix = "unix:/";
|
||||||
|
|
||||||
public string Host { get; private set; }
|
public string Host { get; private set; } = default!;
|
||||||
public string PathBase { get; private set; }
|
public string PathBase { get; private set; } = default!;
|
||||||
public int Port { get; internal set; }
|
public int Port { get; internal set; }
|
||||||
public string Scheme { get; private set; }
|
public string Scheme { get; private set; } = default!;
|
||||||
|
|
||||||
public bool IsUnixPipe
|
public bool IsUnixPipe
|
||||||
{
|
{
|
||||||
|
|
@ -62,7 +62,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
return ToString().GetHashCode();
|
return ToString().GetHashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object? obj)
|
||||||
{
|
{
|
||||||
var other = obj as BindingAddress;
|
var other = obj as BindingAddress;
|
||||||
if (other == null)
|
if (other == null)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
@ -20,7 +21,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
|
|
||||||
public ApplicationBuilder(IServiceProvider serviceProvider)
|
public ApplicationBuilder(IServiceProvider serviceProvider)
|
||||||
{
|
{
|
||||||
Properties = new Dictionary<string, object>(StringComparer.Ordinal);
|
Properties = new Dictionary<string, object?>(StringComparer.Ordinal);
|
||||||
ApplicationServices = serviceProvider;
|
ApplicationServices = serviceProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -32,14 +33,14 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
|
|
||||||
private ApplicationBuilder(ApplicationBuilder builder)
|
private ApplicationBuilder(ApplicationBuilder builder)
|
||||||
{
|
{
|
||||||
Properties = new CopyOnWriteDictionary<string, object>(builder.Properties, StringComparer.Ordinal);
|
Properties = new CopyOnWriteDictionary<string, object?>(builder.Properties, StringComparer.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IServiceProvider ApplicationServices
|
public IServiceProvider ApplicationServices
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return GetProperty<IServiceProvider>(ApplicationServicesKey);
|
return GetProperty<IServiceProvider>(ApplicationServicesKey)!;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
|
@ -51,16 +52,16 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return GetProperty<IFeatureCollection>(ServerFeaturesKey);
|
return GetProperty<IFeatureCollection>(ServerFeaturesKey)!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDictionary<string, object> Properties { get; }
|
public IDictionary<string, object?> Properties { get; }
|
||||||
|
|
||||||
|
[return: MaybeNull]
|
||||||
private T GetProperty<T>(string key)
|
private T GetProperty<T>(string key)
|
||||||
{
|
{
|
||||||
object value;
|
return Properties.TryGetValue(key, out var value) ? (T)value : default(T);
|
||||||
return Properties.TryGetValue(key, out value) ? (T)value : default(T);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetProperty<T>(string key, T value)
|
private void SetProperty<T>(string key, T value)
|
||||||
|
|
@ -90,7 +91,7 @@ namespace Microsoft.AspNetCore.Builder
|
||||||
if (endpointRequestDelegate != null)
|
if (endpointRequestDelegate != null)
|
||||||
{
|
{
|
||||||
var message =
|
var message =
|
||||||
$"The request reached the end of the pipeline without executing the endpoint: '{endpoint.DisplayName}'. " +
|
$"The request reached the end of the pipeline without executing the endpoint: '{endpoint!.DisplayName}'. " +
|
||||||
$"Please register the EndpointMiddleware using '{nameof(IApplicationBuilder)}.UseEndpoints(...)' if using " +
|
$"Please register the EndpointMiddleware using '{nameof(IApplicationBuilder)}.UseEndpoints(...)' if using " +
|
||||||
$"routing.";
|
$"routing.";
|
||||||
throw new InvalidOperationException(message);
|
throw new InvalidOperationException(message);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
@ -24,7 +25,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private readonly static Func<IFeatureCollection, IHttpAuthenticationFeature> _newHttpAuthenticationFeature = f => new HttpAuthenticationFeature();
|
private readonly static Func<IFeatureCollection, IHttpAuthenticationFeature> _newHttpAuthenticationFeature = f => new HttpAuthenticationFeature();
|
||||||
private readonly static Func<IFeatureCollection, IHttpRequestLifetimeFeature> _newHttpRequestLifetimeFeature = f => new HttpRequestLifetimeFeature();
|
private readonly static Func<IFeatureCollection, IHttpRequestLifetimeFeature> _newHttpRequestLifetimeFeature = f => new HttpRequestLifetimeFeature();
|
||||||
private readonly static Func<IFeatureCollection, ISessionFeature> _newSessionFeature = f => new DefaultSessionFeature();
|
private readonly static Func<IFeatureCollection, ISessionFeature> _newSessionFeature = f => new DefaultSessionFeature();
|
||||||
private readonly static Func<IFeatureCollection, ISessionFeature> _nullSessionFeature = f => null;
|
private readonly static Func<IFeatureCollection, ISessionFeature?> _nullSessionFeature = f => null;
|
||||||
private readonly static Func<IFeatureCollection, IHttpRequestIdentifierFeature> _newHttpRequestIdentifierFeature = f => new HttpRequestIdentifierFeature();
|
private readonly static Func<IFeatureCollection, IHttpRequestIdentifierFeature> _newHttpRequestIdentifierFeature = f => new HttpRequestIdentifierFeature();
|
||||||
|
|
||||||
private FeatureReferences<FeatureInterfaces> _features;
|
private FeatureReferences<FeatureInterfaces> _features;
|
||||||
|
|
@ -32,8 +33,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private readonly DefaultHttpRequest _request;
|
private readonly DefaultHttpRequest _request;
|
||||||
private readonly DefaultHttpResponse _response;
|
private readonly DefaultHttpResponse _response;
|
||||||
|
|
||||||
private DefaultConnectionInfo _connection;
|
private DefaultConnectionInfo? _connection;
|
||||||
private DefaultWebSocketManager _websockets;
|
private DefaultWebSocketManager? _websockets;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="DefaultHttpContext"/> class.
|
/// Initializes a new instance of the <see cref="DefaultHttpContext"/> class.
|
||||||
|
|
@ -92,7 +93,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// <see cref="FormOptions"/>
|
/// <see cref="FormOptions"/>
|
||||||
/// </returns>
|
/// </returns>
|
||||||
public FormOptions FormOptions { get; set; }
|
public FormOptions FormOptions { get; set; } = default!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the <see cref="IServiceScopeFactory" /> for this instance.
|
/// Gets or sets the <see cref="IServiceScopeFactory" /> for this instance.
|
||||||
|
|
@ -100,29 +101,28 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// <see cref="IServiceScopeFactory"/>
|
/// <see cref="IServiceScopeFactory"/>
|
||||||
/// </returns>
|
/// </returns>
|
||||||
public IServiceScopeFactory ServiceScopeFactory { get; set; }
|
public IServiceScopeFactory ServiceScopeFactory { get; set; } = default!;
|
||||||
|
|
||||||
private IItemsFeature ItemsFeature =>
|
private IItemsFeature ItemsFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Items, _newItemsFeature);
|
_features.Fetch(ref _features.Cache.Items, _newItemsFeature)!;
|
||||||
|
|
||||||
private IServiceProvidersFeature ServiceProvidersFeature =>
|
private IServiceProvidersFeature ServiceProvidersFeature =>
|
||||||
_features.Fetch(ref _features.Cache.ServiceProviders, this, _newServiceProvidersFeature);
|
_features.Fetch(ref _features.Cache.ServiceProviders, this, _newServiceProvidersFeature)!;
|
||||||
|
|
||||||
private IHttpAuthenticationFeature HttpAuthenticationFeature =>
|
private IHttpAuthenticationFeature HttpAuthenticationFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Authentication, _newHttpAuthenticationFeature);
|
_features.Fetch(ref _features.Cache.Authentication, _newHttpAuthenticationFeature)!;
|
||||||
|
|
||||||
private IHttpRequestLifetimeFeature LifetimeFeature =>
|
private IHttpRequestLifetimeFeature LifetimeFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Lifetime, _newHttpRequestLifetimeFeature);
|
_features.Fetch(ref _features.Cache.Lifetime, _newHttpRequestLifetimeFeature)!;
|
||||||
|
|
||||||
private ISessionFeature SessionFeature =>
|
private ISessionFeature SessionFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Session, _newSessionFeature);
|
_features.Fetch(ref _features.Cache.Session, _newSessionFeature)!;
|
||||||
|
|
||||||
private ISessionFeature SessionFeatureOrNull =>
|
private ISessionFeature? SessionFeatureOrNull =>
|
||||||
_features.Fetch(ref _features.Cache.Session, _nullSessionFeature);
|
_features.Fetch(ref _features.Cache.Session, _nullSessionFeature);
|
||||||
|
|
||||||
|
|
||||||
private IHttpRequestIdentifierFeature RequestIdentifierFeature =>
|
private IHttpRequestIdentifierFeature RequestIdentifierFeature =>
|
||||||
_features.Fetch(ref _features.Cache.RequestIdentifier, _newHttpRequestIdentifierFeature);
|
_features.Fetch(ref _features.Cache.RequestIdentifier, _newHttpRequestIdentifierFeature)!;
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public override IFeatureCollection Features => _features.Collection ?? ContextDisposed();
|
public override IFeatureCollection Features => _features.Collection ?? ContextDisposed();
|
||||||
|
|
@ -156,7 +156,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public override IDictionary<object, object> Items
|
public override IDictionary<object, object?> Items
|
||||||
{
|
{
|
||||||
get { return ItemsFeature.Items; }
|
get { return ItemsFeature.Items; }
|
||||||
set { ItemsFeature.Items = value; }
|
set { ItemsFeature.Items = value; }
|
||||||
|
|
@ -221,6 +221,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DoesNotReturn]
|
||||||
private static void ThrowContextDisposed()
|
private static void ThrowContextDisposed()
|
||||||
{
|
{
|
||||||
throw new ObjectDisposedException(nameof(HttpContext), $"Request has finished and {nameof(HttpContext)} disposed.");
|
throw new ObjectDisposedException(nameof(HttpContext), $"Request has finished and {nameof(HttpContext)} disposed.");
|
||||||
|
|
@ -228,12 +229,12 @@ namespace Microsoft.AspNetCore.Http
|
||||||
|
|
||||||
struct FeatureInterfaces
|
struct FeatureInterfaces
|
||||||
{
|
{
|
||||||
public IItemsFeature Items;
|
public IItemsFeature? Items;
|
||||||
public IServiceProvidersFeature ServiceProviders;
|
public IServiceProvidersFeature? ServiceProviders;
|
||||||
public IHttpAuthenticationFeature Authentication;
|
public IHttpAuthenticationFeature? Authentication;
|
||||||
public IHttpRequestLifetimeFeature Lifetime;
|
public IHttpRequestLifetimeFeature? Lifetime;
|
||||||
public ISessionFeature Session;
|
public ISessionFeature? Session;
|
||||||
public IHttpRequestIdentifierFeature RequestIdentifier;
|
public IHttpRequestIdentifierFeature? RequestIdentifier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,6 @@ namespace Microsoft.AspNetCore.Http.Features.Authentication
|
||||||
{
|
{
|
||||||
public class HttpAuthenticationFeature : IHttpAuthenticationFeature
|
public class HttpAuthenticationFeature : IHttpAuthenticationFeature
|
||||||
{
|
{
|
||||||
public ClaimsPrincipal User
|
public ClaimsPrincipal? User { get; set; }
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,6 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DefaultSessionFeature : ISessionFeature
|
public class DefaultSessionFeature : ISessionFeature
|
||||||
{
|
{
|
||||||
public ISession Session { get; set; }
|
public ISession Session { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
@ -16,8 +17,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
private readonly HttpRequest _request;
|
private readonly HttpRequest _request;
|
||||||
private readonly FormOptions _options;
|
private readonly FormOptions _options;
|
||||||
private Task<IFormCollection> _parsedFormTask;
|
private Task<IFormCollection>? _parsedFormTask;
|
||||||
private IFormCollection _form;
|
private IFormCollection? _form;
|
||||||
|
|
||||||
public FormFeature(IFormCollection form)
|
public FormFeature(IFormCollection form)
|
||||||
{
|
{
|
||||||
|
|
@ -27,7 +28,10 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
|
|
||||||
Form = form;
|
Form = form;
|
||||||
|
_request = default!;
|
||||||
|
_options = FormOptions.Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FormFeature(HttpRequest request)
|
public FormFeature(HttpRequest request)
|
||||||
: this(request, FormOptions.Default)
|
: this(request, FormOptions.Default)
|
||||||
{
|
{
|
||||||
|
|
@ -48,12 +52,11 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
_options = options;
|
_options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MediaTypeHeaderValue ContentType
|
private MediaTypeHeaderValue? ContentType
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
MediaTypeHeaderValue mt;
|
MediaTypeHeaderValue.TryParse(_request.ContentType, out var mt);
|
||||||
MediaTypeHeaderValue.TryParse(_request.ContentType, out mt);
|
|
||||||
return mt;
|
return mt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -73,7 +76,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IFormCollection Form
|
public IFormCollection? Form
|
||||||
{
|
{
|
||||||
get { return _form; }
|
get { return _form; }
|
||||||
set
|
set
|
||||||
|
|
@ -138,11 +141,11 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
_request.EnableRewind(_options.MemoryBufferThreshold, _options.BufferBodyLengthLimit);
|
_request.EnableRewind(_options.MemoryBufferThreshold, _options.BufferBodyLengthLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
FormCollection formFields = null;
|
FormCollection? formFields = null;
|
||||||
FormFileCollection files = null;
|
FormFileCollection? files = null;
|
||||||
|
|
||||||
// Some of these code paths use StreamReader which does not support cancellation tokens.
|
// Some of these code paths use StreamReader which does not support cancellation tokens.
|
||||||
using (cancellationToken.Register((state) => ((HttpContext)state).Abort(), _request.HttpContext))
|
using (cancellationToken.Register((state) => ((HttpContext)state!).Abort(), _request.HttpContext))
|
||||||
{
|
{
|
||||||
var contentType = ContentType;
|
var contentType = ContentType;
|
||||||
// Check the content-type
|
// Check the content-type
|
||||||
|
|
@ -270,7 +273,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
return Form;
|
return Form;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Encoding FilterEncoding(Encoding encoding)
|
private static Encoding FilterEncoding(Encoding? encoding)
|
||||||
{
|
{
|
||||||
// UTF-7 is insecure and should not be honored. UTF-8 will succeed for most cases.
|
// UTF-7 is insecure and should not be honored. UTF-8 will succeed for most cases.
|
||||||
if (encoding == null || Encoding.UTF7.Equals(encoding))
|
if (encoding == null || Encoding.UTF7.Equals(encoding))
|
||||||
|
|
@ -280,13 +283,13 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
return encoding;
|
return encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool HasApplicationFormContentType(MediaTypeHeaderValue contentType)
|
private bool HasApplicationFormContentType([NotNullWhen(true)] MediaTypeHeaderValue? contentType)
|
||||||
{
|
{
|
||||||
// Content-Type: application/x-www-form-urlencoded; charset=utf-8
|
// Content-Type: application/x-www-form-urlencoded; charset=utf-8
|
||||||
return contentType != null && contentType.MediaType.Equals("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase);
|
return contentType != null && contentType.MediaType.Equals("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool HasMultipartFormContentType(MediaTypeHeaderValue contentType)
|
private bool HasMultipartFormContentType([NotNullWhen(true)] MediaTypeHeaderValue? contentType)
|
||||||
{
|
{
|
||||||
// Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymx2fSWqWSd0OxQqq
|
// Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymx2fSWqWSd0OxQqq
|
||||||
return contentType != null && contentType.MediaType.Equals("multipart/form-data", StringComparison.OrdinalIgnoreCase);
|
return contentType != null && contentType.MediaType.Equals("multipart/form-data", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,14 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public class HttpConnectionFeature : IHttpConnectionFeature
|
public class HttpConnectionFeature : IHttpConnectionFeature
|
||||||
{
|
{
|
||||||
public string ConnectionId { get; set; }
|
public string ConnectionId { get; set; } = default!;
|
||||||
|
|
||||||
public IPAddress LocalIpAddress { get; set; }
|
public IPAddress? LocalIpAddress { get; set; }
|
||||||
|
|
||||||
public int LocalPort { get; set; }
|
public int LocalPort { get; set; }
|
||||||
|
|
||||||
public IPAddress RemoteIpAddress { get; set; }
|
public IPAddress? RemoteIpAddress { get; set; }
|
||||||
|
|
||||||
public int RemotePort { get; set; }
|
public int RemotePort { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
// for a roughly increasing _requestId over restarts
|
// for a roughly increasing _requestId over restarts
|
||||||
private static long _requestId = DateTime.UtcNow.Ticks;
|
private static long _requestId = DateTime.UtcNow.Ticks;
|
||||||
|
|
||||||
private string _id = null;
|
private string? _id = null;
|
||||||
|
|
||||||
public string TraceIdentifier
|
public string TraceIdentifier
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
|
|
||||||
public int StatusCode { get; set; }
|
public int StatusCode { get; set; }
|
||||||
|
|
||||||
public string ReasonPhrase { get; set; }
|
public string? ReasonPhrase { get; set; }
|
||||||
|
|
||||||
public IHeaderDictionary Headers { get; set; }
|
public IHeaderDictionary Headers { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,6 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
Items = new ItemsDictionary();
|
Items = new ItemsDictionary();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDictionary<object, object> Items { get; set; }
|
public IDictionary<object, object?> Items { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,12 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public class QueryFeature : IQueryFeature
|
public class QueryFeature : IQueryFeature
|
||||||
{
|
{
|
||||||
// Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
// Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
||||||
private readonly static Func<IFeatureCollection, IHttpRequestFeature> _nullRequestFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpRequestFeature?> _nullRequestFeature = f => null;
|
||||||
|
|
||||||
private FeatureReferences<IHttpRequestFeature> _features;
|
private FeatureReferences<IHttpRequestFeature> _features;
|
||||||
|
|
||||||
private string _original;
|
private string? _original;
|
||||||
private IQueryCollection _parsedValues;
|
private IQueryCollection? _parsedValues;
|
||||||
|
|
||||||
public QueryFeature(IQueryCollection query)
|
public QueryFeature(IQueryCollection query)
|
||||||
{
|
{
|
||||||
|
|
@ -37,7 +37,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpRequestFeature HttpRequestFeature =>
|
private IHttpRequestFeature HttpRequestFeature =>
|
||||||
_features.Fetch(ref _features.Cache, _nullRequestFeature);
|
_features.Fetch(ref _features.Cache, _nullRequestFeature)!;
|
||||||
|
|
||||||
public IQueryCollection Query
|
public IQueryCollection Query
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public class RequestBodyPipeFeature : IRequestBodyPipeFeature
|
public class RequestBodyPipeFeature : IRequestBodyPipeFeature
|
||||||
{
|
{
|
||||||
private PipeReader _internalPipeReader;
|
private PipeReader? _internalPipeReader;
|
||||||
private Stream _streamInstanceWhenWrapped;
|
private Stream? _streamInstanceWhenWrapped;
|
||||||
private HttpContext _context;
|
private HttpContext _context;
|
||||||
|
|
||||||
public RequestBodyPipeFeature(HttpContext context)
|
public RequestBodyPipeFeature(HttpContext context)
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,11 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public class RequestCookiesFeature : IRequestCookiesFeature
|
public class RequestCookiesFeature : IRequestCookiesFeature
|
||||||
{
|
{
|
||||||
// Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
// Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
||||||
private readonly static Func<IFeatureCollection, IHttpRequestFeature> _nullRequestFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpRequestFeature?> _nullRequestFeature = f => null;
|
||||||
|
|
||||||
private FeatureReferences<IHttpRequestFeature> _features;
|
private FeatureReferences<IHttpRequestFeature> _features;
|
||||||
private StringValues _original;
|
private StringValues _original;
|
||||||
private IRequestCookieCollection _parsedValues;
|
private IRequestCookieCollection? _parsedValues;
|
||||||
|
|
||||||
public RequestCookiesFeature(IRequestCookieCollection cookies)
|
public RequestCookiesFeature(IRequestCookieCollection cookies)
|
||||||
{
|
{
|
||||||
|
|
@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpRequestFeature HttpRequestFeature =>
|
private IHttpRequestFeature HttpRequestFeature =>
|
||||||
_features.Fetch(ref _features.Cache, _nullRequestFeature);
|
_features.Fetch(ref _features.Cache, _nullRequestFeature)!;
|
||||||
|
|
||||||
public IRequestCookieCollection Cookies
|
public IRequestCookieCollection Cookies
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public class RequestServicesFeature : IServiceProvidersFeature, IDisposable, IAsyncDisposable
|
public class RequestServicesFeature : IServiceProvidersFeature, IDisposable, IAsyncDisposable
|
||||||
{
|
{
|
||||||
private readonly IServiceScopeFactory _scopeFactory;
|
private readonly IServiceScopeFactory? _scopeFactory;
|
||||||
private IServiceProvider _requestServices;
|
private IServiceProvider? _requestServices;
|
||||||
private IServiceScope _scope;
|
private IServiceScope? _scope;
|
||||||
private bool _requestServicesSet;
|
private bool _requestServicesSet;
|
||||||
private readonly HttpContext _context;
|
private readonly HttpContext _context;
|
||||||
|
|
||||||
public RequestServicesFeature(HttpContext context, IServiceScopeFactory scopeFactory)
|
public RequestServicesFeature(HttpContext context, IServiceScopeFactory? scopeFactory)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_scopeFactory = scopeFactory;
|
_scopeFactory = scopeFactory;
|
||||||
|
|
@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
_requestServices = _scope.ServiceProvider;
|
_requestServices = _scope.ServiceProvider;
|
||||||
_requestServicesSet = true;
|
_requestServicesSet = true;
|
||||||
}
|
}
|
||||||
return _requestServices;
|
return _requestServices!;
|
||||||
}
|
}
|
||||||
|
|
||||||
set
|
set
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,10 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
public class ResponseCookiesFeature : IResponseCookiesFeature
|
public class ResponseCookiesFeature : IResponseCookiesFeature
|
||||||
{
|
{
|
||||||
// Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
// Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
||||||
private readonly static Func<IFeatureCollection, IHttpResponseFeature> _nullResponseFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpResponseFeature?> _nullResponseFeature = f => null;
|
||||||
|
|
||||||
private FeatureReferences<IHttpResponseFeature> _features;
|
private FeatureReferences<IHttpResponseFeature> _features;
|
||||||
private IResponseCookies _cookiesCollection;
|
private IResponseCookies? _cookiesCollection;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new <see cref="ResponseCookiesFeature"/> instance.
|
/// Initializes a new <see cref="ResponseCookiesFeature"/> instance.
|
||||||
|
|
@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// <see cref="IResponseCookiesFeature"/> and the <see cref="IHttpResponseFeature"/>.
|
/// <see cref="IResponseCookiesFeature"/> and the <see cref="IHttpResponseFeature"/>.
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <param name="builderPool">The <see cref="ObjectPool{T}"/>, if available.</param>
|
/// <param name="builderPool">The <see cref="ObjectPool{T}"/>, if available.</param>
|
||||||
public ResponseCookiesFeature(IFeatureCollection features, ObjectPool<StringBuilder> builderPool)
|
public ResponseCookiesFeature(IFeatureCollection features, ObjectPool<StringBuilder>? builderPool)
|
||||||
{
|
{
|
||||||
if (features == null)
|
if (features == null)
|
||||||
{
|
{
|
||||||
|
|
@ -48,7 +48,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
_features.Initalize(features);
|
_features.Initalize(features);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpResponseFeature HttpResponseFeature => _features.Fetch(ref _features.Cache, _nullResponseFeature);
|
private IHttpResponseFeature HttpResponseFeature => _features.Fetch(ref _features.Cache, _nullResponseFeature)!;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public IResponseCookies Cookies
|
public IResponseCookies Cookies
|
||||||
|
|
@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
if (_cookiesCollection == null)
|
if (_cookiesCollection == null)
|
||||||
{
|
{
|
||||||
var headers = HttpResponseFeature.Headers;
|
var headers = HttpResponseFeature.Headers;
|
||||||
_cookiesCollection = new ResponseCookies(headers, null);
|
_cookiesCollection = new ResponseCookies(headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _cookiesCollection;
|
return _cookiesCollection;
|
||||||
|
|
|
||||||
|
|
@ -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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
|
|
@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class RouteValuesFeature : IRouteValuesFeature
|
public class RouteValuesFeature : IRouteValuesFeature
|
||||||
{
|
{
|
||||||
private RouteValueDictionary _routeValues;
|
private RouteValueDictionary? _routeValues;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the <see cref="RouteValueDictionary"/> associated with the currrent
|
/// Gets or sets the <see cref="RouteValueDictionary"/> associated with the currrent
|
||||||
|
|
@ -31,4 +31,4 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
set => _routeValues = value;
|
set => _routeValues = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,6 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public class ServiceProvidersFeature : IServiceProvidersFeature
|
public class ServiceProvidersFeature : IServiceProvidersFeature
|
||||||
{
|
{
|
||||||
public IServiceProvider RequestServices { get; set; }
|
public IServiceProvider RequestServices { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,11 @@ namespace Microsoft.AspNetCore.Http.Features
|
||||||
{
|
{
|
||||||
public class TlsConnectionFeature : ITlsConnectionFeature
|
public class TlsConnectionFeature : ITlsConnectionFeature
|
||||||
{
|
{
|
||||||
public X509Certificate2 ClientCertificate { get; set; }
|
public X509Certificate2? ClientCertificate { get; set; }
|
||||||
|
|
||||||
public Task<X509Certificate2> GetClientCertificateAsync(CancellationToken cancellationToken)
|
public Task<X509Certificate2?> GetClientCertificateAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return Task.FromResult(ClientCertificate);
|
return Task.FromResult(ClientCertificate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,14 @@ namespace Microsoft.AspNetCore.Http
|
||||||
|
|
||||||
private static IFormFileCollection EmptyFiles = new FormFileCollection();
|
private static IFormFileCollection EmptyFiles = new FormFileCollection();
|
||||||
|
|
||||||
private IFormFileCollection _files;
|
private IFormFileCollection? _files;
|
||||||
|
|
||||||
private FormCollection()
|
private FormCollection()
|
||||||
{
|
{
|
||||||
// For static Empty
|
// For static Empty
|
||||||
}
|
}
|
||||||
|
|
||||||
public FormCollection(Dictionary<string, StringValues> fields, IFormFileCollection files = null)
|
public FormCollection(Dictionary<string, StringValues>? fields, IFormFileCollection? files = null)
|
||||||
{
|
{
|
||||||
// can be null
|
// can be null
|
||||||
Store = fields;
|
Store = fields;
|
||||||
|
|
@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private set { _files = value; }
|
private set { _files = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string, StringValues> Store { get; set; }
|
private Dictionary<string, StringValues>? Store { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get or sets the associated value from the collection as a single string.
|
/// Get or sets the associated value from the collection as a single string.
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the header dictionary of the uploaded file.
|
/// Gets the header dictionary of the uploaded file.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IHeaderDictionary Headers { get; set; }
|
public IHeaderDictionary Headers { get; set; } = default!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the file length in bytes.
|
/// Gets the file length in bytes.
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,10 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public class FormFileCollection : List<IFormFile>, IFormFileCollection
|
public class FormFileCollection : List<IFormFile>, IFormFileCollection
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public IFormFile this[string name] => GetFile(name);
|
public IFormFile? this[string name] => GetFile(name);
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public IFormFile GetFile(string name)
|
public IFormFile? GetFile(string name)
|
||||||
{
|
{
|
||||||
foreach (var file in this)
|
foreach (var file in this)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Microsoft.Extensions.Primitives;
|
using Microsoft.Extensions.Primitives;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
|
|
@ -25,7 +26,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public HeaderDictionary(Dictionary<string, StringValues> store)
|
public HeaderDictionary(Dictionary<string, StringValues>? store)
|
||||||
{
|
{
|
||||||
Store = store;
|
Store = store;
|
||||||
}
|
}
|
||||||
|
|
@ -35,8 +36,9 @@ namespace Microsoft.AspNetCore.Http
|
||||||
EnsureStore(capacity);
|
EnsureStore(capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string, StringValues> Store { get; set; }
|
private Dictionary<string, StringValues>? Store { get; set; }
|
||||||
|
|
||||||
|
[MemberNotNull(nameof(Store))]
|
||||||
private void EnsureStore(int capacity)
|
private void EnsureStore(int capacity)
|
||||||
{
|
{
|
||||||
if (Store == null)
|
if (Store == null)
|
||||||
|
|
@ -93,7 +95,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
StringValues IDictionary<string, StringValues>.this[string key]
|
StringValues IDictionary<string, StringValues>.this[string key]
|
||||||
{
|
{
|
||||||
get { return Store[key]; }
|
get { return this[key]; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
ThrowIfReadOnly();
|
ThrowIfReadOnly();
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private static AsyncLocal<HttpContextHolder> _httpContextCurrent = new AsyncLocal<HttpContextHolder>();
|
private static AsyncLocal<HttpContextHolder> _httpContextCurrent = new AsyncLocal<HttpContextHolder>();
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public HttpContext HttpContext
|
public HttpContext? HttpContext
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
|
|
||||||
private class HttpContextHolder
|
private class HttpContextHolder
|
||||||
{
|
{
|
||||||
public HttpContext Context;
|
public HttpContext? Context;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
[Obsolete("This is obsolete and will be removed in a future version. Use DefaultHttpContextFactory instead.")]
|
[Obsolete("This is obsolete and will be removed in a future version. Use DefaultHttpContextFactory instead.")]
|
||||||
public class HttpContextFactory : IHttpContextFactory
|
public class HttpContextFactory : IHttpContextFactory
|
||||||
{
|
{
|
||||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
private readonly IHttpContextAccessor? _httpContextAccessor;
|
||||||
private readonly FormOptions _formOptions;
|
private readonly FormOptions _formOptions;
|
||||||
private readonly IServiceScopeFactory _serviceScopeFactory;
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="formOptions">Options to set when instantianting the HTTP context object.</param>
|
/// <param name="formOptions">Options to set when instantianting the HTTP context object.</param>
|
||||||
public HttpContextFactory(IOptions<FormOptions> formOptions)
|
public HttpContextFactory(IOptions<FormOptions> formOptions)
|
||||||
: this(formOptions, serviceScopeFactory: null)
|
: this(formOptions, serviceScopeFactory: null!)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,8 +42,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="formOptions">Options to set when instantianting the HTTP context object.</param>
|
/// <param name="formOptions">Options to set when instantianting the HTTP context object.</param>
|
||||||
/// <param name="httpContextAccessor">Object to be used to access the HTTP context instance.</param>
|
/// <param name="httpContextAccessor">Object to be used to access the HTTP context instance.</param>
|
||||||
public HttpContextFactory(IOptions<FormOptions> formOptions, IHttpContextAccessor httpContextAccessor)
|
public HttpContextFactory(IOptions<FormOptions> formOptions, IHttpContextAccessor? httpContextAccessor)
|
||||||
: this(formOptions, serviceScopeFactory: null, httpContextAccessor: httpContextAccessor)
|
: this(formOptions, serviceScopeFactory: null!, httpContextAccessor: httpContextAccessor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <param name="formOptions">Options to set when instantianting the HTTP context object.</param>
|
/// <param name="formOptions">Options to set when instantianting the HTTP context object.</param>
|
||||||
/// <param name="serviceScopeFactory">Factory object used to create the service scope for the HTTP context.</param>
|
/// <param name="serviceScopeFactory">Factory object used to create the service scope for the HTTP context.</param>
|
||||||
/// <param name="httpContextAccessor">Options to set when instantianting the Default HTTP context object.</param>
|
/// <param name="httpContextAccessor">Options to set when instantianting the Default HTTP context object.</param>
|
||||||
public HttpContextFactory(IOptions<FormOptions> formOptions, IServiceScopeFactory serviceScopeFactory, IHttpContextAccessor httpContextAccessor)
|
public HttpContextFactory(IOptions<FormOptions> formOptions, IServiceScopeFactory serviceScopeFactory, IHttpContextAccessor? httpContextAccessor)
|
||||||
{
|
{
|
||||||
if (formOptions == null)
|
if (formOptions == null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -39,10 +39,10 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpConnectionFeature HttpConnectionFeature =>
|
private IHttpConnectionFeature HttpConnectionFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Connection, _newHttpConnectionFeature);
|
_features.Fetch(ref _features.Cache.Connection, _newHttpConnectionFeature)!;
|
||||||
|
|
||||||
private ITlsConnectionFeature TlsConnectionFeature=>
|
private ITlsConnectionFeature TlsConnectionFeature=>
|
||||||
_features.Fetch(ref _features.Cache.TlsConnection, _newTlsConnectionFeature);
|
_features.Fetch(ref _features.Cache.TlsConnection, _newTlsConnectionFeature)!;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override string Id
|
public override string Id
|
||||||
|
|
@ -51,7 +51,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
set { HttpConnectionFeature.ConnectionId = value; }
|
set { HttpConnectionFeature.ConnectionId = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IPAddress RemoteIpAddress
|
public override IPAddress? RemoteIpAddress
|
||||||
{
|
{
|
||||||
get { return HttpConnectionFeature.RemoteIpAddress; }
|
get { return HttpConnectionFeature.RemoteIpAddress; }
|
||||||
set { HttpConnectionFeature.RemoteIpAddress = value; }
|
set { HttpConnectionFeature.RemoteIpAddress = value; }
|
||||||
|
|
@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
set { HttpConnectionFeature.RemotePort = value; }
|
set { HttpConnectionFeature.RemotePort = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IPAddress LocalIpAddress
|
public override IPAddress? LocalIpAddress
|
||||||
{
|
{
|
||||||
get { return HttpConnectionFeature.LocalIpAddress; }
|
get { return HttpConnectionFeature.LocalIpAddress; }
|
||||||
set { HttpConnectionFeature.LocalIpAddress = value; }
|
set { HttpConnectionFeature.LocalIpAddress = value; }
|
||||||
|
|
@ -75,21 +75,21 @@ namespace Microsoft.AspNetCore.Http
|
||||||
set { HttpConnectionFeature.LocalPort = value; }
|
set { HttpConnectionFeature.LocalPort = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override X509Certificate2 ClientCertificate
|
public override X509Certificate2? ClientCertificate
|
||||||
{
|
{
|
||||||
get { return TlsConnectionFeature.ClientCertificate; }
|
get { return TlsConnectionFeature.ClientCertificate; }
|
||||||
set { TlsConnectionFeature.ClientCertificate = value; }
|
set { TlsConnectionFeature.ClientCertificate = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<X509Certificate2> GetClientCertificateAsync(CancellationToken cancellationToken = default)
|
public override Task<X509Certificate2?> GetClientCertificateAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
return TlsConnectionFeature.GetClientCertificateAsync(cancellationToken);
|
return TlsConnectionFeature.GetClientCertificateAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FeatureInterfaces
|
struct FeatureInterfaces
|
||||||
{
|
{
|
||||||
public IHttpConnectionFeature Connection;
|
public IHttpConnectionFeature? Connection;
|
||||||
public ITlsConnectionFeature TlsConnection;
|
public ITlsConnectionFeature? TlsConnection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private const string Https = "https";
|
private const string Https = "https";
|
||||||
|
|
||||||
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
||||||
private readonly static Func<IFeatureCollection, IHttpRequestFeature> _nullRequestFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpRequestFeature?> _nullRequestFeature = f => null;
|
||||||
private readonly static Func<IFeatureCollection, IQueryFeature> _newQueryFeature = f => new QueryFeature(f);
|
private readonly static Func<IFeatureCollection, IQueryFeature?> _newQueryFeature = f => new QueryFeature(f);
|
||||||
private readonly static Func<DefaultHttpRequest, IFormFeature> _newFormFeature = r => new FormFeature(r, r._context.FormOptions ?? FormOptions.Default);
|
private readonly static Func<DefaultHttpRequest, IFormFeature> _newFormFeature = r => new FormFeature(r, r._context.FormOptions ?? FormOptions.Default);
|
||||||
private readonly static Func<IFeatureCollection, IRequestCookiesFeature> _newRequestCookiesFeature = f => new RequestCookiesFeature(f);
|
private readonly static Func<IFeatureCollection, IRequestCookiesFeature> _newRequestCookiesFeature = f => new RequestCookiesFeature(f);
|
||||||
private readonly static Func<IFeatureCollection, IRouteValuesFeature> _newRouteValuesFeature = f => new RouteValuesFeature();
|
private readonly static Func<IFeatureCollection, IRouteValuesFeature> _newRouteValuesFeature = f => new RouteValuesFeature();
|
||||||
|
|
@ -52,39 +52,39 @@ namespace Microsoft.AspNetCore.Http
|
||||||
public override HttpContext HttpContext => _context;
|
public override HttpContext HttpContext => _context;
|
||||||
|
|
||||||
private IHttpRequestFeature HttpRequestFeature =>
|
private IHttpRequestFeature HttpRequestFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Request, _nullRequestFeature);
|
_features.Fetch(ref _features.Cache.Request, _nullRequestFeature)!;
|
||||||
|
|
||||||
private IQueryFeature QueryFeature =>
|
private IQueryFeature QueryFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Query, _newQueryFeature);
|
_features.Fetch(ref _features.Cache.Query, _newQueryFeature)!;
|
||||||
|
|
||||||
private IFormFeature FormFeature =>
|
private IFormFeature FormFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Form, this, _newFormFeature);
|
_features.Fetch(ref _features.Cache.Form, this, _newFormFeature)!;
|
||||||
|
|
||||||
private IRequestCookiesFeature RequestCookiesFeature =>
|
private IRequestCookiesFeature RequestCookiesFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Cookies, _newRequestCookiesFeature);
|
_features.Fetch(ref _features.Cache.Cookies, _newRequestCookiesFeature)!;
|
||||||
|
|
||||||
private IRouteValuesFeature RouteValuesFeature =>
|
private IRouteValuesFeature RouteValuesFeature =>
|
||||||
_features.Fetch(ref _features.Cache.RouteValues, _newRouteValuesFeature);
|
_features.Fetch(ref _features.Cache.RouteValues, _newRouteValuesFeature)!;
|
||||||
|
|
||||||
private IRequestBodyPipeFeature RequestBodyPipeFeature =>
|
private IRequestBodyPipeFeature RequestBodyPipeFeature =>
|
||||||
_features.Fetch(ref _features.Cache.BodyPipe, this.HttpContext, _newRequestBodyPipeFeature);
|
_features.Fetch(ref _features.Cache.BodyPipe, this.HttpContext, _newRequestBodyPipeFeature)!;
|
||||||
|
|
||||||
public override PathString PathBase
|
public override PathString PathBase
|
||||||
{
|
{
|
||||||
get { return new PathString(HttpRequestFeature.PathBase); }
|
get { return new PathString(HttpRequestFeature.PathBase); }
|
||||||
set { HttpRequestFeature.PathBase = value.Value; }
|
set { HttpRequestFeature.PathBase = value.Value ?? string.Empty; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PathString Path
|
public override PathString Path
|
||||||
{
|
{
|
||||||
get { return new PathString(HttpRequestFeature.Path); }
|
get { return new PathString(HttpRequestFeature.Path); }
|
||||||
set { HttpRequestFeature.Path = value.Value; }
|
set { HttpRequestFeature.Path = value.Value ?? string.Empty; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override QueryString QueryString
|
public override QueryString QueryString
|
||||||
{
|
{
|
||||||
get { return new QueryString(HttpRequestFeature.QueryString); }
|
get { return new QueryString(HttpRequestFeature.QueryString); }
|
||||||
set { HttpRequestFeature.QueryString = value.Value; }
|
set { HttpRequestFeature.QueryString = value.Value ?? string.Empty; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override long? ContentLength
|
public override long? ContentLength
|
||||||
|
|
@ -181,12 +181,12 @@ namespace Microsoft.AspNetCore.Http
|
||||||
|
|
||||||
struct FeatureInterfaces
|
struct FeatureInterfaces
|
||||||
{
|
{
|
||||||
public IHttpRequestFeature Request;
|
public IHttpRequestFeature? Request;
|
||||||
public IQueryFeature Query;
|
public IQueryFeature? Query;
|
||||||
public IFormFeature Form;
|
public IFormFeature? Form;
|
||||||
public IRequestCookiesFeature Cookies;
|
public IRequestCookiesFeature? Cookies;
|
||||||
public IRouteValuesFeature RouteValues;
|
public IRouteValuesFeature? RouteValues;
|
||||||
public IRequestBodyPipeFeature BodyPipe;
|
public IRequestBodyPipeFeature? BodyPipe;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ namespace Microsoft.AspNetCore.Http
|
||||||
internal sealed class DefaultHttpResponse : HttpResponse
|
internal sealed class DefaultHttpResponse : HttpResponse
|
||||||
{
|
{
|
||||||
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
||||||
private readonly static Func<IFeatureCollection, IHttpResponseFeature> _nullResponseFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpResponseFeature?> _nullResponseFeature = f => null;
|
||||||
private readonly static Func<IFeatureCollection, IHttpResponseBodyFeature> _nullResponseBodyFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpResponseBodyFeature?> _nullResponseBodyFeature = f => null;
|
||||||
private readonly static Func<IFeatureCollection, IResponseCookiesFeature> _newResponseCookiesFeature = f => new ResponseCookiesFeature(f);
|
private readonly static Func<IFeatureCollection, IResponseCookiesFeature?> _newResponseCookiesFeature = f => new ResponseCookiesFeature(f);
|
||||||
|
|
||||||
private readonly DefaultHttpContext _context;
|
private readonly DefaultHttpContext _context;
|
||||||
private FeatureReferences<FeatureInterfaces> _features;
|
private FeatureReferences<FeatureInterfaces> _features;
|
||||||
|
|
@ -43,13 +43,13 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpResponseFeature HttpResponseFeature =>
|
private IHttpResponseFeature HttpResponseFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Response, _nullResponseFeature);
|
_features.Fetch(ref _features.Cache.Response, _nullResponseFeature)!;
|
||||||
|
|
||||||
private IHttpResponseBodyFeature HttpResponseBodyFeature =>
|
private IHttpResponseBodyFeature HttpResponseBodyFeature =>
|
||||||
_features.Fetch(ref _features.Cache.ResponseBody, _nullResponseBodyFeature);
|
_features.Fetch(ref _features.Cache.ResponseBody, _nullResponseBodyFeature)!;
|
||||||
|
|
||||||
private IResponseCookiesFeature ResponseCookiesFeature =>
|
private IResponseCookiesFeature ResponseCookiesFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Cookies, _newResponseCookiesFeature);
|
_features.Fetch(ref _features.Cache.Cookies, _newResponseCookiesFeature)!;
|
||||||
|
|
||||||
public override HttpContext HttpContext { get { return _context; } }
|
public override HttpContext HttpContext { get { return _context; } }
|
||||||
|
|
||||||
|
|
@ -176,9 +176,9 @@ namespace Microsoft.AspNetCore.Http
|
||||||
|
|
||||||
struct FeatureInterfaces
|
struct FeatureInterfaces
|
||||||
{
|
{
|
||||||
public IHttpResponseFeature Response;
|
public IHttpResponseFeature? Response;
|
||||||
public IHttpResponseBodyFeature ResponseBody;
|
public IHttpResponseBodyFeature? ResponseBody;
|
||||||
public IResponseCookiesFeature Cookies;
|
public IResponseCookiesFeature? Cookies;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
internal sealed class DefaultWebSocketManager : WebSocketManager
|
internal sealed class DefaultWebSocketManager : WebSocketManager
|
||||||
{
|
{
|
||||||
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
|
||||||
private readonly static Func<IFeatureCollection, IHttpRequestFeature> _nullRequestFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpRequestFeature?> _nullRequestFeature = f => null;
|
||||||
private readonly static Func<IFeatureCollection, IHttpWebSocketFeature> _nullWebSocketFeature = f => null;
|
private readonly static Func<IFeatureCollection, IHttpWebSocketFeature?> _nullWebSocketFeature = f => null;
|
||||||
|
|
||||||
private FeatureReferences<FeatureInterfaces> _features;
|
private FeatureReferences<FeatureInterfaces> _features;
|
||||||
|
|
||||||
|
|
@ -39,10 +39,10 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpRequestFeature HttpRequestFeature =>
|
private IHttpRequestFeature HttpRequestFeature =>
|
||||||
_features.Fetch(ref _features.Cache.Request, _nullRequestFeature);
|
_features.Fetch(ref _features.Cache.Request, _nullRequestFeature)!;
|
||||||
|
|
||||||
private IHttpWebSocketFeature WebSocketFeature =>
|
private IHttpWebSocketFeature WebSocketFeature =>
|
||||||
_features.Fetch(ref _features.Cache.WebSockets, _nullWebSocketFeature);
|
_features.Fetch(ref _features.Cache.WebSockets, _nullWebSocketFeature)!;
|
||||||
|
|
||||||
public override bool IsWebSocketRequest
|
public override bool IsWebSocketRequest
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +60,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<WebSocket> AcceptWebSocketAsync(string subProtocol)
|
public override Task<WebSocket> AcceptWebSocketAsync(string? subProtocol)
|
||||||
{
|
{
|
||||||
if (WebSocketFeature == null)
|
if (WebSocketFeature == null)
|
||||||
{
|
{
|
||||||
|
|
@ -71,8 +71,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
|
|
||||||
struct FeatureInterfaces
|
struct FeatureInterfaces
|
||||||
{
|
{
|
||||||
public IHttpRequestFeature Request;
|
public IHttpRequestFeature? Request;
|
||||||
public IHttpWebSocketFeature WebSockets;
|
public IHttpWebSocketFeature? WebSockets;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,25 +3,26 @@
|
||||||
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Http
|
namespace Microsoft.AspNetCore.Http
|
||||||
{
|
{
|
||||||
internal class ItemsDictionary : IDictionary<object, object>
|
internal class ItemsDictionary : IDictionary<object, object?>
|
||||||
{
|
{
|
||||||
private IDictionary<object, object> _items;
|
private IDictionary<object, object?>? _items;
|
||||||
|
|
||||||
public ItemsDictionary()
|
public ItemsDictionary()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
public ItemsDictionary(IDictionary<object, object> items)
|
public ItemsDictionary(IDictionary<object, object?> items)
|
||||||
{
|
{
|
||||||
_items = items;
|
_items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDictionary<object, object> Items => this;
|
public IDictionary<object, object?> Items => this;
|
||||||
|
|
||||||
// Replace the indexer with one that returns null for missing values
|
// Replace the indexer with one that returns null for missing values
|
||||||
object IDictionary<object, object>.this[object key]
|
object? IDictionary<object, object?>.this[object key]
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -38,16 +39,16 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IDictionary<object, object>.Add(object key, object value)
|
void IDictionary<object, object?>.Add(object key, object? value)
|
||||||
{
|
{
|
||||||
EnsureDictionary();
|
EnsureDictionary();
|
||||||
_items.Add(key, value);
|
_items.Add(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IDictionary<object, object>.ContainsKey(object key)
|
bool IDictionary<object, object?>.ContainsKey(object key)
|
||||||
=> _items != null && _items.ContainsKey(key);
|
=> _items != null && _items.ContainsKey(key);
|
||||||
|
|
||||||
ICollection<object> IDictionary<object, object>.Keys
|
ICollection<object> IDictionary<object, object?>.Keys
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -60,16 +61,16 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IDictionary<object, object>.Remove(object key)
|
bool IDictionary<object, object?>.Remove(object key)
|
||||||
=> _items != null && _items.Remove(key);
|
=> _items != null && _items.Remove(key);
|
||||||
|
|
||||||
bool IDictionary<object, object>.TryGetValue(object key, out object value)
|
bool IDictionary<object, object?>.TryGetValue(object key, out object? value)
|
||||||
{
|
{
|
||||||
value = null;
|
value = null;
|
||||||
return _items != null && _items.TryGetValue(key, out value);
|
return _items != null && _items.TryGetValue(key, out value);
|
||||||
}
|
}
|
||||||
|
|
||||||
ICollection<object> IDictionary<object, object>.Values
|
ICollection<object?> IDictionary<object, object?>.Values
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -82,18 +83,18 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ICollection<KeyValuePair<object, object>>.Add(KeyValuePair<object, object> item)
|
void ICollection<KeyValuePair<object, object?>>.Add(KeyValuePair<object, object?> item)
|
||||||
{
|
{
|
||||||
EnsureDictionary();
|
EnsureDictionary();
|
||||||
_items.Add(item);
|
_items.Add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ICollection<KeyValuePair<object, object>>.Clear() => _items?.Clear();
|
void ICollection<KeyValuePair<object, object?>>.Clear() => _items?.Clear();
|
||||||
|
|
||||||
bool ICollection<KeyValuePair<object, object>>.Contains(KeyValuePair<object, object> item)
|
bool ICollection<KeyValuePair<object, object?>>.Contains(KeyValuePair<object, object?> item)
|
||||||
=> _items != null && _items.Contains(item);
|
=> _items != null && _items.Contains(item);
|
||||||
|
|
||||||
void ICollection<KeyValuePair<object, object>>.CopyTo(KeyValuePair<object, object>[] array, int arrayIndex)
|
void ICollection<KeyValuePair<object, object?>>.CopyTo(KeyValuePair<object, object?>[] array, int arrayIndex)
|
||||||
{
|
{
|
||||||
if (_items == null)
|
if (_items == null)
|
||||||
{
|
{
|
||||||
|
|
@ -104,11 +105,11 @@ namespace Microsoft.AspNetCore.Http
|
||||||
_items?.CopyTo(array, arrayIndex);
|
_items?.CopyTo(array, arrayIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ICollection<KeyValuePair<object, object>>.Count => _items?.Count ?? 0;
|
int ICollection<KeyValuePair<object, object?>>.Count => _items?.Count ?? 0;
|
||||||
|
|
||||||
bool ICollection<KeyValuePair<object, object>>.IsReadOnly => _items?.IsReadOnly ?? false;
|
bool ICollection<KeyValuePair<object, object?>>.IsReadOnly => _items?.IsReadOnly ?? false;
|
||||||
|
|
||||||
bool ICollection<KeyValuePair<object, object>>.Remove(KeyValuePair<object, object> item)
|
bool ICollection<KeyValuePair<object, object?>>.Remove(KeyValuePair<object, object?> item)
|
||||||
{
|
{
|
||||||
if (_items == null)
|
if (_items == null)
|
||||||
{
|
{
|
||||||
|
|
@ -122,26 +123,27 @@ namespace Microsoft.AspNetCore.Http
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MemberNotNull(nameof(_items))]
|
||||||
private void EnsureDictionary()
|
private void EnsureDictionary()
|
||||||
{
|
{
|
||||||
if (_items == null)
|
if (_items == null)
|
||||||
{
|
{
|
||||||
_items = new Dictionary<object, object>();
|
_items = new Dictionary<object, object?>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()
|
IEnumerator<KeyValuePair<object, object?>> IEnumerable<KeyValuePair<object, object?>>.GetEnumerator()
|
||||||
=> _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
|
=> _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
|
||||||
|
|
||||||
IEnumerator IEnumerable.GetEnumerator() => _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
|
IEnumerator IEnumerable.GetEnumerator() => _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
|
||||||
|
|
||||||
private class EmptyEnumerator : IEnumerator<KeyValuePair<object, object>>
|
private class EmptyEnumerator : IEnumerator<KeyValuePair<object, object?>>
|
||||||
{
|
{
|
||||||
// In own class so only initalized if GetEnumerator is called on an empty ItemsDictionary
|
// In own class so only initalized if GetEnumerator is called on an empty ItemsDictionary
|
||||||
public readonly static IEnumerator<KeyValuePair<object, object>> Instance = new EmptyEnumerator();
|
public readonly static IEnumerator<KeyValuePair<object, object?>> Instance = new EmptyEnumerator();
|
||||||
public KeyValuePair<object, object> Current => default;
|
public KeyValuePair<object, object?> Current => default;
|
||||||
|
|
||||||
object IEnumerator.Current => null;
|
object? IEnumerator.Current => null;
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{ }
|
{ }
|
||||||
|
|
@ -155,8 +157,8 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private static class EmptyDictionary
|
private static class EmptyDictionary
|
||||||
{
|
{
|
||||||
// In own class so only initalized if CopyTo is called on an empty ItemsDictionary
|
// In own class so only initalized if CopyTo is called on an empty ItemsDictionary
|
||||||
public readonly static IDictionary<object, object> Dictionary = new Dictionary<object, object>();
|
public readonly static IDictionary<object, object?> Dictionary = new Dictionary<object, object?>();
|
||||||
public static ICollection<KeyValuePair<object, object>> Collection => Dictionary;
|
public static ICollection<KeyValuePair<object, object?>> Collection => Dictionary;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Http
|
namespace Microsoft.AspNetCore.Http
|
||||||
|
|
@ -17,7 +18,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private static readonly IEnumerator<KeyValuePair<string, string>> EmptyIEnumeratorType = EmptyEnumerator;
|
private static readonly IEnumerator<KeyValuePair<string, string>> EmptyIEnumeratorType = EmptyEnumerator;
|
||||||
private static readonly IEnumerator EmptyIEnumerator = EmptyEnumerator;
|
private static readonly IEnumerator EmptyIEnumerator = EmptyEnumerator;
|
||||||
|
|
||||||
private Dictionary<string, string> Store { get; set; }
|
private Dictionary<string, string>? Store { get; set; }
|
||||||
|
|
||||||
public RequestCookieCollection()
|
public RequestCookieCollection()
|
||||||
{
|
{
|
||||||
|
|
@ -33,7 +34,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
Store = new Dictionary<string, string>(capacity, StringComparer.OrdinalIgnoreCase);
|
Store = new Dictionary<string, string>(capacity, StringComparer.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string this[string key]
|
public string? this[string key]
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
@ -47,8 +48,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
string value;
|
if (TryGetValue(key, out var value))
|
||||||
if (TryGetValue(key, out value))
|
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
@ -63,8 +63,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
return Empty;
|
return Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
IList<CookieHeaderValue> cookies;
|
if (CookieHeaderValue.TryParseList(values, out var cookies))
|
||||||
if (CookieHeaderValue.TryParseList(values, out cookies))
|
|
||||||
{
|
{
|
||||||
if (cookies.Count == 0)
|
if (cookies.Count == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -72,7 +71,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
}
|
}
|
||||||
|
|
||||||
var collection = new RequestCookieCollection(cookies.Count);
|
var collection = new RequestCookieCollection(cookies.Count);
|
||||||
var store = collection.Store;
|
var store = collection.Store!;
|
||||||
for (var i = 0; i < cookies.Count; i++)
|
for (var i = 0; i < cookies.Count; i++)
|
||||||
{
|
{
|
||||||
var cookie = cookies[i];
|
var cookie = cookies[i];
|
||||||
|
|
@ -119,7 +118,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
return Store.ContainsKey(key);
|
return Store.ContainsKey(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryGetValue(string key, out string value)
|
public bool TryGetValue(string key, [MaybeNullWhen(false)] out string? value)
|
||||||
{
|
{
|
||||||
if (Store == null)
|
if (Store == null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
|
||||||
using Microsoft.Extensions.ObjectPool;
|
|
||||||
using Microsoft.Extensions.Primitives;
|
using Microsoft.Extensions.Primitives;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
|
|
@ -19,8 +17,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// Create a new wrapper.
|
/// Create a new wrapper.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="headers">The <see cref="IHeaderDictionary"/> for the response.</param>
|
/// <param name="headers">The <see cref="IHeaderDictionary"/> for the response.</param>
|
||||||
/// <param name="builderPool">The <see cref="ObjectPool{T}"/>, if available.</param>
|
public ResponseCookies(IHeaderDictionary headers)
|
||||||
public ResponseCookies(IHeaderDictionary headers, ObjectPool<StringBuilder> builderPool)
|
|
||||||
{
|
{
|
||||||
if (headers == null)
|
if (headers == null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Description>ASP.NET Core default HTTP feature implementations.</Description>
|
<Description>ASP.NET Core default HTTP feature implementations.</Description>
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<PackageTags>aspnetcore</PackageTags>
|
<PackageTags>aspnetcore</PackageTags>
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<LangVersion>preview</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,7 @@
|
||||||
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Http
|
namespace Microsoft.AspNetCore.Http
|
||||||
|
|
@ -22,7 +18,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMiddleware Create(Type middlewareType)
|
public IMiddleware? Create(Type middlewareType)
|
||||||
{
|
{
|
||||||
return _serviceProvider.GetRequiredService(middlewareType) as IMiddleware;
|
return _serviceProvider.GetRequiredService(middlewareType) as IMiddleware;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
private static readonly IEnumerator<KeyValuePair<string, StringValues>> EmptyIEnumeratorType = EmptyEnumerator;
|
private static readonly IEnumerator<KeyValuePair<string, StringValues>> EmptyIEnumeratorType = EmptyEnumerator;
|
||||||
private static readonly IEnumerator EmptyIEnumerator = EmptyEnumerator;
|
private static readonly IEnumerator EmptyIEnumerator = EmptyEnumerator;
|
||||||
|
|
||||||
private Dictionary<string, StringValues> Store { get; set; }
|
private Dictionary<string, StringValues>? Store { get; set; }
|
||||||
|
|
||||||
public QueryCollection()
|
public QueryCollection()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class StreamResponseBodyFeature : IHttpResponseBodyFeature
|
public class StreamResponseBodyFeature : IHttpResponseBodyFeature
|
||||||
{
|
{
|
||||||
private PipeWriter _pipeWriter;
|
private PipeWriter? _pipeWriter;
|
||||||
private bool _started;
|
private bool _started;
|
||||||
private bool _completed;
|
private bool _completed;
|
||||||
private bool _disposed;
|
private bool _disposed;
|
||||||
|
|
@ -48,7 +48,7 @@ namespace Microsoft.AspNetCore.Http
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The prior feature, if any.
|
/// The prior feature, if any.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IHttpResponseBodyFeature PriorFeature { get; }
|
public IHttpResponseBodyFeature? PriorFeature { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A PipeWriter adapted over the given stream.
|
/// A PipeWriter adapted over the given stream.
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Http.Tests
|
||||||
public void DeleteCookieShouldSetDefaultPath()
|
public void DeleteCookieShouldSetDefaultPath()
|
||||||
{
|
{
|
||||||
var headers = new HeaderDictionary();
|
var headers = new HeaderDictionary();
|
||||||
var cookies = new ResponseCookies(headers, null);
|
var cookies = new ResponseCookies(headers);
|
||||||
var testCookie = "TestCookie";
|
var testCookie = "TestCookie";
|
||||||
|
|
||||||
cookies.Delete(testCookie);
|
cookies.Delete(testCookie);
|
||||||
|
|
@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Http.Tests
|
||||||
public void DeleteCookieWithCookieOptionsShouldKeepPropertiesOfCookieOptions()
|
public void DeleteCookieWithCookieOptionsShouldKeepPropertiesOfCookieOptions()
|
||||||
{
|
{
|
||||||
var headers = new HeaderDictionary();
|
var headers = new HeaderDictionary();
|
||||||
var cookies = new ResponseCookies(headers, null);
|
var cookies = new ResponseCookies(headers);
|
||||||
var testCookie = "TestCookie";
|
var testCookie = "TestCookie";
|
||||||
var time = new DateTimeOffset(2000, 1, 1, 1, 1, 1, 1, TimeSpan.Zero);
|
var time = new DateTimeOffset(2000, 1, 1, 1, 1, 1, 1, TimeSpan.Zero);
|
||||||
var options = new CookieOptions
|
var options = new CookieOptions
|
||||||
|
|
@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Http.Tests
|
||||||
public void NoParamsDeleteRemovesCookieCreatedByAdd()
|
public void NoParamsDeleteRemovesCookieCreatedByAdd()
|
||||||
{
|
{
|
||||||
var headers = new HeaderDictionary();
|
var headers = new HeaderDictionary();
|
||||||
var cookies = new ResponseCookies(headers, null);
|
var cookies = new ResponseCookies(headers);
|
||||||
var testCookie = "TestCookie";
|
var testCookie = "TestCookie";
|
||||||
|
|
||||||
cookies.Append(testCookie, testCookie);
|
cookies.Append(testCookie, testCookie);
|
||||||
|
|
@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Http.Tests
|
||||||
public void ProvidesMaxAgeWithCookieOptionsArgumentExpectMaxAgeToBeSet()
|
public void ProvidesMaxAgeWithCookieOptionsArgumentExpectMaxAgeToBeSet()
|
||||||
{
|
{
|
||||||
var headers = new HeaderDictionary();
|
var headers = new HeaderDictionary();
|
||||||
var cookies = new ResponseCookies(headers, null);
|
var cookies = new ResponseCookies(headers);
|
||||||
var cookieOptions = new CookieOptions();
|
var cookieOptions = new CookieOptions();
|
||||||
var maxAgeTime = TimeSpan.FromHours(1);
|
var maxAgeTime = TimeSpan.FromHours(1);
|
||||||
cookieOptions.MaxAge = TimeSpan.FromHours(1);
|
cookieOptions.MaxAge = TimeSpan.FromHours(1);
|
||||||
|
|
@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Http.Tests
|
||||||
string expected)
|
string expected)
|
||||||
{
|
{
|
||||||
var headers = new HeaderDictionary();
|
var headers = new HeaderDictionary();
|
||||||
var cookies = new ResponseCookies(headers, null);
|
var cookies = new ResponseCookies(headers);
|
||||||
|
|
||||||
cookies.Append(key, value);
|
cookies.Append(key, value);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
{
|
{
|
||||||
public MultipartSection() { }
|
public MultipartSection() { }
|
||||||
public long? BaseStreamOffset { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public long? BaseStreamOffset { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public System.IO.Stream? Body { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.IO.Stream Body { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string? ContentDisposition { get { throw null; } }
|
public string? ContentDisposition { get { throw null; } }
|
||||||
public string? ContentType { get { throw null; } }
|
public string? ContentType { get { throw null; } }
|
||||||
public System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>? Headers { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>? Headers { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,10 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
public Dictionary<string, StringValues>? Headers { get; set; }
|
public Dictionary<string, StringValues>? Headers { get; set; }
|
||||||
|
|
||||||
public Stream? Body { get; set; }
|
/// <summary>
|
||||||
|
/// Gets or sets the body.
|
||||||
|
/// </summary>
|
||||||
|
public Stream Body { get; set; } = default!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The position where the body starts in the total multipart body.
|
/// The position where the body starts in the total multipart body.
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,19 @@
|
||||||
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Internal
|
namespace Microsoft.Extensions.Internal
|
||||||
{
|
{
|
||||||
internal class CopyOnWriteDictionary<TKey, TValue> : IDictionary<TKey, TValue>
|
internal class CopyOnWriteDictionary<TKey, TValue> : IDictionary<TKey, TValue> where TKey : notnull
|
||||||
{
|
{
|
||||||
private readonly IDictionary<TKey, TValue> _sourceDictionary;
|
private readonly IDictionary<TKey, TValue> _sourceDictionary;
|
||||||
private readonly IEqualityComparer<TKey> _comparer;
|
private readonly IEqualityComparer<TKey> _comparer;
|
||||||
private IDictionary<TKey, TValue> _innerDictionary;
|
private IDictionary<TKey, TValue>? _innerDictionary;
|
||||||
|
|
||||||
public CopyOnWriteDictionary(
|
public CopyOnWriteDictionary(
|
||||||
IDictionary<TKey, TValue> sourceDictionary,
|
IDictionary<TKey, TValue> sourceDictionary,
|
||||||
|
|
@ -112,7 +114,7 @@ namespace Microsoft.Extensions.Internal
|
||||||
return WriteDictionary.Remove(key);
|
return WriteDictionary.Remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool TryGetValue(TKey key, out TValue value)
|
public virtual bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
|
||||||
{
|
{
|
||||||
return ReadDictionary.TryGetValue(key, out value);
|
return ReadDictionary.TryGetValue(key, out value);
|
||||||
}
|
}
|
||||||
|
|
@ -152,4 +154,4 @@ namespace Microsoft.Extensions.Internal
|
||||||
return GetEnumerator();
|
return GetEnumerator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,18 @@
|
||||||
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Internal
|
namespace Microsoft.Extensions.Internal
|
||||||
{
|
{
|
||||||
internal struct CopyOnWriteDictionaryHolder<TKey, TValue>
|
internal struct CopyOnWriteDictionaryHolder<TKey, TValue> where TKey : notnull
|
||||||
{
|
{
|
||||||
private readonly Dictionary<TKey, TValue> _source;
|
private readonly Dictionary<TKey, TValue> _source;
|
||||||
private Dictionary<TKey, TValue> _copy;
|
private Dictionary<TKey, TValue>? _copy;
|
||||||
|
|
||||||
public CopyOnWriteDictionaryHolder(Dictionary<TKey, TValue> source)
|
public CopyOnWriteDictionaryHolder(Dictionary<TKey, TValue> source)
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +131,7 @@ namespace Microsoft.Extensions.Internal
|
||||||
return WriteDictionary.Remove(key);
|
return WriteDictionary.Remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryGetValue(TKey key, out TValue value)
|
public bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
|
||||||
{
|
{
|
||||||
return ReadDictionary.TryGetValue(key, out value);
|
return ReadDictionary.TryGetValue(key, out value);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue