diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_Microsoft.VisualBasic.CompilerServices.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_Microsoft.VisualBasic.CompilerServices.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_Microsoft.VisualBasic.CompilerServices.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_Microsoft.VisualBasic.CompilerServices.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_Microsoft.VisualBasic.FileIO.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_Microsoft.VisualBasic.FileIO.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_Microsoft.VisualBasic.FileIO.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_Microsoft.VisualBasic.FileIO.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_Microsoft.VisualBasic.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_Microsoft.VisualBasic.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_Microsoft.VisualBasic.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_Microsoft.VisualBasic.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Buffers.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Buffers.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Buffers.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Buffers.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Collections.Generic.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Collections.Generic.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Collections.Generic.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Collections.Generic.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Collections.Immutable.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Collections.Immutable.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Collections.Immutable.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Collections.Immutable.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.ComponentModel.DataAnnotations.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.ComponentModel.DataAnnotations.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.ComponentModel.DataAnnotations.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.ComponentModel.DataAnnotations.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.ComponentModel.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.ComponentModel.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.ComponentModel.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.ComponentModel.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Data.Common.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Data.Common.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Data.Common.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Data.Common.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Data.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Data.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Data.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Data.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Diagnostics.CodeAnalysis.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Diagnostics.CodeAnalysis.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Diagnostics.CodeAnalysis.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Diagnostics.CodeAnalysis.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Diagnostics.Tracing.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Diagnostics.Tracing.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Diagnostics.Tracing.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Diagnostics.Tracing.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Diagnostics.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Diagnostics.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Diagnostics.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Diagnostics.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Drawing.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Drawing.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Drawing.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Drawing.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Globalization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Globalization.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Globalization.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Globalization.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.Compression.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.Compression.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.Compression.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.Compression.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.IsolatedStorage.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.IsolatedStorage.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.IsolatedStorage.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.IsolatedStorage.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.Pipes.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.Pipes.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.Pipes.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.Pipes.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.IO.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.IO.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Linq.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Linq.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Linq.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Linq.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.Http.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.Http.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.Http.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.Http.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.Security.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.Security.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.Security.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.Security.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.Sockets.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.Sockets.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.Sockets.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.Sockets.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.WebSockets.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.WebSockets.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.WebSockets.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.WebSockets.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Net.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Net.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Numerics.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Numerics.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Numerics.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Numerics.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Reflection.Emit.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Reflection.Emit.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Reflection.Emit.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Reflection.Emit.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Reflection.Metadata.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Reflection.Metadata.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Reflection.Metadata.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Reflection.Metadata.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Reflection.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Reflection.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Reflection.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Reflection.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.CompilerServices.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.CompilerServices.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.CompilerServices.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.CompilerServices.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.InteropServices.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.InteropServices.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.InteropServices.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.InteropServices.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Intrinsics.X86.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Intrinsics.X86.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Intrinsics.X86.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Intrinsics.X86.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Intrinsics.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Intrinsics.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Intrinsics.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Intrinsics.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Loader.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Loader.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Loader.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Loader.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Remoting.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Remoting.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Remoting.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Remoting.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Serialization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Serialization.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.Serialization.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.Serialization.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Runtime.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Runtime.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.Authentication.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.Authentication.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.Authentication.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.Authentication.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.Cryptography.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.Cryptography.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.Cryptography.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.Cryptography.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.Permissions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.Permissions.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.Permissions.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.Permissions.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Security.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Security.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Encodings.Web.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Encodings.Web.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Encodings.Web.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Encodings.Web.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Json.Serialization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Json.Serialization.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Json.Serialization.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Json.Serialization.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Json.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Json.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Json.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Json.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.RegularExpressions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.RegularExpressions.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.RegularExpressions.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.RegularExpressions.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Unicode.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Unicode.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.Unicode.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.Unicode.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Text.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Text.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.Channels.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.Channels.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.Channels.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.Channels.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.Tasks.Sources.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.Tasks.Sources.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.Tasks.Sources.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.Tasks.Sources.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.Tasks.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.Tasks.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.Tasks.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.Tasks.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Threading.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Threading.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Windows.Markup.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Windows.Markup.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Windows.Markup.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Windows.Markup.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Xml.Schema.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Xml.Schema.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Xml.Schema.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Xml.Schema.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Xml.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Xml.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.Xml.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.Xml.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/3.0.0_System.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/3.0.0_System.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.Registration.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.Registration.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.Registration.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.Registration.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.ComponentModel.Composition.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Data.DataSetExtensions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Data.DataSetExtensions.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Data.DataSetExtensions.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Data.DataSetExtensions.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Data.OleDb.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Data.OleDb.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Data.OleDb.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Data.OleDb.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Data.SqlClient.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Data.SqlClient.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Data.SqlClient.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Data.SqlClient.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.DiagnosticSource.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.DiagnosticSource.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.DiagnosticSource.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.DiagnosticSource.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.EventLog.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.EventLog.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.EventLog.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.EventLog.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.PerformanceCounter.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.PerformanceCounter.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.PerformanceCounter.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Diagnostics.PerformanceCounter.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.DirectoryServices.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.DirectoryServices.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.DirectoryServices.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.DirectoryServices.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Drawing.Common.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Drawing.Common.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Drawing.Common.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Drawing.Common.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.IO.Packaging.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.IO.Packaging.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.IO.Packaging.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.IO.Packaging.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.IO.Pipelines.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.IO.Pipelines.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.IO.Pipelines.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.IO.Pipelines.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Numerics.Tensors.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Numerics.Tensors.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Numerics.Tensors.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Numerics.Tensors.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Reflection.Context.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Reflection.Context.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Reflection.Context.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Reflection.Context.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Reflection.MetadataLoadContext.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Reflection.MetadataLoadContext.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Reflection.MetadataLoadContext.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Reflection.MetadataLoadContext.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Resources.Extensions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Resources.Extensions.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Resources.Extensions.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Resources.Extensions.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.CompilerServices.Unsafe.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.CompilerServices.Unsafe.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.CompilerServices.Unsafe.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.CompilerServices.Unsafe.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.Intrinsics.Experimental.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.Intrinsics.Experimental.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.Intrinsics.Experimental.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.Intrinsics.Experimental.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.UI.Xaml.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.UI.Xaml.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.UI.Xaml.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.UI.Xaml.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Runtime.WindowsRuntime.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.AccessControl.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.AccessControl.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.AccessControl.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.AccessControl.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.OpenSsl.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.OpenSsl.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.OpenSsl.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.OpenSsl.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Pkcs.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Pkcs.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Pkcs.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Pkcs.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Xml.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Xml.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Xml.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Cryptography.Xml.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Permissions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Permissions.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Permissions.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Permissions.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Principal.Windows.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Principal.Windows.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Security.Principal.Windows.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Security.Principal.Windows.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Text.Encoding.CodePages.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Text.Encoding.CodePages.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Text.Encoding.CodePages.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Text.Encoding.CodePages.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Text.Encodings.Web.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Text.Encodings.Web.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Text.Encodings.Web.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Text.Encodings.Web.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Threading.Channels.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Threading.Channels.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Threading.Channels.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Threading.Channels.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Windows.Extensions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Windows.Extensions.md similarity index 100% rename from release-notes/3.0/preview/api-diff/3.0 vs 2.2/standalone-packages/3.0.0-standalone-packages_System.Windows.Extensions.md rename to release-notes/3.0/preview/api-diff/3.0 vs 2.2/.Net/standalone-packages/3.0.0-standalone-packages_System.Windows.Extensions.md diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0.md new file mode 100644 index 00000000..2bd27e32 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0.md @@ -0,0 +1,153 @@ +# API Difference netcoreapp2.2 vs netcoreapp3.0 + +API listing follows standard diff formatting. Lines preceded by a '+' are +additions and a '-' indicates removal. + +* [Microsoft.AspNetCore](3.0.0_Microsoft.AspNetCore.md) +* [Microsoft.AspNetCore.Antiforgery](3.0.0_Microsoft.AspNetCore.Antiforgery.md) +* [Microsoft.AspNetCore.ApiAuthorization.IdentityServer](3.0.0_Microsoft.AspNetCore.ApiAuthorization.IdentityServer.md) +* [Microsoft.AspNetCore.Authentication](3.0.0_Microsoft.AspNetCore.Authentication.md) +* [Microsoft.AspNetCore.Authentication.Abstractions](3.0.0_Microsoft.AspNetCore.Authentication.Abstractions.md) +* [Microsoft.AspNetCore.Authentication.AzureAD.UI](3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.md) +* [Microsoft.AspNetCore.Authentication.AzureAD.UI.Views](3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.Views.md) +* [Microsoft.AspNetCore.Authentication.AzureADB2C.UI](3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.md) +* [Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Views](3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Views.md) +* [Microsoft.AspNetCore.Authentication.Certificate](3.0.0_Microsoft.AspNetCore.Authentication.Certificate.md) +* [Microsoft.AspNetCore.Authentication.Cookies](3.0.0_Microsoft.AspNetCore.Authentication.Cookies.md) +* [Microsoft.AspNetCore.Authentication.Core](3.0.0_Microsoft.AspNetCore.Authentication.Core.md) +* [Microsoft.AspNetCore.Authentication.Facebook](3.0.0_Microsoft.AspNetCore.Authentication.Facebook.md) +* [Microsoft.AspNetCore.Authentication.Google](3.0.0_Microsoft.AspNetCore.Authentication.Google.md) +* [Microsoft.AspNetCore.Authentication.JwtBearer](3.0.0_Microsoft.AspNetCore.Authentication.JwtBearer.md) +* [Microsoft.AspNetCore.Authentication.MicrosoftAccount](3.0.0_Microsoft.AspNetCore.Authentication.MicrosoftAccount.md) +* [Microsoft.AspNetCore.Authentication.Negotiate](3.0.0_Microsoft.AspNetCore.Authentication.Negotiate.md) +* [Microsoft.AspNetCore.Authentication.OAuth](3.0.0_Microsoft.AspNetCore.Authentication.OAuth.md) +* [Microsoft.AspNetCore.Authentication.OpenIdConnect](3.0.0_Microsoft.AspNetCore.Authentication.OpenIdConnect.md) +* [Microsoft.AspNetCore.Authentication.Twitter](3.0.0_Microsoft.AspNetCore.Authentication.Twitter.md) +* [Microsoft.AspNetCore.Authentication.WsFederation](3.0.0_Microsoft.AspNetCore.Authentication.WsFederation.md) +* [Microsoft.AspNetCore.Authorization](3.0.0_Microsoft.AspNetCore.Authorization.md) +* [Microsoft.AspNetCore.Authorization.Policy](3.0.0_Microsoft.AspNetCore.Authorization.Policy.md) +* [Microsoft.AspNetCore.AzureAppServicesIntegration](3.0.0_Microsoft.AspNetCore.AzureAppServicesIntegration.md) +* [Microsoft.AspNetCore.Blazor](3.0.0_Microsoft.AspNetCore.Blazor.md) +* [Microsoft.AspNetCore.Blazor.HttpClient](3.0.0_Microsoft.AspNetCore.Blazor.HttpClient.md) +* [Microsoft.AspNetCore.Blazor.Server](3.0.0_Microsoft.AspNetCore.Blazor.Server.md) +* [Microsoft.AspNetCore.Components](3.0.0_Microsoft.AspNetCore.Components.md) +* [Microsoft.AspNetCore.Components.Authorization](3.0.0_Microsoft.AspNetCore.Components.Authorization.md) +* [Microsoft.AspNetCore.Components.Forms](3.0.0_Microsoft.AspNetCore.Components.Forms.md) +* [Microsoft.AspNetCore.Components.Server](3.0.0_Microsoft.AspNetCore.Components.Server.md) +* [Microsoft.AspNetCore.Components.Web](3.0.0_Microsoft.AspNetCore.Components.Web.md) +* [Microsoft.AspNetCore.ConcurrencyLimiter](3.0.0_Microsoft.AspNetCore.ConcurrencyLimiter.md) +* [Microsoft.AspNetCore.Connections.Abstractions](3.0.0_Microsoft.AspNetCore.Connections.Abstractions.md) +* [Microsoft.AspNetCore.Cors](3.0.0_Microsoft.AspNetCore.Cors.md) +* [Microsoft.AspNetCore.DataProtection](3.0.0_Microsoft.AspNetCore.DataProtection.md) +* [Microsoft.AspNetCore.DataProtection.AzureStorage](3.0.0_Microsoft.AspNetCore.DataProtection.AzureStorage.md) +* [Microsoft.AspNetCore.DataProtection.SystemWeb](3.0.0_Microsoft.AspNetCore.DataProtection.SystemWeb.md) +* [Microsoft.AspNetCore.Diagnostics](3.0.0_Microsoft.AspNetCore.Diagnostics.md) +* [Microsoft.AspNetCore.Diagnostics.Abstractions](3.0.0_Microsoft.AspNetCore.Diagnostics.Abstractions.md) +* [Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore](3.0.0_Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.md) +* [Microsoft.AspNetCore.Diagnostics.HealthChecks](3.0.0_Microsoft.AspNetCore.Diagnostics.HealthChecks.md) +* [Microsoft.AspNetCore.HeaderPropagation](3.0.0_Microsoft.AspNetCore.HeaderPropagation.md) +* [Microsoft.AspNetCore.Hosting](3.0.0_Microsoft.AspNetCore.Hosting.md) +* [Microsoft.AspNetCore.Hosting.Abstractions](3.0.0_Microsoft.AspNetCore.Hosting.Abstractions.md) +* [Microsoft.AspNetCore.Hosting.Server.Abstractions](3.0.0_Microsoft.AspNetCore.Hosting.Server.Abstractions.md) +* [Microsoft.AspNetCore.Http](3.0.0_Microsoft.AspNetCore.Http.md) +* [Microsoft.AspNetCore.Http.Abstractions](3.0.0_Microsoft.AspNetCore.Http.Abstractions.md) +* [Microsoft.AspNetCore.Http.Connections](3.0.0_Microsoft.AspNetCore.Http.Connections.md) +* [Microsoft.AspNetCore.Http.Connections.Client](3.0.0_Microsoft.AspNetCore.Http.Connections.Client.md) +* [Microsoft.AspNetCore.Http.Connections.Common](3.0.0_Microsoft.AspNetCore.Http.Connections.Common.md) +* [Microsoft.AspNetCore.Http.Extensions](3.0.0_Microsoft.AspNetCore.Http.Extensions.md) +* [Microsoft.AspNetCore.Http.Features](3.0.0_Microsoft.AspNetCore.Http.Features.md) +* [Microsoft.AspNetCore.HttpOverrides](3.0.0_Microsoft.AspNetCore.HttpOverrides.md) +* [Microsoft.AspNetCore.Identity](3.0.0_Microsoft.AspNetCore.Identity.md) +* [Microsoft.AspNetCore.Identity.EntityFrameworkCore](3.0.0_Microsoft.AspNetCore.Identity.EntityFrameworkCore.md) +* [Microsoft.AspNetCore.Identity.Specification.Tests](3.0.0_Microsoft.AspNetCore.Identity.Specification.Tests.md) +* [Microsoft.AspNetCore.Identity.UI](3.0.0_Microsoft.AspNetCore.Identity.UI.md) +* [Microsoft.AspNetCore.Identity.UI.Views.V3](3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V3.md) +* [Microsoft.AspNetCore.Identity.UI.Views.V4](3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V4.md) +* [Microsoft.AspNetCore.JsonPatch](3.0.0_Microsoft.AspNetCore.JsonPatch.md) +* [Microsoft.AspNetCore.Localization](3.0.0_Microsoft.AspNetCore.Localization.md) +* [Microsoft.AspNetCore.Metadata](3.0.0_Microsoft.AspNetCore.Metadata.md) +* [Microsoft.AspNetCore.Mvc](3.0.0_Microsoft.AspNetCore.Mvc.md) +* [Microsoft.AspNetCore.Mvc.Abstractions](3.0.0_Microsoft.AspNetCore.Mvc.Abstractions.md) +* [Microsoft.AspNetCore.Mvc.ApiExplorer](3.0.0_Microsoft.AspNetCore.Mvc.ApiExplorer.md) +* [Microsoft.AspNetCore.Mvc.Components.Prerendering](3.0.0_Microsoft.AspNetCore.Mvc.Components.Prerendering.md) +* [Microsoft.AspNetCore.Mvc.Core](3.0.0_Microsoft.AspNetCore.Mvc.Core.md) +* [Microsoft.AspNetCore.Mvc.Cors](3.0.0_Microsoft.AspNetCore.Mvc.Cors.md) +* [Microsoft.AspNetCore.Mvc.DataAnnotations](3.0.0_Microsoft.AspNetCore.Mvc.DataAnnotations.md) +* [Microsoft.AspNetCore.Mvc.Formatters.Json](3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Json.md) +* [Microsoft.AspNetCore.Mvc.Formatters.Xml](3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Xml.md) +* [Microsoft.AspNetCore.Mvc.Localization](3.0.0_Microsoft.AspNetCore.Mvc.Localization.md) +* [Microsoft.AspNetCore.Mvc.NewtonsoftJson](3.0.0_Microsoft.AspNetCore.Mvc.NewtonsoftJson.md) +* [Microsoft.AspNetCore.Mvc.Razor](3.0.0_Microsoft.AspNetCore.Mvc.Razor.md) +* [Microsoft.AspNetCore.Mvc.Razor.Extensions](3.0.0_Microsoft.AspNetCore.Mvc.Razor.Extensions.md) +* [Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation](3.0.0_Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.md) +* [Microsoft.AspNetCore.Mvc.RazorPages](3.0.0_Microsoft.AspNetCore.Mvc.RazorPages.md) +* [Microsoft.AspNetCore.Mvc.TagHelpers](3.0.0_Microsoft.AspNetCore.Mvc.TagHelpers.md) +* [Microsoft.AspNetCore.Mvc.Testing](3.0.0_Microsoft.AspNetCore.Mvc.Testing.md) +* [Microsoft.AspNetCore.Mvc.ViewFeatures](3.0.0_Microsoft.AspNetCore.Mvc.ViewFeatures.md) +* [Microsoft.AspNetCore.Mvc.WebApiCompatShim](3.0.0_Microsoft.AspNetCore.Mvc.WebApiCompatShim.md) +* [Microsoft.AspNetCore.Owin](3.0.0_Microsoft.AspNetCore.Owin.md) +* [Microsoft.AspNetCore.Razor](3.0.0_Microsoft.AspNetCore.Razor.md) +* [Microsoft.AspNetCore.Razor.Language](3.0.0_Microsoft.AspNetCore.Razor.Language.md) +* [Microsoft.AspNetCore.ResponseCaching](3.0.0_Microsoft.AspNetCore.ResponseCaching.md) +* [Microsoft.AspNetCore.Rewrite](3.0.0_Microsoft.AspNetCore.Rewrite.md) +* [Microsoft.AspNetCore.Routing](3.0.0_Microsoft.AspNetCore.Routing.md) +* [Microsoft.AspNetCore.Routing.Abstractions](3.0.0_Microsoft.AspNetCore.Routing.Abstractions.md) +* [Microsoft.AspNetCore.Server.HttpSys](3.0.0_Microsoft.AspNetCore.Server.HttpSys.md) +* [Microsoft.AspNetCore.Server.IIS](3.0.0_Microsoft.AspNetCore.Server.IIS.md) +* [Microsoft.AspNetCore.Server.IISIntegration](3.0.0_Microsoft.AspNetCore.Server.IISIntegration.md) +* [Microsoft.AspNetCore.Server.Kestrel.Core](3.0.0_Microsoft.AspNetCore.Server.Kestrel.Core.md) +* [Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions](3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.md) +* [Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv](3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.md) +* [Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets](3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.md) +* [Microsoft.AspNetCore.Session](3.0.0_Microsoft.AspNetCore.Session.md) +* [Microsoft.AspNetCore.SignalR](3.0.0_Microsoft.AspNetCore.SignalR.md) +* [Microsoft.AspNetCore.SignalR.Client](3.0.0_Microsoft.AspNetCore.SignalR.Client.md) +* [Microsoft.AspNetCore.SignalR.Client.Core](3.0.0_Microsoft.AspNetCore.SignalR.Client.Core.md) +* [Microsoft.AspNetCore.SignalR.Common](3.0.0_Microsoft.AspNetCore.SignalR.Common.md) +* [Microsoft.AspNetCore.SignalR.Core](3.0.0_Microsoft.AspNetCore.SignalR.Core.md) +* [Microsoft.AspNetCore.SignalR.Protocols.Json](3.0.0_Microsoft.AspNetCore.SignalR.Protocols.Json.md) +* [Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson](3.0.0_Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.md) +* [Microsoft.AspNetCore.SignalR.Redis](3.0.0_Microsoft.AspNetCore.SignalR.Redis.md) +* [Microsoft.AspNetCore.SignalR.StackExchangeRedis](3.0.0_Microsoft.AspNetCore.SignalR.StackExchangeRedis.md) +* [Microsoft.AspNetCore.StaticFiles](3.0.0_Microsoft.AspNetCore.StaticFiles.md) +* [Microsoft.AspNetCore.TestHost](3.0.0_Microsoft.AspNetCore.TestHost.md) +* [Microsoft.AspNetCore.WebSockets](3.0.0_Microsoft.AspNetCore.WebSockets.md) +* [Microsoft.AspNetCore.WebUtilities](3.0.0_Microsoft.AspNetCore.WebUtilities.md) +* [Microsoft.CodeAnalysis.Razor](3.0.0_Microsoft.CodeAnalysis.Razor.md) +* [Microsoft.Extensions.Caching.Memory](3.0.0_Microsoft.Extensions.Caching.Memory.md) +* [Microsoft.Extensions.Configuration](3.0.0_Microsoft.Extensions.Configuration.md) +* [Microsoft.Extensions.Configuration.Abstractions](3.0.0_Microsoft.Extensions.Configuration.Abstractions.md) +* [Microsoft.Extensions.Configuration.AzureKeyVault](3.0.0_Microsoft.Extensions.Configuration.AzureKeyVault.md) +* [Microsoft.Extensions.Configuration.FileExtensions](3.0.0_Microsoft.Extensions.Configuration.FileExtensions.md) +* [Microsoft.Extensions.Configuration.Ini](3.0.0_Microsoft.Extensions.Configuration.Ini.md) +* [Microsoft.Extensions.Configuration.Json](3.0.0_Microsoft.Extensions.Configuration.Json.md) +* [Microsoft.Extensions.Configuration.KeyPerFile](3.0.0_Microsoft.Extensions.Configuration.KeyPerFile.md) +* [Microsoft.Extensions.Configuration.NewtonsoftJson](3.0.0_Microsoft.Extensions.Configuration.NewtonsoftJson.md) +* [Microsoft.Extensions.Configuration.UserSecrets](3.0.0_Microsoft.Extensions.Configuration.UserSecrets.md) +* [Microsoft.Extensions.Configuration.Xml](3.0.0_Microsoft.Extensions.Configuration.Xml.md) +* [Microsoft.Extensions.DependencyInjection](3.0.0_Microsoft.Extensions.DependencyInjection.md) +* [Microsoft.Extensions.DependencyInjection.Abstractions](3.0.0_Microsoft.Extensions.DependencyInjection.Abstractions.md) +* [Microsoft.Extensions.DependencyInjection.Specification.Tests](3.0.0_Microsoft.Extensions.DependencyInjection.Specification.Tests.md) +* [Microsoft.Extensions.DependencyModel](3.0.0_Microsoft.Extensions.DependencyModel.md) +* [Microsoft.Extensions.Diagnostics.HealthChecks](3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.md) +* [Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions](3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.md) +* [Microsoft.Extensions.Hosting](3.0.0_Microsoft.Extensions.Hosting.md) +* [Microsoft.Extensions.Hosting.Abstractions](3.0.0_Microsoft.Extensions.Hosting.Abstractions.md) +* [Microsoft.Extensions.Hosting.Systemd](3.0.0_Microsoft.Extensions.Hosting.Systemd.md) +* [Microsoft.Extensions.Hosting.WindowsServices](3.0.0_Microsoft.Extensions.Hosting.WindowsServices.md) +* [Microsoft.Extensions.Http.Polly](3.0.0_Microsoft.Extensions.Http.Polly.md) +* [Microsoft.Extensions.Identity.Core](3.0.0_Microsoft.Extensions.Identity.Core.md) +* [Microsoft.Extensions.Localization.Abstractions](3.0.0_Microsoft.Extensions.Localization.Abstractions.md) +* [Microsoft.Extensions.Logging](3.0.0_Microsoft.Extensions.Logging.md) +* [Microsoft.Extensions.Logging.Abstractions](3.0.0_Microsoft.Extensions.Logging.Abstractions.md) +* [Microsoft.Extensions.Logging.AzureAppServices](3.0.0_Microsoft.Extensions.Logging.AzureAppServices.md) +* [Microsoft.Extensions.Logging.Configuration](3.0.0_Microsoft.Extensions.Logging.Configuration.md) +* [Microsoft.Extensions.Logging.Console](3.0.0_Microsoft.Extensions.Logging.Console.md) +* [Microsoft.Extensions.Logging.Debug](3.0.0_Microsoft.Extensions.Logging.Debug.md) +* [Microsoft.Extensions.Logging.EventLog](3.0.0_Microsoft.Extensions.Logging.EventLog.md) +* [Microsoft.Extensions.Logging.EventSource](3.0.0_Microsoft.Extensions.Logging.EventSource.md) +* [Microsoft.Extensions.Logging.TraceSource](3.0.0_Microsoft.Extensions.Logging.TraceSource.md) +* [Microsoft.Extensions.ObjectPool](3.0.0_Microsoft.Extensions.ObjectPool.md) +* [Microsoft.Extensions.Options](3.0.0_Microsoft.Extensions.Options.md) +* [Microsoft.JSInterop](3.0.0_Microsoft.JSInterop.md) +* [Mono.WebAssembly.Interop](3.0.0_Mono.WebAssembly.Interop.md) diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Antiforgery.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Antiforgery.md new file mode 100644 index 00000000..4dc20e2c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Antiforgery.md @@ -0,0 +1,240 @@ +# Microsoft.AspNetCore.Antiforgery + +``` diff + { + namespace Microsoft.AspNetCore.Antiforgery { + public class AntiforgeryOptions { +- public string CookieDomain { get; set; } + +- public string CookieName { get; set; } + +- public PathString? CookiePath { get; set; } + +- public bool RequireSsl { get; set; } + + } + } +- namespace Microsoft.AspNetCore.Antiforgery.Internal { + { +- public class AntiforgeryFeature : IAntiforgeryFeature { + { +- public AntiforgeryFeature(); + +- public AntiforgeryToken CookieToken { get; set; } + +- public bool HaveDeserializedCookieToken { get; set; } + +- public bool HaveDeserializedRequestToken { get; set; } + +- public bool HaveGeneratedNewCookieToken { get; set; } + +- public bool HaveStoredNewCookieToken { get; set; } + +- public AntiforgeryToken NewCookieToken { get; set; } + +- public string NewCookieTokenString { get; set; } + +- public AntiforgeryToken NewRequestToken { get; set; } + +- public string NewRequestTokenString { get; set; } + +- public AntiforgeryToken RequestToken { get; set; } + +- } +- public class AntiforgeryOptionsSetup : ConfigureOptions { + { +- public AntiforgeryOptionsSetup(IOptions dataProtectionOptionsAccessor); + +- public static void ConfigureOptions(AntiforgeryOptions options, DataProtectionOptions dataProtectionOptions); + +- } +- public class AntiforgerySerializationContext { + { +- public AntiforgerySerializationContext(); + +- public BinaryReader Reader { get; private set; } + +- public SHA256 Sha256 { get; private set; } + +- public MemoryStream Stream { get; private set; } + +- public BinaryWriter Writer { get; private set; } + +- public char[] GetChars(int count); + +- public void Reset(); + +- } +- public class AntiforgerySerializationContextPooledObjectPolicy : IPooledObjectPolicy { + { +- public AntiforgerySerializationContextPooledObjectPolicy(); + +- public AntiforgerySerializationContext Create(); + +- public bool Return(AntiforgerySerializationContext obj); + +- } +- public sealed class AntiforgeryToken { + { +- public AntiforgeryToken(); + +- public string AdditionalData { get; set; } + +- public BinaryBlob ClaimUid { get; set; } + +- public bool IsCookieToken { get; set; } + +- public BinaryBlob SecurityToken { get; set; } + +- public string Username { get; set; } + +- } +- public sealed class BinaryBlob : IEquatable { + { +- public BinaryBlob(int bitLength); + +- public BinaryBlob(int bitLength, byte[] data); + +- public int BitLength { get; } + +- public bool Equals(BinaryBlob other); + +- public override bool Equals(object obj); + +- public byte[] GetData(); + +- public override int GetHashCode(); + +- } +- public static class CryptographyAlgorithms { + { +- public static SHA256 CreateSHA256(); + +- } +- public class DefaultAntiforgery : IAntiforgery { + { +- public DefaultAntiforgery(IOptions antiforgeryOptionsAccessor, IAntiforgeryTokenGenerator tokenGenerator, IAntiforgeryTokenSerializer tokenSerializer, IAntiforgeryTokenStore tokenStore, ILoggerFactory loggerFactory); + +- public AntiforgeryTokenSet GetAndStoreTokens(HttpContext httpContext); + +- public AntiforgeryTokenSet GetTokens(HttpContext httpContext); + +- public Task IsRequestValidAsync(HttpContext httpContext); + +- public void SetCookieTokenAndHeader(HttpContext httpContext); + +- protected virtual void SetDoNotCacheHeaders(HttpContext httpContext); + +- public Task ValidateRequestAsync(HttpContext httpContext); + +- } +- public class DefaultAntiforgeryAdditionalDataProvider : IAntiforgeryAdditionalDataProvider { + { +- public DefaultAntiforgeryAdditionalDataProvider(); + +- public virtual string GetAdditionalData(HttpContext context); + +- public virtual bool ValidateAdditionalData(HttpContext context, string additionalData); + +- } +- public class DefaultAntiforgeryTokenGenerator : IAntiforgeryTokenGenerator { + { +- public DefaultAntiforgeryTokenGenerator(IClaimUidExtractor claimUidExtractor, IAntiforgeryAdditionalDataProvider additionalDataProvider); + +- public AntiforgeryToken GenerateCookieToken(); + +- public AntiforgeryToken GenerateRequestToken(HttpContext httpContext, AntiforgeryToken cookieToken); + +- public bool IsCookieTokenValid(AntiforgeryToken cookieToken); + +- public bool TryValidateTokenSet(HttpContext httpContext, AntiforgeryToken cookieToken, AntiforgeryToken requestToken, out string message); + +- } +- public class DefaultAntiforgeryTokenSerializer : IAntiforgeryTokenSerializer { + { +- public DefaultAntiforgeryTokenSerializer(IDataProtectionProvider provider, ObjectPool pool); + +- public AntiforgeryToken Deserialize(string serializedToken); + +- public string Serialize(AntiforgeryToken token); + +- } +- public class DefaultAntiforgeryTokenStore : IAntiforgeryTokenStore { + { +- public DefaultAntiforgeryTokenStore(IOptions optionsAccessor); + +- public string GetCookieToken(HttpContext httpContext); + +- public Task GetRequestTokensAsync(HttpContext httpContext); + +- public void SaveCookieToken(HttpContext httpContext, string token); + +- } +- public class DefaultClaimUidExtractor : IClaimUidExtractor { + { +- public DefaultClaimUidExtractor(ObjectPool pool); + +- public string ExtractClaimUid(ClaimsPrincipal claimsPrincipal); + +- public static IList GetUniqueIdentifierParameters(IEnumerable claimsIdentities); + +- } +- public interface IAntiforgeryFeature { + { +- AntiforgeryToken CookieToken { get; set; } + +- bool HaveDeserializedCookieToken { get; set; } + +- bool HaveDeserializedRequestToken { get; set; } + +- bool HaveGeneratedNewCookieToken { get; set; } + +- bool HaveStoredNewCookieToken { get; set; } + +- AntiforgeryToken NewCookieToken { get; set; } + +- string NewCookieTokenString { get; set; } + +- AntiforgeryToken NewRequestToken { get; set; } + +- string NewRequestTokenString { get; set; } + +- AntiforgeryToken RequestToken { get; set; } + +- } +- public interface IAntiforgeryTokenGenerator { + { +- AntiforgeryToken GenerateCookieToken(); + +- AntiforgeryToken GenerateRequestToken(HttpContext httpContext, AntiforgeryToken cookieToken); + +- bool IsCookieTokenValid(AntiforgeryToken cookieToken); + +- bool TryValidateTokenSet(HttpContext httpContext, AntiforgeryToken cookieToken, AntiforgeryToken requestToken, out string message); + +- } +- public interface IAntiforgeryTokenSerializer { + { +- AntiforgeryToken Deserialize(string serializedToken); + +- string Serialize(AntiforgeryToken token); + +- } +- public interface IAntiforgeryTokenStore { + { +- string GetCookieToken(HttpContext httpContext); + +- Task GetRequestTokensAsync(HttpContext httpContext); + +- void SaveCookieToken(HttpContext httpContext, string token); + +- } +- public interface IClaimUidExtractor { + { +- string ExtractClaimUid(ClaimsPrincipal claimsPrincipal); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ApiAuthorization.IdentityServer.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ApiAuthorization.IdentityServer.md new file mode 100644 index 00000000..d4d5c4d5 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ApiAuthorization.IdentityServer.md @@ -0,0 +1,142 @@ +# Microsoft.AspNetCore.ApiAuthorization.IdentityServer + +``` diff + { ++ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer { ++ public class ApiAuthorizationDbContext : IdentityDbContext, IDisposable, IPersistedGrantDbContext where TUser : IdentityUser { ++ public ApiAuthorizationDbContext(DbContextOptions options, IOptions operationalStoreOptions); ++ public DbSet DeviceFlowCodes { get; set; } ++ public DbSet PersistedGrants { get; set; } ++ Task IdentityServer4.EntityFramework.Interfaces.IPersistedGrantDbContext.SaveChangesAsync(); ++ protected override void OnModelCreating(ModelBuilder builder); ++ } ++ public class ApiAuthorizationOptions { ++ public ApiAuthorizationOptions(); ++ public ApiResourceCollection ApiResources { get; set; } ++ public ClientCollection Clients { get; set; } ++ public IdentityResourceCollection IdentityResources { get; set; } ++ public SigningCredentials SigningCredential { get; set; } ++ } ++ public class ApiResourceBuilder { ++ public ApiResourceBuilder(); ++ public ApiResourceBuilder(ApiResource resource); ++ public ApiResourceBuilder AllowAllClients(); ++ public static ApiResourceBuilder ApiResource(string name); ++ public ApiResource Build(); ++ public static ApiResourceBuilder IdentityServerJwt(string name); ++ public ApiResourceBuilder ReplaceScopes(params string[] resourceScopes); ++ public ApiResourceBuilder WithApplicationProfile(string profile); ++ public ApiResourceBuilder WithScopes(params string[] resourceScopes); ++ } ++ public class ApiResourceCollection : Collection { ++ public ApiResourceCollection(); ++ public ApiResourceCollection(IList list); ++ public ApiResource this[string key] { get; } ++ public void AddApiResource(string name, Action configure); ++ public void AddIdentityServerJwt(string name, Action configure); ++ public void AddRange(params ApiResource[] resources); ++ } ++ public static class ApplicationProfiles { ++ public const string API = "API"; ++ public const string IdentityServerJwt = "IdentityServerJwt"; ++ public const string IdentityServerSPA = "IdentityServerSPA"; ++ public const string NativeApp = "NativeApp"; ++ public const string SPA = "SPA"; ++ } ++ public static class ApplicationProfilesPropertyNames { ++ public const string Clients = "Clients"; ++ public const string Profile = "Profile"; ++ public const string Source = "Source"; ++ } ++ public static class ApplicationProfilesPropertyValues { ++ public const string AllowAllApplications = "*"; ++ public const string Configuration = "Configuration"; ++ public const string Default = "Default"; ++ } ++ public class ClientBuilder { ++ public ClientBuilder(); ++ public ClientBuilder(Client client); ++ public Client Build(); ++ public static ClientBuilder IdentityServerSPA(string clientId); ++ public static ClientBuilder NativeApp(string clientId); ++ public static ClientBuilder SPA(string clientId); ++ public ClientBuilder WithApplicationProfile(string profile); ++ public ClientBuilder WithClientId(string clientId); ++ public ClientBuilder WithLogoutRedirectUri(string logoutUri); ++ public ClientBuilder WithoutClientSecrets(); ++ public ClientBuilder WithRedirectUri(string redirectUri); ++ public ClientBuilder WithScopes(params string[] scopes); ++ } ++ public class ClientCollection : Collection { ++ public ClientCollection(); ++ public ClientCollection(IList list); ++ public Client this[string key] { get; } ++ public void AddIdentityServerSPA(string clientId, Action configure); ++ public void AddNativeApp(string clientId, Action configure); ++ public void AddRange(params Client[] clients); ++ public void AddSPA(string clientId, Action configure); ++ } ++ public class ClientParametersTagHelper : TagHelper { ++ public ClientParametersTagHelper(IClientRequestParametersProvider clientRequestParametersProvider); ++ public string ClientId { get; set; } ++ public ViewContext ViewContext { get; set; } ++ public override void Process(TagHelperContext context, TagHelperOutput output); ++ } ++ public interface IClientRequestParametersProvider { ++ IDictionary GetClientParameters(HttpContext context, string clientId); ++ } ++ public class IdentityResourceBuilder { ++ public IdentityResourceBuilder(); ++ public IdentityResourceBuilder(IdentityResource resource); ++ public static IdentityResourceBuilder Address(); ++ public IdentityResourceBuilder AllowAllClients(); ++ public IdentityResource Build(); ++ public static IdentityResourceBuilder Email(); ++ public static IdentityResourceBuilder OpenId(); ++ public static IdentityResourceBuilder Phone(); ++ public static IdentityResourceBuilder Profile(); ++ } ++ public class IdentityResourceCollection : Collection { ++ public IdentityResourceCollection(); ++ public IdentityResourceCollection(IList list); ++ public IdentityResource this[string key] { get; } ++ public void AddAddress(); ++ public void AddAddress(Action configure); ++ public void AddEmail(); ++ public void AddEmail(Action configure); ++ public void AddOpenId(); ++ public void AddOpenId(Action configure); ++ public void AddPhone(); ++ public void AddPhone(Action configure); ++ public void AddProfile(); ++ public void AddProfile(Action configure); ++ public void AddRange(params IdentityResource[] identityResources); ++ } ++ public class IdentityServerJwtConstants { ++ public const string IdentityServerJwtBearerScheme = "IdentityServerJwtBearer"; ++ public const string IdentityServerJwtScheme = "IdentityServerJwt"; ++ public IdentityServerJwtConstants(); ++ } ++ } ++ namespace Microsoft.AspNetCore.Authentication { ++ public static class AuthenticationBuilderExtensions { ++ public static AuthenticationBuilder AddIdentityServerJwt(this AuthenticationBuilder builder); ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class IdentityServerBuilderConfigurationExtensions { ++ public static IIdentityServerBuilder AddApiAuthorization(this IIdentityServerBuilder builder) where TUser : class where TContext : DbContext, IPersistedGrantDbContext; ++ public static IIdentityServerBuilder AddApiAuthorization(this IIdentityServerBuilder builder, Action configure) where TUser : class where TContext : DbContext, IPersistedGrantDbContext; ++ public static IIdentityServerBuilder AddApiResources(this IIdentityServerBuilder builder); ++ public static IIdentityServerBuilder AddApiResources(this IIdentityServerBuilder builder, IConfiguration configuration); ++ public static IIdentityServerBuilder AddClients(this IIdentityServerBuilder builder); ++ public static IIdentityServerBuilder AddClients(this IIdentityServerBuilder builder, IConfiguration configuration); ++ public static IIdentityServerBuilder AddIdentityResources(this IIdentityServerBuilder builder); ++ public static IIdentityServerBuilder AddIdentityResources(this IIdentityServerBuilder builder, IConfiguration configuration); ++ public static IIdentityServerBuilder AddSigningCredentials(this IIdentityServerBuilder builder); ++ public static IIdentityServerBuilder AddSigningCredentials(this IIdentityServerBuilder builder, IConfiguration configuration); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Abstractions.md new file mode 100644 index 00000000..6e3faffd --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Abstractions.md @@ -0,0 +1,12 @@ +# Microsoft.AspNetCore.Authentication.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Authentication { + public class AuthenticationOptions { ++ public bool RequireAuthenticatedSignIn { get; set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.Views.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.Views.md new file mode 100644 index 00000000..69f32bf2 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.Views.md @@ -0,0 +1,13 @@ +# Microsoft.AspNetCore.Authentication.AzureAD.UI.Views + +``` diff + { + namespace AspNetCore { + public class Areas_AzureAD_Pages__ViewStart : RazorPage { +- public IHostingEnvironment Environment { get; private set; } ++ public IWebHostEnvironment Environment { get; private set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.md new file mode 100644 index 00000000..22158789 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureAD.UI.md @@ -0,0 +1,21 @@ +# Microsoft.AspNetCore.Authentication.AzureAD.UI + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.AzureAD.UI { + public static class AzureADDefaults { +- public static readonly string AuthenticationScheme; ++ public const string AuthenticationScheme = "AzureAD"; +- public static readonly string BearerAuthenticationScheme; ++ public const string BearerAuthenticationScheme = "AzureADBearer"; +- public static readonly string CookieScheme; ++ public const string CookieScheme = "AzureADCookie"; +- public static readonly string JwtBearerAuthenticationScheme; ++ public const string JwtBearerAuthenticationScheme = "AzureADJwtBearer"; +- public static readonly string OpenIdScheme; ++ public const string OpenIdScheme = "AzureADOpenID"; + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Views.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Views.md new file mode 100644 index 00000000..633781fb --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Views.md @@ -0,0 +1,13 @@ +# Microsoft.AspNetCore.Authentication.AzureADB2C.UI.Views + +``` diff + { + namespace AspNetCore { + public class Areas_AzureADB2C_Pages__ViewStart : RazorPage { +- public IHostingEnvironment Environment { get; private set; } ++ public IWebHostEnvironment Environment { get; private set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.md new file mode 100644 index 00000000..fa348d25 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.AzureADB2C.UI.md @@ -0,0 +1,21 @@ +# Microsoft.AspNetCore.Authentication.AzureADB2C.UI + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.AzureADB2C.UI { + public static class AzureADB2CDefaults { +- public static readonly string AuthenticationScheme; ++ public const string AuthenticationScheme = "AzureADB2C"; +- public static readonly string BearerAuthenticationScheme; ++ public const string BearerAuthenticationScheme = "AzureADB2CBearer"; +- public static readonly string CookieScheme; ++ public const string CookieScheme = "AzureADB2CCookie"; +- public static readonly string JwtBearerAuthenticationScheme; ++ public const string JwtBearerAuthenticationScheme = "AzureADB2CJwtBearer"; +- public static readonly string OpenIdScheme; ++ public const string OpenIdScheme = "AzureADB2COpenID"; + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Certificate.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Certificate.md new file mode 100644 index 00000000..3c183cdd --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Certificate.md @@ -0,0 +1,52 @@ +# Microsoft.AspNetCore.Authentication.Certificate + +``` diff + { ++ namespace Microsoft.AspNetCore.Authentication.Certificate { ++ public static class CertificateAuthenticationDefaults { ++ public const string AuthenticationScheme = "Certificate"; ++ } ++ public class CertificateAuthenticationEvents { ++ public CertificateAuthenticationEvents(); ++ public Func OnAuthenticationFailed { get; set; } ++ public Func OnCertificateValidated { get; set; } ++ public virtual Task AuthenticationFailed(CertificateAuthenticationFailedContext context); ++ public virtual Task CertificateValidated(CertificateValidatedContext context); ++ } ++ public class CertificateAuthenticationFailedContext : ResultContext { ++ public CertificateAuthenticationFailedContext(HttpContext context, AuthenticationScheme scheme, CertificateAuthenticationOptions options); ++ public Exception Exception { get; set; } ++ } ++ public class CertificateAuthenticationOptions : AuthenticationSchemeOptions { ++ public CertificateAuthenticationOptions(); ++ public CertificateTypes AllowedCertificateTypes { get; set; } ++ public new CertificateAuthenticationEvents Events { get; set; } ++ public X509RevocationFlag RevocationFlag { get; set; } ++ public X509RevocationMode RevocationMode { get; set; } ++ public bool ValidateCertificateUse { get; set; } ++ public bool ValidateValidityPeriod { get; set; } ++ } ++ public enum CertificateTypes { ++ All = 3, ++ Chained = 1, ++ SelfSigned = 2, ++ } ++ public class CertificateValidatedContext : ResultContext { ++ public CertificateValidatedContext(HttpContext context, AuthenticationScheme scheme, CertificateAuthenticationOptions options); ++ public X509Certificate2 ClientCertificate { get; set; } ++ } ++ public static class X509Certificate2Extensions { ++ public static bool IsSelfSigned(this X509Certificate2 certificate); ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class CertificateAuthenticationAppBuilderExtensions { ++ public static AuthenticationBuilder AddCertificate(this AuthenticationBuilder builder); ++ public static AuthenticationBuilder AddCertificate(this AuthenticationBuilder builder, Action configureOptions); ++ public static AuthenticationBuilder AddCertificate(this AuthenticationBuilder builder, string authenticationScheme); ++ public static AuthenticationBuilder AddCertificate(this AuthenticationBuilder builder, string authenticationScheme, Action configureOptions); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Cookies.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Cookies.md new file mode 100644 index 00000000..4b99bd95 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Cookies.md @@ -0,0 +1,31 @@ +# Microsoft.AspNetCore.Authentication.Cookies + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.Cookies { + public class CookieAuthenticationOptions : AuthenticationSchemeOptions { +- public string CookieDomain { get; set; } + +- public bool CookieHttpOnly { get; set; } + +- public string CookieName { get; set; } + +- public string CookiePath { get; set; } + +- public CookieSecurePolicy CookieSecure { get; set; } + + } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class CookieAppBuilderExtensions { + { +- public static IApplicationBuilder UseCookieAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseCookieAuthentication(this IApplicationBuilder app, CookieAuthenticationOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Core.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Core.md new file mode 100644 index 00000000..6b70a56e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Core.md @@ -0,0 +1,15 @@ +# Microsoft.AspNetCore.Authentication.Core + +``` diff + { + namespace Microsoft.AspNetCore.Authentication { + public class AuthenticationService : IAuthenticationService { +- public AuthenticationService(IAuthenticationSchemeProvider schemes, IAuthenticationHandlerProvider handlers, IClaimsTransformation transform); + ++ public AuthenticationService(IAuthenticationSchemeProvider schemes, IAuthenticationHandlerProvider handlers, IClaimsTransformation transform, IOptions options); ++ public AuthenticationOptions Options { get; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Facebook.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Facebook.md new file mode 100644 index 00000000..3e97588e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Facebook.md @@ -0,0 +1,17 @@ +# Microsoft.AspNetCore.Authentication.Facebook + +``` diff + { +- namespace Microsoft.AspNetCore.Builder { + { +- public static class FacebookAppBuilderExtensions { + { +- public static IApplicationBuilder UseFacebookAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseFacebookAuthentication(this IApplicationBuilder app, FacebookOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Google.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Google.md new file mode 100644 index 00000000..e152ea8a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Google.md @@ -0,0 +1,24 @@ +# Microsoft.AspNetCore.Authentication.Google + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.Google { +- public static class GoogleHelper { + { +- public static string GetEmail(JObject user); + +- } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class GoogleAppBuilderExtensions { + { +- public static IApplicationBuilder UseGoogleAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseGoogleAuthentication(this IApplicationBuilder app, GoogleOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.JwtBearer.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.JwtBearer.md new file mode 100644 index 00000000..9099ba46 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.JwtBearer.md @@ -0,0 +1,32 @@ +# Microsoft.AspNetCore.Authentication.JwtBearer + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.JwtBearer { ++ public class ForbiddenContext : ResultContext { ++ public ForbiddenContext(HttpContext context, AuthenticationScheme scheme, JwtBearerOptions options); ++ } + public class JwtBearerEvents { ++ public Func OnForbidden { get; set; } ++ public virtual Task Forbidden(ForbiddenContext context); + } + public class JwtBearerHandler : AuthenticationHandler { ++ public JwtBearerHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock); +- public JwtBearerHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, IDataProtectionProvider dataProtection, ISystemClock clock); + ++ protected override Task HandleForbiddenAsync(AuthenticationProperties properties); + } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class JwtBearerAppBuilderExtensions { + { +- public static IApplicationBuilder UseJwtBearerAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseJwtBearerAuthentication(this IApplicationBuilder app, JwtBearerOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.MicrosoftAccount.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.MicrosoftAccount.md new file mode 100644 index 00000000..d6b0862d --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.MicrosoftAccount.md @@ -0,0 +1,35 @@ +# Microsoft.AspNetCore.Authentication.MicrosoftAccount + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.MicrosoftAccount { + public class MicrosoftAccountHandler : OAuthHandler { ++ protected override string BuildChallengeUrl(AuthenticationProperties properties, string redirectUri); + } ++ public class MicrosoftChallengeProperties : OAuthChallengeProperties { ++ public static readonly string DomainHintKey; ++ public static readonly string LoginHintKey; ++ public static readonly string PromptKey; ++ public static readonly string ResponseModeKey; ++ public MicrosoftChallengeProperties(); ++ public MicrosoftChallengeProperties(IDictionary items); ++ public MicrosoftChallengeProperties(IDictionary items, IDictionary parameters); ++ public string DomainHint { get; set; } ++ public string LoginHint { get; set; } ++ public string Prompt { get; set; } ++ public string ResponseMode { get; set; } ++ } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class MicrosoftAccountAppBuilderExtensions { + { +- public static IApplicationBuilder UseMicrosoftAccountAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseMicrosoftAccountAuthentication(this IApplicationBuilder app, MicrosoftAccountOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Negotiate.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Negotiate.md new file mode 100644 index 00000000..e2fd11dc --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Negotiate.md @@ -0,0 +1,59 @@ +# Microsoft.AspNetCore.Authentication.Negotiate + +``` diff + { ++ namespace Microsoft.AspNetCore.Authentication.Negotiate { ++ public class AuthenticatedContext : ResultContext { ++ public AuthenticatedContext(HttpContext context, AuthenticationScheme scheme, NegotiateOptions options); ++ } ++ public class AuthenticationFailedContext : RemoteAuthenticationContext { ++ public AuthenticationFailedContext(HttpContext context, AuthenticationScheme scheme, NegotiateOptions options); ++ public Exception Exception { get; set; } ++ } ++ public class ChallengeContext : PropertiesContext { ++ public ChallengeContext(HttpContext context, AuthenticationScheme scheme, NegotiateOptions options, AuthenticationProperties properties); ++ public bool Handled { get; private set; } ++ public void HandleResponse(); ++ } ++ public static class NegotiateDefaults { ++ public const string AuthenticationScheme = "Negotiate"; ++ } ++ public class NegotiateEvents { ++ public NegotiateEvents(); ++ public Func OnAuthenticated { get; set; } ++ public Func OnAuthenticationFailed { get; set; } ++ public Func OnChallenge { get; set; } ++ public virtual Task Authenticated(AuthenticatedContext context); ++ public virtual Task AuthenticationFailed(AuthenticationFailedContext context); ++ public virtual Task Challenge(ChallengeContext context); ++ } ++ public class NegotiateHandler : AuthenticationHandler, IAuthenticationHandler, IAuthenticationRequestHandler { ++ public NegotiateHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock); ++ protected new NegotiateEvents Events { get; set; } ++ protected override Task CreateEventsAsync(); ++ protected override Task HandleAuthenticateAsync(); ++ protected override Task HandleChallengeAsync(AuthenticationProperties properties); ++ public Task HandleRequestAsync(); ++ } ++ public class NegotiateOptions : AuthenticationSchemeOptions { ++ public NegotiateOptions(); ++ public new NegotiateEvents Events { get; set; } ++ public bool PersistKerberosCredentials { get; set; } ++ public bool PersistNtlmCredentials { get; set; } ++ } ++ public class PostConfigureNegotiateOptions : IPostConfigureOptions { ++ public PostConfigureNegotiateOptions(IEnumerable serverAuthServices, ILogger logger); ++ public void PostConfigure(string name, NegotiateOptions options); ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class NegotiateExtensions { ++ public static AuthenticationBuilder AddNegotiate(this AuthenticationBuilder builder); ++ public static AuthenticationBuilder AddNegotiate(this AuthenticationBuilder builder, Action configureOptions); ++ public static AuthenticationBuilder AddNegotiate(this AuthenticationBuilder builder, string authenticationScheme, Action configureOptions); ++ public static AuthenticationBuilder AddNegotiate(this AuthenticationBuilder builder, string authenticationScheme, string displayName, Action configureOptions); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.OAuth.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.OAuth.md new file mode 100644 index 00000000..ca251bda --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.OAuth.md @@ -0,0 +1,107 @@ +# Microsoft.AspNetCore.Authentication.OAuth + +``` diff + { + namespace Microsoft.AspNetCore.Authentication { + public static class ClaimActionCollectionMapExtensions { +- public static void MapCustomJson(this ClaimActionCollection collection, string claimType, Func resolver); + ++ public static void MapCustomJson(this ClaimActionCollection collection, string claimType, Func resolver); +- public static void MapCustomJson(this ClaimActionCollection collection, string claimType, string valueType, Func resolver); + ++ public static void MapCustomJson(this ClaimActionCollection collection, string claimType, string valueType, Func resolver); + } + } + namespace Microsoft.AspNetCore.Authentication.OAuth { ++ public class OAuthCodeExchangeContext { ++ public OAuthCodeExchangeContext(AuthenticationProperties properties, string code, string redirectUri); ++ public string Code { get; } ++ public AuthenticationProperties Properties { get; } ++ public string RedirectUri { get; } ++ } ++ public static class OAuthConstants { ++ public static readonly string CodeChallengeKey; ++ public static readonly string CodeChallengeMethodKey; ++ public static readonly string CodeChallengeMethodS256; ++ public static readonly string CodeVerifierKey; ++ } + public class OAuthCreatingTicketContext : ResultContext { +- public OAuthCreatingTicketContext(ClaimsPrincipal principal, AuthenticationProperties properties, HttpContext context, AuthenticationScheme scheme, OAuthOptions options, HttpClient backchannel, OAuthTokenResponse tokens); + +- public OAuthCreatingTicketContext(ClaimsPrincipal principal, AuthenticationProperties properties, HttpContext context, AuthenticationScheme scheme, OAuthOptions options, HttpClient backchannel, OAuthTokenResponse tokens, JObject user); + ++ public OAuthCreatingTicketContext(ClaimsPrincipal principal, AuthenticationProperties properties, HttpContext context, AuthenticationScheme scheme, OAuthOptions options, HttpClient backchannel, OAuthTokenResponse tokens, JsonElement user); +- public JObject User { get; } ++ public JsonElement User { get; } +- public void RunClaimActions(JObject userData); + ++ public void RunClaimActions(JsonElement userData); + } + public class OAuthHandler : RemoteAuthenticationHandler where TOptions : OAuthOptions, new() { ++ protected virtual Task ExchangeCodeAsync(OAuthCodeExchangeContext context); +- protected virtual Task ExchangeCodeAsync(string code, string redirectUri); + + } + public class OAuthOptions : RemoteAuthenticationOptions { ++ public bool UsePkce { get; set; } + } +- public class OAuthTokenResponse { ++ public class OAuthTokenResponse : IDisposable { +- public JObject Response { get; set; } ++ public JsonDocument Response { get; set; } ++ public void Dispose(); +- public static OAuthTokenResponse Success(JObject response); + ++ public static OAuthTokenResponse Success(JsonDocument response); + } + } + namespace Microsoft.AspNetCore.Authentication.OAuth.Claims { + public abstract class ClaimAction { +- public abstract void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public abstract void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + public class CustomJsonClaimAction : ClaimAction { +- public CustomJsonClaimAction(string claimType, string valueType, Func resolver); + ++ public CustomJsonClaimAction(string claimType, string valueType, Func resolver); +- public Func Resolver { get; } ++ public Func Resolver { get; } +- public override void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + public class DeleteClaimAction : ClaimAction { +- public override void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + public class JsonKeyClaimAction : ClaimAction { +- public override void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + public class JsonSubKeyClaimAction : JsonKeyClaimAction { +- public override void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + public class MapAllClaimsAction : ClaimAction { +- public override void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class OAuthAppBuilderExtensions { + { +- public static IApplicationBuilder UseOAuthAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseOAuthAuthentication(this IApplicationBuilder app, OAuthOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.OpenIdConnect.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.OpenIdConnect.md new file mode 100644 index 00000000..f92b9bbf --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.OpenIdConnect.md @@ -0,0 +1,33 @@ +# Microsoft.AspNetCore.Authentication.OpenIdConnect + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.OpenIdConnect { + public class OpenIdConnectOptions : RemoteAuthenticationOptions { ++ public bool UsePkce { get; set; } + } + public class UserInformationReceivedContext : RemoteAuthenticationContext { +- public JObject User { get; set; } ++ public JsonDocument User { get; set; } + } + } + namespace Microsoft.AspNetCore.Authentication.OpenIdConnect.Claims { + public class UniqueJsonKeyClaimAction : JsonKeyClaimAction { +- public override void Run(JObject userData, ClaimsIdentity identity, string issuer); + ++ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer); + } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class OpenIdConnectAppBuilderExtensions { + { +- public static IApplicationBuilder UseOpenIdConnectAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseOpenIdConnectAuthentication(this IApplicationBuilder app, OpenIdConnectOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Twitter.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Twitter.md new file mode 100644 index 00000000..3b9b64c3 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.Twitter.md @@ -0,0 +1,31 @@ +# Microsoft.AspNetCore.Authentication.Twitter + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.Twitter { + public class TwitterCreatingTicketContext : ResultContext { +- public TwitterCreatingTicketContext(HttpContext context, AuthenticationScheme scheme, TwitterOptions options, ClaimsPrincipal principal, AuthenticationProperties properties, string userId, string screenName, string accessToken, string accessTokenSecret, JObject user); + ++ public TwitterCreatingTicketContext(HttpContext context, AuthenticationScheme scheme, TwitterOptions options, ClaimsPrincipal principal, AuthenticationProperties properties, string userId, string screenName, string accessToken, string accessTokenSecret, JsonElement user); +- public JObject User { get; } ++ public JsonElement User { get; } + } + public class TwitterHandler : RemoteAuthenticationHandler { +- protected virtual Task CreateTicketAsync(ClaimsIdentity identity, AuthenticationProperties properties, AccessToken token, JObject user); + ++ protected virtual Task CreateTicketAsync(ClaimsIdentity identity, AuthenticationProperties properties, AccessToken token, JsonElement user); + } + } +- namespace Microsoft.AspNetCore.Builder { + { +- public static class TwitterAppBuilderExtensions { + { +- public static IApplicationBuilder UseTwitterAuthentication(this IApplicationBuilder app); + +- public static IApplicationBuilder UseTwitterAuthentication(this IApplicationBuilder app, TwitterOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.WsFederation.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.WsFederation.md new file mode 100644 index 00000000..af9e829b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.WsFederation.md @@ -0,0 +1,12 @@ +# Microsoft.AspNetCore.Authentication.WsFederation + +``` diff + { + namespace Microsoft.AspNetCore.Authentication.WsFederation { + public class WsFederationOptions : RemoteAuthenticationOptions { ++ public new bool SaveTokens { get; set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.md new file mode 100644 index 00000000..1df7049e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authentication.md @@ -0,0 +1,62 @@ +# Microsoft.AspNetCore.Authentication + +``` diff + { + namespace Microsoft.AspNetCore.Authentication { ++ public class AccessDeniedContext : HandleRequestContext { ++ public AccessDeniedContext(HttpContext context, AuthenticationScheme scheme, RemoteAuthenticationOptions options); ++ public PathString AccessDeniedPath { get; set; } ++ public AuthenticationProperties Properties { get; set; } ++ public string ReturnUrl { get; set; } ++ public string ReturnUrlParameter { get; set; } ++ } + public class HandleRequestResult : AuthenticateResult { ++ public static new HandleRequestResult NoResult(); + } ++ public static class JsonDocumentAuthExtensions { ++ public static string GetString(this JsonElement element, string key); ++ } + public class RemoteAuthenticationEvents { ++ public Func OnAccessDenied { get; set; } ++ public virtual Task AccessDenied(AccessDeniedContext context); + } + public abstract class RemoteAuthenticationHandler : AuthenticationHandler, IAuthenticationHandler, IAuthenticationRequestHandler where TOptions : RemoteAuthenticationOptions, new() { ++ protected virtual Task HandleAccessDeniedErrorAsync(AuthenticationProperties properties); + } + public class RemoteAuthenticationOptions : AuthenticationSchemeOptions { ++ public PathString AccessDeniedPath { get; set; } ++ public string ReturnUrlParameter { get; set; } + } ++ public class RequestPathBaseCookieBuilder : CookieBuilder { ++ public RequestPathBaseCookieBuilder(); ++ protected virtual string AdditionalPath { get; } ++ public override CookieOptions Build(HttpContext context, DateTimeOffset expiresFrom); ++ } + } +- namespace Microsoft.AspNetCore.Authentication.Internal { + { +- public class RequestPathBaseCookieBuilder : CookieBuilder { + { +- public RequestPathBaseCookieBuilder(); + +- protected virtual string AdditionalPath { get; } + +- public override CookieOptions Build(HttpContext context, DateTimeOffset expiresFrom); + +- } +- } + namespace Microsoft.Extensions.DependencyInjection { + public static class AuthenticationServiceCollectionExtensions { +- public static IServiceCollection AddRemoteScheme(this IServiceCollection services, string authenticationScheme, string displayName, Action configureOptions) where TOptions : RemoteAuthenticationOptions, new() where THandler : RemoteAuthenticationHandler; + +- public static IServiceCollection AddScheme(this IServiceCollection services, string authenticationScheme, Action configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler; + +- public static IServiceCollection AddScheme(this IServiceCollection services, string authenticationScheme, string displayName, Action configureScheme, Action configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler; + +- public static IServiceCollection AddScheme(this IServiceCollection services, string authenticationScheme, string displayName, Action configureOptions) where TOptions : AuthenticationSchemeOptions, new() where THandler : AuthenticationHandler; + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authorization.Policy.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authorization.Policy.md new file mode 100644 index 00000000..dd70a1fe --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authorization.Policy.md @@ -0,0 +1,29 @@ +# Microsoft.AspNetCore.Authorization.Policy + +``` diff + { ++ namespace Microsoft.AspNetCore.Authorization { ++ public class AuthorizationMiddleware { ++ public AuthorizationMiddleware(RequestDelegate next, IAuthorizationPolicyProvider policyProvider); ++ public Task Invoke(HttpContext context); ++ } ++ } ++ namespace Microsoft.AspNetCore.Builder { ++ public static class AuthorizationAppBuilderExtensions { ++ public static IApplicationBuilder UseAuthorization(this IApplicationBuilder app); ++ } ++ public static class AuthorizationEndpointConventionBuilderExtensions { ++ public static TBuilder RequireAuthorization(this TBuilder builder) where TBuilder : IEndpointConventionBuilder; ++ public static TBuilder RequireAuthorization(this TBuilder builder, params IAuthorizeData[] authorizeData) where TBuilder : IEndpointConventionBuilder; ++ public static TBuilder RequireAuthorization(this TBuilder builder, params string[] policyNames) where TBuilder : IEndpointConventionBuilder; ++ } ++ } + namespace Microsoft.Extensions.DependencyInjection { + public static class PolicyServiceCollectionExtensions { ++ public static IServiceCollection AddAuthorization(this IServiceCollection services); ++ public static IServiceCollection AddAuthorization(this IServiceCollection services, Action configure); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authorization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authorization.md new file mode 100644 index 00000000..e41d600c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Authorization.md @@ -0,0 +1,38 @@ +# Microsoft.AspNetCore.Authorization + +``` diff + { + namespace Microsoft.AspNetCore.Authorization { + public class AuthorizationOptions { ++ public AuthorizationPolicy FallbackPolicy { get; set; } + } + public class AuthorizationPolicyBuilder { +- public AuthorizationPolicyBuilder RequireClaim(string claimType, IEnumerable requiredValues); ++ public AuthorizationPolicyBuilder RequireClaim(string claimType, IEnumerable allowedValues); +- public AuthorizationPolicyBuilder RequireClaim(string claimType, params string[] requiredValues); ++ public AuthorizationPolicyBuilder RequireClaim(string claimType, params string[] allowedValues); + } + public class AuthorizeAttribute : Attribute, IAuthorizeData { +- public string ActiveAuthenticationSchemes { get; set; } + + } + public class DefaultAuthorizationPolicyProvider : IAuthorizationPolicyProvider { ++ public Task GetFallbackPolicyAsync(); + } + public interface IAuthorizationPolicyProvider { ++ Task GetFallbackPolicyAsync(); + } + } + namespace Microsoft.Extensions.DependencyInjection { + public static class AuthorizationServiceCollectionExtensions { +- public static IServiceCollection AddAuthorization(this IServiceCollection services); + +- public static IServiceCollection AddAuthorization(this IServiceCollection services, Action configure); + ++ public static IServiceCollection AddAuthorizationCore(this IServiceCollection services); ++ public static IServiceCollection AddAuthorizationCore(this IServiceCollection services, Action configure); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.AzureAppServicesIntegration.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.AzureAppServicesIntegration.md new file mode 100644 index 00000000..8bfd56f5 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.AzureAppServicesIntegration.md @@ -0,0 +1,12 @@ +# Microsoft.AspNetCore.AzureAppServicesIntegration + +``` diff + { ++ namespace Microsoft.AspNetCore.Hosting { ++ public static class AppServicesWebHostBuilderExtensions { ++ public static IWebHostBuilder UseAzureAppServices(this IWebHostBuilder hostBuilder); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.HttpClient.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.HttpClient.md new file mode 100644 index 00000000..45440e8d --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.HttpClient.md @@ -0,0 +1,18 @@ +# Microsoft.AspNetCore.Blazor.HttpClient + +``` diff + { ++ namespace Microsoft.AspNetCore.Components { ++ public static class HttpClientJsonExtensions { ++ public static Task GetJsonAsync(this HttpClient httpClient, string requestUri); ++ public static Task PostJsonAsync(this HttpClient httpClient, string requestUri, object content); ++ public static Task PostJsonAsync(this HttpClient httpClient, string requestUri, object content); ++ public static Task PutJsonAsync(this HttpClient httpClient, string requestUri, object content); ++ public static Task PutJsonAsync(this HttpClient httpClient, string requestUri, object content); ++ public static Task SendJsonAsync(this HttpClient httpClient, HttpMethod method, string requestUri, object content); ++ public static Task SendJsonAsync(this HttpClient httpClient, HttpMethod method, string requestUri, object content); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.Server.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.Server.md new file mode 100644 index 00000000..d4c146a6 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.Server.md @@ -0,0 +1,22 @@ +# Microsoft.AspNetCore.Blazor.Server + +``` diff + { ++ namespace Microsoft.AspNetCore.Builder { ++ public static class BlazorHostingApplicationBuilderExtensions { ++ public static IApplicationBuilder UseClientSideBlazorFiles(this IApplicationBuilder app, string clientAssemblyFilePath); ++ public static IApplicationBuilder UseClientSideBlazorFiles(this IApplicationBuilder app); ++ } ++ public static class BlazorHostingEndpointRouteBuilderExtensions { ++ public static IEndpointConventionBuilder MapFallbackToClientSideBlazor(this IEndpointRouteBuilder endpoints, string clientAssemblyFilePath, string filePath); ++ public static IEndpointConventionBuilder MapFallbackToClientSideBlazor(this IEndpointRouteBuilder endpoints, string clientAssemblyFilePath, string pattern, string filePath); ++ public static IEndpointConventionBuilder MapFallbackToClientSideBlazor(this IEndpointRouteBuilder endpoints, string filePath); ++ public static IEndpointConventionBuilder MapFallbackToClientSideBlazor(this IEndpointRouteBuilder endpoints, string pattern, string filePath); ++ } ++ public static class BlazorMonoDebugProxyAppBuilderExtensions { ++ public static void UseBlazorDebugging(this IApplicationBuilder app); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.md new file mode 100644 index 00000000..91d8c90d --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Blazor.md @@ -0,0 +1,68 @@ +# Microsoft.AspNetCore.Blazor + +``` diff + { ++ namespace Microsoft.AspNetCore.Blazor { ++ public static class JSInteropMethods { ++ public static void NotifyLocationChanged(string uri, bool isInterceptedLink); ++ } ++ } ++ namespace Microsoft.AspNetCore.Blazor.Hosting { ++ public static class BlazorWebAssemblyHost { ++ public static IWebAssemblyHostBuilder CreateDefaultBuilder(); ++ } ++ public interface IWebAssemblyHost : IDisposable { ++ IServiceProvider Services { get; } ++ Task StartAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ Task StopAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ } ++ public interface IWebAssemblyHostBuilder { ++ IDictionary Properties { get; } ++ IWebAssemblyHost Build(); ++ IWebAssemblyHostBuilder ConfigureServices(Action configureDelegate); ++ IWebAssemblyHostBuilder UseServiceProviderFactory(IServiceProviderFactory factory); ++ IWebAssemblyHostBuilder UseServiceProviderFactory(Func> factory); ++ } ++ public sealed class WebAssemblyHostBuilderContext { ++ public WebAssemblyHostBuilderContext(IDictionary properties); ++ public IDictionary Properties { get; } ++ } ++ public static class WebAssemblyHostBuilderExtensions { ++ public static IWebAssemblyHostBuilder ConfigureServices(this IWebAssemblyHostBuilder hostBuilder, Action configureDelegate); ++ public static IWebAssemblyHostBuilder UseBlazorStartup(this IWebAssemblyHostBuilder builder, Type startupType); ++ public static IWebAssemblyHostBuilder UseBlazorStartup(this IWebAssemblyHostBuilder builder); ++ } ++ public static class WebAssemblyHostExtensions { ++ public static void Run(this IWebAssemblyHost host); ++ } ++ } ++ namespace Microsoft.AspNetCore.Blazor.Http { ++ public enum FetchCredentialsOption { ++ Include = 2, ++ Omit = 0, ++ SameOrigin = 1, ++ } ++ public class WebAssemblyHttpMessageHandler : HttpMessageHandler { ++ public const string FetchArgs = "WebAssemblyHttpMessageHandler.FetchArgs"; ++ public WebAssemblyHttpMessageHandler(); ++ public static FetchCredentialsOption DefaultCredentials { get; set; } ++ protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken); ++ } ++ } ++ namespace Microsoft.AspNetCore.Blazor.Rendering { ++ public static class WebAssemblyEventDispatcher { ++ public static Task DispatchEvent(WebEventDescriptor eventDescriptor, string eventArgsJson); ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Builder { ++ public static class ComponentsApplicationBuilderExtensions { ++ public static void AddComponent(this IComponentsApplicationBuilder app, string domElementSelector) where TComponent : IComponent; ++ } ++ public interface IComponentsApplicationBuilder { ++ IServiceProvider Services { get; } ++ void AddComponent(Type componentType, string domElementSelector); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Authorization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Authorization.md new file mode 100644 index 00000000..98cec1d5 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Authorization.md @@ -0,0 +1,53 @@ +# Microsoft.AspNetCore.Components.Authorization + +``` diff + { ++ namespace Microsoft.AspNetCore.Components.Authorization { ++ public class AuthenticationState { ++ public AuthenticationState(ClaimsPrincipal user); ++ public ClaimsPrincipal User { get; } ++ } ++ public delegate void AuthenticationStateChangedHandler(Task task); ++ public abstract class AuthenticationStateProvider { ++ protected AuthenticationStateProvider(); ++ public event AuthenticationStateChangedHandler AuthenticationStateChanged; ++ public abstract Task GetAuthenticationStateAsync(); ++ protected void NotifyAuthenticationStateChanged(Task task); ++ } ++ public sealed class AuthorizeRouteView : RouteView { ++ public AuthorizeRouteView(); ++ public RenderFragment Authorizing { get; set; } ++ public RenderFragment NotAuthorized { get; set; } ++ protected override void Render(RenderTreeBuilder builder); ++ } ++ public class AuthorizeView : AuthorizeViewCore { ++ public AuthorizeView(); ++ public string Policy { get; set; } ++ public string Roles { get; set; } ++ protected override IAuthorizeData[] GetAuthorizeData(); ++ } ++ public abstract class AuthorizeViewCore : ComponentBase { ++ protected AuthorizeViewCore(); ++ public RenderFragment Authorized { get; set; } ++ public RenderFragment Authorizing { get; set; } ++ public RenderFragment ChildContent { get; set; } ++ public RenderFragment NotAuthorized { get; set; } ++ public object Resource { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected abstract IAuthorizeData[] GetAuthorizeData(); ++ protected override Task OnParametersSetAsync(); ++ } ++ public class CascadingAuthenticationState : ComponentBase, IDisposable { ++ public CascadingAuthenticationState(); ++ public RenderFragment ChildContent { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder __builder); ++ protected override void OnInitialized(); ++ void System.IDisposable.Dispose(); ++ } ++ public interface IHostEnvironmentAuthenticationStateProvider { ++ void SetAuthenticationState(Task authenticationStateTask); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Forms.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Forms.md new file mode 100644 index 00000000..20717254 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Forms.md @@ -0,0 +1,68 @@ +# Microsoft.AspNetCore.Components.Forms + +``` diff + { ++ namespace Microsoft.AspNetCore.Components.Forms { ++ public class DataAnnotationsValidator : ComponentBase { ++ public DataAnnotationsValidator(); ++ protected override void OnInitialized(); ++ } ++ public sealed class EditContext { ++ public EditContext(object model); ++ public object Model { get; } ++ public event EventHandler OnFieldChanged; ++ public event EventHandler OnValidationRequested; ++ public event EventHandler OnValidationStateChanged; ++ public FieldIdentifier Field(string fieldName); ++ public IEnumerable GetValidationMessages(); ++ public IEnumerable GetValidationMessages(FieldIdentifier fieldIdentifier); ++ public IEnumerable GetValidationMessages(Expression> accessor); ++ public bool IsModified(); ++ public bool IsModified(in FieldIdentifier fieldIdentifier); ++ public bool IsModified(Expression> accessor); ++ public void MarkAsUnmodified(); ++ public void MarkAsUnmodified(in FieldIdentifier fieldIdentifier); ++ public void NotifyFieldChanged(in FieldIdentifier fieldIdentifier); ++ public void NotifyValidationStateChanged(); ++ public bool Validate(); ++ } ++ public static class EditContextDataAnnotationsExtensions { ++ public static EditContext AddDataAnnotationsValidation(this EditContext editContext); ++ } ++ public sealed class FieldChangedEventArgs : EventArgs { ++ public FieldChangedEventArgs(in FieldIdentifier fieldIdentifier); ++ public FieldIdentifier FieldIdentifier { get; } ++ } ++ public readonly struct FieldIdentifier : IEquatable { ++ public FieldIdentifier(object model, string fieldName); ++ public string FieldName { get; } ++ public object Model { get; } ++ public static FieldIdentifier Create(Expression> accessor); ++ public bool Equals(FieldIdentifier otherIdentifier); ++ public override bool Equals(object obj); ++ public override int GetHashCode(); ++ } ++ public sealed class ValidationMessageStore { ++ public ValidationMessageStore(EditContext editContext); ++ public IEnumerable this[FieldIdentifier fieldIdentifier] { get; } ++ public IEnumerable this[Expression> accessor] { get; } ++ public void Add(in FieldIdentifier fieldIdentifier, IEnumerable messages); ++ public void Add(in FieldIdentifier fieldIdentifier, string message); ++ public void Add(Expression> accessor, IEnumerable messages); ++ public void Add(Expression> accessor, string message); ++ public void Clear(); ++ public void Clear(in FieldIdentifier fieldIdentifier); ++ public void Clear(Expression> accessor); ++ } ++ public sealed class ValidationRequestedEventArgs : EventArgs { ++ public static readonly new ValidationRequestedEventArgs Empty; ++ public ValidationRequestedEventArgs(); ++ } ++ public sealed class ValidationStateChangedEventArgs : EventArgs { ++ public static readonly new ValidationStateChangedEventArgs Empty; ++ public ValidationStateChangedEventArgs(); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Server.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Server.md new file mode 100644 index 00000000..3aa62583 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Server.md @@ -0,0 +1,80 @@ +# Microsoft.AspNetCore.Components.Server + +``` diff + { ++ namespace Microsoft.AspNetCore.Builder { ++ public sealed class ComponentEndpointConventionBuilder : IEndpointConventionBuilder, IHubEndpointConventionBuilder { ++ public void Add(Action convention); ++ } ++ public static class ComponentEndpointConventionBuilderExtensions { ++ public static ComponentEndpointConventionBuilder AddComponent(this ComponentEndpointConventionBuilder builder, Type componentType, string selector); ++ } ++ public static class ComponentEndpointRouteBuilderExtensions { ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints); ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, Action configureOptions); ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, Type type, string selector); ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, Type type, string selector, Action configureOptions); ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, Type componentType, string selector, string path); ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, Type componentType, string selector, string path, Action configureOptions); ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, string selector) where TComponent : IComponent; ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, string selector, Action configureOptions) where TComponent : IComponent; ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, string selector, string path) where TComponent : IComponent; ++ public static ComponentEndpointConventionBuilder MapBlazorHub(this IEndpointRouteBuilder endpoints, string selector, string path, Action configureOptions) where TComponent : IComponent; ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Server { ++ public sealed class CircuitOptions { ++ public CircuitOptions(); ++ public bool DetailedErrors { get; set; } ++ public int DisconnectedCircuitMaxRetained { get; set; } ++ public TimeSpan DisconnectedCircuitRetentionPeriod { get; set; } ++ public TimeSpan JSInteropDefaultCallTimeout { get; set; } ++ } ++ public class ComponentPrerenderingContext { ++ public ComponentPrerenderingContext(); ++ public Type ComponentType { get; set; } ++ public HttpContext Context { get; set; } ++ public ParameterView Parameters { get; set; } ++ } ++ public sealed class ComponentPrerenderResult { ++ public void WriteTo(TextWriter writer); ++ } ++ public interface IComponentPrerenderer { ++ Task PrerenderComponentAsync(ComponentPrerenderingContext context); ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Server.Circuits { ++ public sealed class Circuit { ++ public string Id { get; } ++ } ++ public abstract class CircuitHandler { ++ protected CircuitHandler(); ++ public virtual int Order { get; } ++ public virtual Task OnCircuitClosedAsync(Circuit circuit, CancellationToken cancellationToken); ++ public virtual Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken); ++ public virtual Task OnConnectionDownAsync(Circuit circuit, CancellationToken cancellationToken); ++ public virtual Task OnConnectionUpAsync(Circuit circuit, CancellationToken cancellationToken); ++ } ++ public class RemoteUriHelper : UriHelperBase { ++ public RemoteUriHelper(ILogger logger); ++ public bool HasAttachedJSRuntime { get; } ++ public override void InitializeState(string uriAbsolute, string baseUriAbsolute); ++ protected override void NavigateToCore(string uri, bool forceLoad); ++ public static void NotifyLocationChanged(string uriAbsolute, bool isInterceptedLink); ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class ComponentServiceCollectionExtensions { ++ public static IServerSideBlazorBuilder AddServerSideBlazor(this IServiceCollection services, Action configure = null); ++ } ++ public interface IServerSideBlazorBuilder { ++ IServiceCollection Services { get; } ++ } ++ public static class ServerSideBlazorBuilderExtensions { ++ public static IServerSideBlazorBuilder AddCircuitOptions(this IServerSideBlazorBuilder builder, Action configure); ++ public static IServerSideBlazorBuilder AddHubOptions(this IServerSideBlazorBuilder builder, Action configure); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Web.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Web.md new file mode 100644 index 00000000..e26a706c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.Web.md @@ -0,0 +1,263 @@ +# Microsoft.AspNetCore.Components.Web + +``` diff + { ++ namespace Microsoft.AspNetCore.Components { ++ public sealed class BindInputElementAttribute : Attribute { ++ public BindInputElementAttribute(string type, string suffix, string valueAttribute, string changeAttribute, bool isInvariantCulture, string format); ++ public string ChangeAttribute { get; } ++ public string Format { get; } ++ public bool IsInvariantCulture { get; } ++ public string Suffix { get; } ++ public string Type { get; } ++ public string ValueAttribute { get; } ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Forms { ++ public static class EditContextFieldClassExtensions { ++ public static string FieldCssClass(this EditContext editContext, in FieldIdentifier fieldIdentifier); ++ public static string FieldCssClass(this EditContext editContext, Expression> accessor); ++ } ++ public class EditForm : ComponentBase { ++ public EditForm(); ++ public IReadOnlyDictionary AdditionalAttributes { get; set; } ++ public RenderFragment ChildContent { get; set; } ++ public EditContext EditContext { get; set; } ++ public object Model { get; set; } ++ public EventCallback OnInvalidSubmit { get; set; } ++ public EventCallback OnSubmit { get; set; } ++ public EventCallback OnValidSubmit { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override void OnParametersSet(); ++ } ++ public abstract class InputBase : ComponentBase { ++ protected InputBase(); ++ public IReadOnlyDictionary AdditionalAttributes { get; set; } ++ protected string CssClass { get; } ++ protected TValue CurrentValue { get; set; } ++ protected string CurrentValueAsString { get; set; } ++ protected EditContext EditContext { get; set; } ++ protected FieldIdentifier FieldIdentifier { get; set; } ++ public TValue Value { get; set; } ++ public EventCallback ValueChanged { get; set; } ++ public Expression> ValueExpression { get; set; } ++ protected virtual string FormatValueAsString(TValue value); ++ public override Task SetParametersAsync(ParameterView parameters); ++ protected abstract bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage); ++ } ++ public class InputCheckbox : InputBase { ++ public InputCheckbox(); ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override bool TryParseValueFromString(string value, out bool result, out string validationErrorMessage); ++ } ++ public class InputDate : InputBase { ++ public InputDate(); ++ public string ParsingErrorMessage { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override string FormatValueAsString(TValue value); ++ protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage); ++ } ++ public class InputNumber : InputBase { ++ public InputNumber(); ++ public string ParsingErrorMessage { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override string FormatValueAsString(TValue value); ++ protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage); ++ } ++ public class InputSelect : InputBase { ++ public InputSelect(); ++ public RenderFragment ChildContent { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override bool TryParseValueFromString(string value, out TValue result, out string validationErrorMessage); ++ } ++ public class InputText : InputBase { ++ public InputText(); ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage); ++ } ++ public class InputTextArea : InputBase { ++ public InputTextArea(); ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage); ++ } ++ public class ValidationMessage : ComponentBase, IDisposable { ++ public ValidationMessage(); ++ public IReadOnlyDictionary AdditionalAttributes { get; set; } ++ public Expression> For { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected virtual void Dispose(bool disposing); ++ protected override void OnParametersSet(); ++ void System.IDisposable.Dispose(); ++ } ++ public class ValidationSummary : ComponentBase, IDisposable { ++ public ValidationSummary(); ++ public IReadOnlyDictionary AdditionalAttributes { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ protected virtual void Dispose(bool disposing); ++ protected override void OnParametersSet(); ++ void System.IDisposable.Dispose(); ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.RenderTree { ++ public sealed class WebEventDescriptor { ++ public WebEventDescriptor(); ++ public int BrowserRendererId { get; set; } ++ public string EventArgsType { get; set; } ++ public EventFieldInfo EventFieldInfo { get; set; } ++ public ulong EventHandlerId { get; set; } ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Routing { ++ public class NavLink : ComponentBase, IDisposable { ++ public NavLink(); ++ public string ActiveClass { get; set; } ++ public IReadOnlyDictionary AdditionalAttributes { get; set; } ++ public RenderFragment ChildContent { get; set; } ++ protected string CssClass { get; set; } ++ public NavLinkMatch Match { get; set; } ++ protected override void BuildRenderTree(RenderTreeBuilder builder); ++ public void Dispose(); ++ protected override void OnInitialized(); ++ protected override void OnParametersSet(); ++ } ++ public enum NavLinkMatch { ++ All = 1, ++ Prefix = 0, ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Web { ++ public static class BindAttributes ++ public class ClipboardEventArgs : EventArgs { ++ public ClipboardEventArgs(); ++ public string Type { get; set; } ++ } ++ public class DataTransfer { ++ public DataTransfer(); ++ public string DropEffect { get; set; } ++ public string EffectAllowed { get; set; } ++ public string[] Files { get; set; } ++ public DataTransferItem[] Items { get; set; } ++ public string[] Types { get; set; } ++ } ++ public class DataTransferItem { ++ public DataTransferItem(); ++ public string Kind { get; set; } ++ public string Type { get; set; } ++ } ++ public class DragEventArgs : MouseEventArgs { ++ public DragEventArgs(); ++ public DataTransfer DataTransfer { get; set; } ++ } ++ public class ErrorEventArgs : EventArgs { ++ public ErrorEventArgs(); ++ public int Colno { get; set; } ++ public string Filename { get; set; } ++ public int Lineno { get; set; } ++ public string Message { get; set; } ++ public string Type { get; set; } ++ } ++ public static class EventHandlers ++ public class FocusEventArgs : EventArgs { ++ public FocusEventArgs(); ++ public string Type { get; set; } ++ } ++ public class KeyboardEventArgs : EventArgs { ++ public KeyboardEventArgs(); ++ public bool AltKey { get; set; } ++ public string Code { get; set; } ++ public bool CtrlKey { get; set; } ++ public string Key { get; set; } ++ public float Location { get; set; } ++ public bool MetaKey { get; set; } ++ public bool Repeat { get; set; } ++ public bool ShiftKey { get; set; } ++ public string Type { get; set; } ++ } ++ public class MouseEventArgs : EventArgs { ++ public MouseEventArgs(); ++ public bool AltKey { get; set; } ++ public long Button { get; set; } ++ public long Buttons { get; set; } ++ public double ClientX { get; set; } ++ public double ClientY { get; set; } ++ public bool CtrlKey { get; set; } ++ public long Detail { get; set; } ++ public bool MetaKey { get; set; } ++ public double ScreenX { get; set; } ++ public double ScreenY { get; set; } ++ public bool ShiftKey { get; set; } ++ public string Type { get; set; } ++ } ++ public class PointerEventArgs : MouseEventArgs { ++ public PointerEventArgs(); ++ public float Height { get; set; } ++ public bool IsPrimary { get; set; } ++ public long PointerId { get; set; } ++ public string PointerType { get; set; } ++ public float Pressure { get; set; } ++ public float TiltX { get; set; } ++ public float TiltY { get; set; } ++ public float Width { get; set; } ++ } ++ public class ProgressEventArgs : EventArgs { ++ public ProgressEventArgs(); ++ public bool LengthComputable { get; set; } ++ public long Loaded { get; set; } ++ public long Total { get; set; } ++ public string Type { get; set; } ++ } ++ public class TouchEventArgs : EventArgs { ++ public TouchEventArgs(); ++ public bool AltKey { get; set; } ++ public TouchPoint[] ChangedTouches { get; set; } ++ public bool CtrlKey { get; set; } ++ public long Detail { get; set; } ++ public bool MetaKey { get; set; } ++ public bool ShiftKey { get; set; } ++ public TouchPoint[] TargetTouches { get; set; } ++ public TouchPoint[] Touches { get; set; } ++ public string Type { get; set; } ++ } ++ public class TouchPoint { ++ public TouchPoint(); ++ public double ClientX { get; set; } ++ public double ClientY { get; set; } ++ public long Identifier { get; set; } ++ public double PageX { get; set; } ++ public double PageY { get; set; } ++ public double ScreenX { get; set; } ++ public double ScreenY { get; set; } ++ } ++ public static class WebEventCallbackFactoryEventArgsExtensions { ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ } ++ public class WheelEventArgs : MouseEventArgs { ++ public WheelEventArgs(); ++ public long DeltaMode { get; set; } ++ public double DeltaX { get; set; } ++ public double DeltaY { get; set; } ++ public double DeltaZ { get; set; } ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.md new file mode 100644 index 00000000..fef454c8 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Components.md @@ -0,0 +1,483 @@ +# Microsoft.AspNetCore.Components + +``` diff + { ++ namespace Microsoft.AspNetCore.Components { ++ public static class BindConverter { ++ public static bool FormatValue(bool value, CultureInfo culture = null); ++ public static string FormatValue(DateTime value, CultureInfo culture = null); ++ public static string FormatValue(DateTime value, string format, CultureInfo culture = null); ++ public static string FormatValue(DateTimeOffset value, CultureInfo culture = null); ++ public static string FormatValue(DateTimeOffset value, string format, CultureInfo culture = null); ++ public static string FormatValue(decimal value, CultureInfo culture = null); ++ public static string FormatValue(double value, CultureInfo culture = null); ++ public static string FormatValue(int value, CultureInfo culture = null); ++ public static string FormatValue(long value, CultureInfo culture = null); ++ public static bool? FormatValue(bool? value, CultureInfo culture = null); ++ public static string FormatValue(DateTime? value, CultureInfo culture = null); ++ public static string FormatValue(DateTime? value, string format, CultureInfo culture = null); ++ public static string FormatValue(DateTimeOffset? value, CultureInfo culture = null); ++ public static string FormatValue(DateTimeOffset? value, string format, CultureInfo culture = null); ++ public static string FormatValue(decimal? value, CultureInfo culture = null); ++ public static string FormatValue(double? value, CultureInfo culture = null); ++ public static string FormatValue(int? value, CultureInfo culture = null); ++ public static string FormatValue(long? value, CultureInfo culture = null); ++ public static string FormatValue(float? value, CultureInfo culture = null); ++ public static string FormatValue(float value, CultureInfo culture = null); ++ public static string FormatValue(string value, CultureInfo culture = null); ++ public static object FormatValue(T value, CultureInfo culture = null); ++ public static bool TryConvertTo(object obj, CultureInfo culture, out T value); ++ public static bool TryConvertToBool(object obj, CultureInfo culture, out bool value); ++ public static bool TryConvertToDateTime(object obj, CultureInfo culture, out DateTime value); ++ public static bool TryConvertToDateTime(object obj, CultureInfo culture, string format, out DateTime value); ++ public static bool TryConvertToDateTimeOffset(object obj, CultureInfo culture, out DateTimeOffset value); ++ public static bool TryConvertToDateTimeOffset(object obj, CultureInfo culture, string format, out DateTimeOffset value); ++ public static bool TryConvertToDecimal(object obj, CultureInfo culture, out decimal value); ++ public static bool TryConvertToDouble(object obj, CultureInfo culture, out double value); ++ public static bool TryConvertToFloat(object obj, CultureInfo culture, out float value); ++ public static bool TryConvertToInt(object obj, CultureInfo culture, out int value); ++ public static bool TryConvertToLong(object obj, CultureInfo culture, out long value); ++ public static bool TryConvertToNullableBool(object obj, CultureInfo culture, out bool? value); ++ public static bool TryConvertToNullableDateTime(object obj, CultureInfo culture, out DateTime? value); ++ public static bool TryConvertToNullableDateTime(object obj, CultureInfo culture, string format, out DateTime? value); ++ public static bool TryConvertToNullableDateTimeOffset(object obj, CultureInfo culture, out DateTimeOffset? value); ++ public static bool TryConvertToNullableDateTimeOffset(object obj, CultureInfo culture, string format, out DateTimeOffset? value); ++ public static bool TryConvertToNullableDecimal(object obj, CultureInfo culture, out decimal? value); ++ public static bool TryConvertToNullableDouble(object obj, CultureInfo culture, out double? value); ++ public static bool TryConvertToNullableFloat(object obj, CultureInfo culture, out float? value); ++ public static bool TryConvertToNullableInt(object obj, CultureInfo culture, out int? value); ++ public static bool TryConvertToNullableLong(object obj, CultureInfo culture, out long? value); ++ public static bool TryConvertToString(object obj, CultureInfo culture, out string value); ++ } ++ public sealed class BindElementAttribute : Attribute { ++ public BindElementAttribute(string element, string suffix, string valueAttribute, string changeAttribute); ++ public string ChangeAttribute { get; } ++ public string Element { get; } ++ public string Suffix { get; } ++ public string ValueAttribute { get; } ++ } ++ public sealed class CascadingParameterAttribute : Attribute { ++ public CascadingParameterAttribute(); ++ public string Name { get; set; } ++ } ++ public class CascadingValue : ICascadingValueComponent, IComponent { ++ public CascadingValue(); ++ public RenderFragment ChildContent { get; set; } ++ public bool IsFixed { get; set; } ++ public string Name { get; set; } ++ public TValue Value { get; set; } ++ public void Attach(RenderHandle renderHandle); ++ public Task SetParametersAsync(ParameterView parameters); ++ } ++ public class ChangeEventArgs : EventArgs { ++ public ChangeEventArgs(); ++ public object Value { get; set; } ++ } ++ public abstract class ComponentBase : IComponent, IHandleAfterRender, IHandleEvent { ++ public ComponentBase(); ++ protected virtual void BuildRenderTree(RenderTreeBuilder builder); ++ protected Task InvokeAsync(Action workItem); ++ protected Task InvokeAsync(Func workItem); ++ void Microsoft.AspNetCore.Components.IComponent.Attach(RenderHandle renderHandle); ++ Task Microsoft.AspNetCore.Components.IHandleAfterRender.OnAfterRenderAsync(); ++ Task Microsoft.AspNetCore.Components.IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, object arg); ++ protected virtual void OnAfterRender(bool firstRender); ++ protected virtual Task OnAfterRenderAsync(bool firstRender); ++ protected virtual void OnInitialized(); ++ protected virtual Task OnInitializedAsync(); ++ protected virtual void OnParametersSet(); ++ protected virtual Task OnParametersSetAsync(); ++ public virtual Task SetParametersAsync(ParameterView parameters); ++ protected virtual bool ShouldRender(); ++ protected void StateHasChanged(); ++ } ++ public abstract class Dispatcher { ++ protected Dispatcher(); ++ public void AssertAccess(); ++ public abstract bool CheckAccess(); ++ public static Dispatcher CreateDefault(); ++ public abstract Task InvokeAsync(Action workItem); ++ public abstract Task InvokeAsync(Func workItem); ++ public abstract Task InvokeAsync(Func> workItem); ++ public abstract Task InvokeAsync(Func workItem); ++ protected void OnUnhandledException(UnhandledExceptionEventArgs e); ++ } ++ public readonly struct ElementReference { ++ public ElementReference(string id); ++ public string Id { get; } ++ } ++ public readonly struct EventCallback : IEventCallback { ++ public static readonly EventCallback Empty; ++ public static readonly EventCallbackFactory Factory; ++ public EventCallback(IHandleEvent receiver, MulticastDelegate @delegate); ++ public bool HasDelegate { get; } ++ public Task InvokeAsync(object arg); ++ } ++ public readonly struct EventCallback : IEventCallback { ++ public static readonly EventCallback Empty; ++ public EventCallback(IHandleEvent receiver, MulticastDelegate @delegate); ++ public bool HasDelegate { get; } ++ public Task InvokeAsync(TValue arg); ++ } ++ public sealed class EventCallbackFactory { ++ public EventCallbackFactory(); ++ public EventCallback Create(object receiver, EventCallback callback); ++ public EventCallback Create(object receiver, Action callback); ++ public EventCallback Create(object receiver, Action callback); ++ public EventCallback Create(object receiver, Func callback); ++ public EventCallback Create(object receiver, Func callback); ++ public EventCallback Create(object receiver, EventCallback callback); ++ public EventCallback Create(object receiver, EventCallback callback); ++ public EventCallback Create(object receiver, Action callback); ++ public EventCallback Create(object receiver, Action callback); ++ public EventCallback Create(object receiver, Func callback); ++ public EventCallback Create(object receiver, Func callback); ++ public EventCallback CreateInferred(object receiver, Action callback, TValue value); ++ public EventCallback CreateInferred(object receiver, Func callback, TValue value); ++ } ++ public static class EventCallbackFactoryBinderExtensions { ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, bool existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTime existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTime existingValue, string format, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTimeOffset existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTimeOffset existingValue, string format, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, decimal existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, double existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, int existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, long existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, bool? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTime? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTime? existingValue, string format, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTimeOffset? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, DateTimeOffset? existingValue, string format, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, decimal? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, double? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, int? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, long? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, float? existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, float existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, string existingValue, CultureInfo culture = null); ++ public static EventCallback CreateBinder(this EventCallbackFactory factory, object receiver, Action setter, T existingValue, CultureInfo culture = null); ++ } ++ public static class EventCallbackFactoryEventArgsExtensions { ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Action callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ public static EventCallback Create(this EventCallbackFactory factory, object receiver, Func callback); ++ } ++ public readonly struct EventCallbackWorkItem { ++ public static readonly EventCallbackWorkItem Empty; ++ public EventCallbackWorkItem(MulticastDelegate @delegate); ++ public Task InvokeAsync(object arg); ++ } ++ public sealed class EventHandlerAttribute : Attribute { ++ public EventHandlerAttribute(string attributeName, Type eventArgsType); ++ public string AttributeName { get; } ++ public Type EventArgsType { get; } ++ } ++ public interface IComponent { ++ void Attach(RenderHandle renderHandle); ++ Task SetParametersAsync(ParameterView parameters); ++ } ++ public interface IHandleAfterRender { ++ Task OnAfterRenderAsync(); ++ } ++ public interface IHandleEvent { ++ Task HandleEventAsync(EventCallbackWorkItem item, object arg); ++ } ++ public sealed class InjectAttribute : Attribute { ++ public InjectAttribute(); ++ } ++ public sealed class LayoutAttribute : Attribute { ++ public LayoutAttribute(Type layoutType); ++ public Type LayoutType { get; private set; } ++ } ++ public abstract class LayoutComponentBase : ComponentBase { ++ protected LayoutComponentBase(); ++ public RenderFragment Body { get; set; } ++ } ++ public class LayoutView : IComponent { ++ public LayoutView(); ++ public RenderFragment ChildContent { get; set; } ++ public Type Layout { get; set; } ++ public void Attach(RenderHandle renderHandle); ++ public Task SetParametersAsync(ParameterView parameters); ++ } ++ public sealed class LocationChangeException : Exception { ++ public LocationChangeException(string message, Exception innerException); ++ } ++ public readonly struct MarkupString { ++ public MarkupString(string value); ++ public string Value { get; } ++ public static explicit operator MarkupString (string value); ++ public override string ToString(); ++ } ++ public class NavigationException : Exception { ++ public NavigationException(string uri); ++ public string Location { get; } ++ } ++ public abstract class NavigationManager { ++ protected NavigationManager(); ++ public string BaseUri { get; protected set; } ++ public string Uri { get; protected set; } ++ public event EventHandler LocationChanged; ++ protected virtual void EnsureInitialized(); ++ protected void Initialize(string baseUri, string uri); ++ public void NavigateTo(string uri, bool forceLoad = false); ++ protected abstract void NavigateToCore(string uri, bool forceLoad); ++ protected void NotifyLocationChanged(bool isInterceptedLink); ++ public Uri ToAbsoluteUri(string relativeUri); ++ public string ToBaseRelativePath(string uri); ++ } ++ public abstract class OwningComponentBase : ComponentBase, IDisposable { ++ protected OwningComponentBase(); ++ protected bool IsDisposed { get; private set; } ++ protected IServiceProvider ScopedServices { get; } ++ protected virtual void Dispose(bool disposing); ++ void System.IDisposable.Dispose(); ++ } ++ public abstract class OwningComponentBase : OwningComponentBase, IDisposable { ++ protected OwningComponentBase(); ++ protected TService Service { get; } ++ } ++ public sealed class ParameterAttribute : Attribute { ++ public ParameterAttribute(); ++ public bool CaptureUnmatchedValues { get; set; } ++ } ++ public readonly struct ParameterValue { ++ public bool Cascading { get; } ++ public string Name { get; } ++ public object Value { get; } ++ } ++ public readonly struct ParameterView { ++ public static ParameterView Empty { get; } ++ public static ParameterView FromDictionary(IDictionary parameters); ++ public ParameterView.Enumerator GetEnumerator(); ++ public TValue GetValueOrDefault(string parameterName); ++ public TValue GetValueOrDefault(string parameterName, TValue defaultValue); ++ public void SetParameterProperties(object target); ++ public IReadOnlyDictionary ToDictionary(); ++ public bool TryGetValue(string parameterName, out TValue result); ++ public struct Enumerator { ++ public ParameterValue Current { get; } ++ public bool MoveNext(); ++ } ++ } ++ public delegate void RenderFragment(RenderTreeBuilder builder); ++ public delegate RenderFragment RenderFragment(TValue value); ++ public readonly struct RenderHandle { ++ public Dispatcher Dispatcher { get; } ++ public bool IsInitialized { get; } ++ public void Render(RenderFragment renderFragment); ++ } ++ public sealed class RouteAttribute : Attribute { ++ public RouteAttribute(string template); ++ public string Template { get; } ++ } ++ public sealed class RouteData { ++ public RouteData(Type pageType, IReadOnlyDictionary routeValues); ++ public Type PageType { get; } ++ public IReadOnlyDictionary RouteValues { get; } ++ } ++ public class RouteView : IComponent { ++ public RouteView(); ++ public Type DefaultLayout { get; set; } ++ public RouteData RouteData { get; set; } ++ public void Attach(RenderHandle renderHandle); ++ protected virtual void Render(RenderTreeBuilder builder); ++ public Task SetParametersAsync(ParameterView parameters); ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.CompilerServices { ++ public static class RuntimeHelpers { ++ public static EventCallback CreateInferredEventCallback(object receiver, Action callback, T value); ++ public static EventCallback CreateInferredEventCallback(object receiver, Func callback, T value); ++ public static T TypeCheck(T value); ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Rendering { ++ public sealed class RenderTreeBuilder : IDisposable { ++ public RenderTreeBuilder(); ++ public void AddAttribute(int sequence, in RenderTreeFrame frame); ++ public void AddAttribute(int sequence, string name, EventCallback value); ++ public void AddAttribute(int sequence, string name, bool value); ++ public void AddAttribute(int sequence, string name, MulticastDelegate value); ++ public void AddAttribute(int sequence, string name, object value); ++ public void AddAttribute(int sequence, string name, string value); ++ public void AddAttribute(int sequence, string name, EventCallback value); ++ public void AddComponentReferenceCapture(int sequence, Action componentReferenceCaptureAction); ++ public void AddContent(int sequence, MarkupString markupContent); ++ public void AddContent(int sequence, RenderFragment fragment); ++ public void AddContent(int sequence, object textContent); ++ public void AddContent(int sequence, string textContent); ++ public void AddContent(int sequence, RenderFragment fragment, TValue value); ++ public void AddElementReferenceCapture(int sequence, Action elementReferenceCaptureAction); ++ public void AddMarkupContent(int sequence, string markupContent); ++ public void AddMultipleAttributes(int sequence, IEnumerable> attributes); ++ public void Clear(); ++ public void CloseComponent(); ++ public void CloseElement(); ++ public void CloseRegion(); ++ public ArrayRange GetFrames(); ++ public void OpenComponent(int sequence, Type componentType); ++ public void OpenComponent(int sequence) where TComponent : IComponent; ++ public void OpenElement(int sequence, string elementName); ++ public void OpenRegion(int sequence); ++ public void SetKey(object value); ++ public void SetUpdatesAttributeName(string updatesAttributeName); ++ void System.IDisposable.Dispose(); ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.RenderTree { ++ public readonly struct ArrayBuilderSegment : IEnumerable, IEnumerable { ++ public T[] Array { get; } ++ public int Count { get; } ++ public int Offset { get; } ++ public T this[int index] { get; } ++ IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); ++ IEnumerator System.Collections.IEnumerable.GetEnumerator(); ++ } ++ public readonly struct ArrayRange { ++ public readonly int Count; ++ public readonly T[] Array; ++ public ArrayRange(T[] array, int count); ++ public ArrayRange Clone(); ++ } ++ public class EventFieldInfo { ++ public EventFieldInfo(); ++ public int ComponentId { get; set; } ++ public object FieldValue { get; set; } ++ } ++ public readonly struct RenderBatch { ++ public ArrayRange DisposedComponentIDs { get; } ++ public ArrayRange DisposedEventHandlerIDs { get; } ++ public ArrayRange ReferenceFrames { get; } ++ public ArrayRange UpdatedComponents { get; } ++ } ++ public abstract class Renderer : IDisposable { ++ public Renderer(IServiceProvider serviceProvider, ILoggerFactory loggerFactory); ++ public abstract Dispatcher Dispatcher { get; } ++ public event UnhandledExceptionEventHandler UnhandledSynchronizationException; ++ protected internal int AssignRootComponentId(IComponent component); ++ public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo fieldInfo, EventArgs eventArgs); ++ public void Dispose(); ++ protected virtual void Dispose(bool disposing); ++ protected ArrayRange GetCurrentRenderTreeFrames(int componentId); ++ protected abstract void HandleException(Exception exception); ++ protected IComponent InstantiateComponent(Type componentType); ++ protected virtual void ProcessPendingRender(); ++ protected Task RenderRootComponentAsync(int componentId); ++ protected Task RenderRootComponentAsync(int componentId, ParameterView initialParameters); ++ protected abstract Task UpdateDisplayAsync(in RenderBatch renderBatch); ++ } ++ public readonly struct RenderTreeDiff { ++ public readonly ArrayBuilderSegment Edits; ++ public readonly int ComponentId; ++ } ++ public readonly struct RenderTreeEdit { ++ [System.Runtime.InteropServices.FieldOffsetAttribute(0)] ++ public readonly RenderTreeEditType Type; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly int MoveToSiblingIndex; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly int ReferenceFrameIndex; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(4)] ++ public readonly int SiblingIndex; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly string RemovedAttributeName; ++ } ++ public enum RenderTreeEditType { ++ PermutationListEnd = 10, ++ PermutationListEntry = 9, ++ PrependFrame = 1, ++ RemoveAttribute = 4, ++ RemoveFrame = 2, ++ SetAttribute = 3, ++ StepIn = 6, ++ StepOut = 7, ++ UpdateMarkup = 8, ++ UpdateText = 5, ++ } ++ public readonly struct RenderTreeFrame { ++ [System.Runtime.InteropServices.FieldOffsetAttribute(4)] ++ public readonly RenderTreeFrameType FrameType; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(24)] ++ public readonly Action ElementReferenceCaptureAction; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly Action ComponentReferenceCaptureAction; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(12)] ++ public readonly int ComponentId; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly int ComponentReferenceCaptureParentFrameIndex; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly int ComponentSubtreeLength; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly int ElementSubtreeLength; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly int RegionSubtreeLength; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(0)] ++ public readonly int Sequence; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(24)] ++ public readonly object AttributeValue; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(32)] ++ public readonly object ComponentKey; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(24)] ++ public readonly object ElementKey; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(32)] ++ public readonly string AttributeEventUpdatesAttributeName; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly string AttributeName; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly string ElementName; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly string ElementReferenceCaptureId; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly string MarkupContent; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly string TextContent; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(16)] ++ public readonly Type ComponentType; ++ [System.Runtime.InteropServices.FieldOffsetAttribute(8)] ++ public readonly ulong AttributeEventHandlerId; ++ public IComponent Component { get; } ++ public override string ToString(); ++ } ++ public enum RenderTreeFrameType : short { ++ Attribute = (short)3, ++ Component = (short)4, ++ ComponentReferenceCapture = (short)7, ++ Element = (short)1, ++ ElementReferenceCapture = (short)6, ++ Markup = (short)8, ++ None = (short)0, ++ Region = (short)5, ++ Text = (short)2, ++ } ++ } ++ namespace Microsoft.AspNetCore.Components.Routing { ++ public interface IHostEnvironmentNavigationManager { ++ void Initialize(string baseUri, string uri); ++ } ++ public interface INavigationInterception { ++ Task EnableNavigationInterceptionAsync(); ++ } ++ public class LocationChangedEventArgs : EventArgs { ++ public LocationChangedEventArgs(string location, bool isNavigationIntercepted); ++ public bool IsNavigationIntercepted { get; } ++ public string Location { get; } ++ } ++ public class Router : IComponent, IDisposable, IHandleAfterRender { ++ public Router(); ++ public IEnumerable AdditionalAssemblies { get; set; } ++ public Assembly AppAssembly { get; set; } ++ public RenderFragment Found { get; set; } ++ public RenderFragment NotFound { get; set; } ++ public void Attach(RenderHandle renderHandle); ++ public void Dispose(); ++ Task Microsoft.AspNetCore.Components.IHandleAfterRender.OnAfterRenderAsync(); ++ public Task SetParametersAsync(ParameterView parameters); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ConcurrencyLimiter.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ConcurrencyLimiter.md new file mode 100644 index 00000000..9521ea0b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ConcurrencyLimiter.md @@ -0,0 +1,37 @@ +# Microsoft.AspNetCore.ConcurrencyLimiter + +``` diff + { ++ namespace Microsoft.AspNetCore.Builder { ++ public static class ConcurrencyLimiterExtensions { ++ public static IApplicationBuilder UseConcurrencyLimiter(this IApplicationBuilder app); ++ } ++ } ++ namespace Microsoft.AspNetCore.ConcurrencyLimiter { ++ public class ConcurrencyLimiterMiddleware { ++ public ConcurrencyLimiterMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IQueuePolicy queue, IOptions options); ++ public Task Invoke(HttpContext context); ++ } ++ public class ConcurrencyLimiterOptions { ++ public ConcurrencyLimiterOptions(); ++ public RequestDelegate OnRejected { get; set; } ++ } ++ public interface IQueuePolicy { ++ void OnExit(); ++ ValueTask TryEnterAsync(); ++ } ++ public class QueuePolicyOptions { ++ public QueuePolicyOptions(); ++ public int MaxConcurrentRequests { get; set; } ++ public int RequestQueueLimit { get; set; } ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class QueuePolicyServiceCollectionExtensions { ++ public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure); ++ public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Connections.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Connections.Abstractions.md new file mode 100644 index 00000000..61fcc579 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Connections.Abstractions.md @@ -0,0 +1,60 @@ +# Microsoft.AspNetCore.Connections.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Connections { +- public abstract class ConnectionContext { ++ public abstract class ConnectionContext : IAsyncDisposable { ++ public virtual CancellationToken ConnectionClosed { get; set; } ++ public virtual EndPoint LocalEndPoint { get; set; } ++ public virtual EndPoint RemoteEndPoint { get; set; } ++ public virtual ValueTask DisposeAsync(); + } +- public class DefaultConnectionContext : ConnectionContext, IConnectionIdFeature, IConnectionItemsFeature, IConnectionLifetimeFeature, IConnectionTransportFeature, IConnectionUserFeature, IDisposable { ++ public class DefaultConnectionContext : ConnectionContext, IConnectionEndPointFeature, IConnectionIdFeature, IConnectionItemsFeature, IConnectionLifetimeFeature, IConnectionTransportFeature, IConnectionUserFeature { +- public CancellationToken ConnectionClosed { get; set; } ++ public override CancellationToken ConnectionClosed { get; set; } ++ public override EndPoint LocalEndPoint { get; set; } ++ public override EndPoint RemoteEndPoint { get; set; } +- public void Dispose(); + ++ public override ValueTask DisposeAsync(); + } ++ public class FileHandleEndPoint : EndPoint { ++ public FileHandleEndPoint(ulong fileHandle, FileHandleType fileHandleType); ++ public ulong FileHandle { get; } ++ public FileHandleType FileHandleType { get; } ++ } ++ public enum FileHandleType { ++ Auto = 0, ++ Pipe = 2, ++ Tcp = 1, ++ } ++ public interface IConnectionFactory { ++ ValueTask ConnectAsync(EndPoint endpoint, CancellationToken cancellationToken = default(CancellationToken)); ++ } ++ public interface IConnectionListener : IAsyncDisposable { ++ EndPoint EndPoint { get; } ++ ValueTask AcceptAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ ValueTask UnbindAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ } ++ public interface IConnectionListenerFactory { ++ ValueTask BindAsync(EndPoint endpoint, CancellationToken cancellationToken = default(CancellationToken)); ++ } ++ public class UriEndPoint : EndPoint { ++ public UriEndPoint(Uri uri); ++ public Uri Uri { get; } ++ } + } + namespace Microsoft.AspNetCore.Connections.Features { ++ public interface IConnectionCompleteFeature { ++ void OnCompleted(Func callback, object state); ++ } ++ public interface IConnectionEndPointFeature { ++ EndPoint LocalEndPoint { get; set; } ++ EndPoint RemoteEndPoint { get; set; } ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Cors.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Cors.md new file mode 100644 index 00000000..ff603d3e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Cors.md @@ -0,0 +1,53 @@ +# Microsoft.AspNetCore.Cors + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public static class CorsEndpointConventionBuilderExtensions { ++ public static TBuilder RequireCors(this TBuilder builder, Action configurePolicy) where TBuilder : IEndpointConventionBuilder; ++ public static TBuilder RequireCors(this TBuilder builder, string policyName) where TBuilder : IEndpointConventionBuilder; ++ } + } + namespace Microsoft.AspNetCore.Cors { ++ public class CorsPolicyMetadata : ICorsMetadata, ICorsPolicyMetadata { ++ public CorsPolicyMetadata(CorsPolicy policy); ++ public CorsPolicy Policy { get; } ++ } +- public class DisableCorsAttribute : Attribute, IDisableCorsAttribute ++ public class DisableCorsAttribute : Attribute, ICorsMetadata, IDisableCorsAttribute +- public class EnableCorsAttribute : Attribute, IEnableCorsAttribute ++ public class EnableCorsAttribute : Attribute, ICorsMetadata, IEnableCorsAttribute + } + namespace Microsoft.AspNetCore.Cors.Infrastructure { + public class CorsMiddleware { +- public CorsMiddleware(RequestDelegate next, ICorsService corsService, CorsPolicy policy); + +- public CorsMiddleware(RequestDelegate next, ICorsService corsService, ICorsPolicyProvider policyProvider); + +- public CorsMiddleware(RequestDelegate next, ICorsService corsService, ICorsPolicyProvider policyProvider, ILoggerFactory loggerFactory); + +- public CorsMiddleware(RequestDelegate next, ICorsService corsService, ICorsPolicyProvider policyProvider, ILoggerFactory loggerFactory, string policyName); + +- public CorsMiddleware(RequestDelegate next, ICorsService corsService, ICorsPolicyProvider policyProvider, string policyName); + ++ public CorsMiddleware(RequestDelegate next, ICorsService corsService, ILoggerFactory loggerFactory); ++ public CorsMiddleware(RequestDelegate next, ICorsService corsService, ILoggerFactory loggerFactory, string policyName); +- public Task Invoke(HttpContext context); + ++ public Task Invoke(HttpContext context, ICorsPolicyProvider corsPolicyProvider); + } + public class CorsService : ICorsService { +- public CorsService(IOptions options); + + } ++ public interface ICorsPolicyMetadata : ICorsMetadata { ++ CorsPolicy Policy { get; } ++ } +- public interface IDisableCorsAttribute ++ public interface IDisableCorsAttribute : ICorsMetadata +- public interface IEnableCorsAttribute ++ public interface IEnableCorsAttribute : ICorsMetadata + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.AzureStorage.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.AzureStorage.md new file mode 100644 index 00000000..9d50ec8d --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.AzureStorage.md @@ -0,0 +1,27 @@ +# Microsoft.AspNetCore.DataProtection.AzureStorage + +``` diff + { + namespace Microsoft.AspNetCore.DataProtection { + public static class AzureDataProtectionBuilderExtensions { ++ public static IDataProtectionBuilder PersistKeysToAzureBlobStorage(this IDataProtectionBuilder builder, CloudBlobContainer container, string blobName); ++ public static IDataProtectionBuilder PersistKeysToAzureBlobStorage(this IDataProtectionBuilder builder, CloudBlockBlob blobReference); ++ public static IDataProtectionBuilder PersistKeysToAzureBlobStorage(this IDataProtectionBuilder builder, CloudStorageAccount storageAccount, string relativePath); +- public static IDataProtectionBuilder PersistKeysToAzureBlobStorage(this IDataProtectionBuilder builder, CloudBlobContainer container, string blobName); + +- public static IDataProtectionBuilder PersistKeysToAzureBlobStorage(this IDataProtectionBuilder builder, CloudBlockBlob blobReference); + +- public static IDataProtectionBuilder PersistKeysToAzureBlobStorage(this IDataProtectionBuilder builder, CloudStorageAccount storageAccount, string relativePath); + + } + } + namespace Microsoft.AspNetCore.DataProtection.AzureStorage { + public sealed class AzureBlobXmlRepository : IXmlRepository { ++ public AzureBlobXmlRepository(Func blobRefFactory); +- public AzureBlobXmlRepository(Func blobRefFactory); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.SystemWeb.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.SystemWeb.md new file mode 100644 index 00000000..ca808c74 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.SystemWeb.md @@ -0,0 +1,35 @@ +# Microsoft.AspNetCore.DataProtection.SystemWeb + +``` diff + { + { +- namespace Microsoft.AspNetCore.DataProtection.SystemWeb { + { +- public sealed class CompatibilityDataProtector : DataProtector { + { +- public CompatibilityDataProtector(string applicationName, string primaryPurpose, string[] specificPurposes); + +- protected override bool PrependHashedPurposeToPlaintext { get; } + +- public override bool IsReprotectRequired(byte[] encryptedData); + +- protected override byte[] ProviderProtect(byte[] userData); + +- protected override byte[] ProviderUnprotect(byte[] encryptedData); + +- public static byte[] RunWithSuppressedPrimaryPurpose(Func callback, object state, byte[] input); + +- } +- public class DataProtectionStartup { + { +- public DataProtectionStartup(); + +- public virtual void ConfigureServices(IServiceCollection services); + +- public virtual IDataProtectionProvider CreateDataProtectionProvider(IServiceProvider services); + +- } +- } +-} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.md new file mode 100644 index 00000000..ac42d379 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.DataProtection.md @@ -0,0 +1,36 @@ +# Microsoft.AspNetCore.DataProtection + +``` diff + { +- namespace Microsoft.AspNetCore.DataProtection.Cng.Internal { + { +- public abstract class CngAuthenticatedEncryptorBase : IAuthenticatedEncryptor, IDisposable, IOptimizedAuthenticatedEncryptor { + { +- protected CngAuthenticatedEncryptorBase(); + +- public byte[] Decrypt(ArraySegment ciphertext, ArraySegment additionalAuthenticatedData); + +- protected unsafe abstract byte[] DecryptImpl(byte* pbCiphertext, uint cbCiphertext, byte* pbAdditionalAuthenticatedData, uint cbAdditionalAuthenticatedData); + +- public abstract void Dispose(); + +- public byte[] Encrypt(ArraySegment plaintext, ArraySegment additionalAuthenticatedData); + +- public byte[] Encrypt(ArraySegment plaintext, ArraySegment additionalAuthenticatedData, uint preBufferSize, uint postBufferSize); + +- protected unsafe abstract byte[] EncryptImpl(byte* pbPlaintext, uint cbPlaintext, byte* pbAdditionalAuthenticatedData, uint cbAdditionalAuthenticatedData, uint cbPreBuffer, uint cbPostBuffer); + +- } +- } + namespace Microsoft.AspNetCore.DataProtection.Internal { +- public class DataProtectionBuilder : IDataProtectionBuilder { + { +- public DataProtectionBuilder(IServiceCollection services); + +- public IServiceCollection Services { get; } + +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.Abstractions.md new file mode 100644 index 00000000..2520743e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.Abstractions.md @@ -0,0 +1,17 @@ +# Microsoft.AspNetCore.Diagnostics.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Diagnostics { ++ public class ErrorContext { ++ public ErrorContext(HttpContext httpContext, Exception exception); ++ public Exception Exception { get; } ++ public HttpContext HttpContext { get; } ++ } ++ public interface IDeveloperPageExceptionFilter { ++ Task HandleExceptionAsync(ErrorContext errorContext, Func next); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.md new file mode 100644 index 00000000..d34cf844 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.md @@ -0,0 +1,87 @@ +# Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore + +``` diff + { +- namespace Microsoft.AspNetCore.DiagnosticsViewPage.Views { + { +- public class AttributeValue { + { +- public AttributeValue(string prefix, object value, bool literal); + +- public bool Literal { get; } + +- public string Prefix { get; } + +- public object Value { get; } + +- public static AttributeValue FromTuple(Tuple value); + +- public static AttributeValue FromTuple(Tuple value); + +- public static implicit operator AttributeValue (Tuple value); + +- } +- public abstract class BaseView { + { +- protected BaseView(); + +- protected HttpContext Context { get; private set; } + +- protected HtmlEncoder HtmlEncoder { get; set; } + +- protected JavaScriptEncoder JavaScriptEncoder { get; set; } + +- protected StreamWriter Output { get; private set; } + +- protected HttpRequest Request { get; private set; } + +- protected HttpResponse Response { get; private set; } + +- protected UrlEncoder UrlEncoder { get; set; } + +- protected void BeginWriteAttribute(string name, string begining, int startPosition, string ending, int endPosition, int thingy); + +- protected void EndWriteAttribute(); + +- public abstract Task ExecuteAsync(); + +- public Task ExecuteAsync(HttpContext context); + +- protected string HtmlEncodeAndReplaceLineBreaks(string input); + +- protected void Write(HelperResult result); + +- protected void Write(object value); + +- protected void Write(string value); + +- protected void WriteAttributeTo(TextWriter writer, string name, string leader, string trailer, params AttributeValue[] values); + +- protected void WriteAttributeValue(string thingy, int startPostion, object value, int endValue, int dealyo, bool yesno); + +- protected void WriteLiteral(object value); + +- protected void WriteLiteral(string value); + +- protected void WriteLiteralTo(TextWriter writer, object value); + +- protected void WriteLiteralTo(TextWriter writer, string value); + +- protected void WriteTo(TextWriter writer, object value); + +- protected void WriteTo(TextWriter writer, string value); + +- } +- public class HelperResult { + { +- public HelperResult(Action action); + +- public Action WriteAction { get; } + +- public void WriteTo(TextWriter writer); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.HealthChecks.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.HealthChecks.md new file mode 100644 index 00000000..b93c1d8b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.HealthChecks.md @@ -0,0 +1,19 @@ +# Microsoft.AspNetCore.Diagnostics.HealthChecks + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public static class HealthCheckEndpointRouteBuilderExtensions { ++ public static IEndpointConventionBuilder MapHealthChecks(this IEndpointRouteBuilder endpoints, string pattern); ++ public static IEndpointConventionBuilder MapHealthChecks(this IEndpointRouteBuilder endpoints, string pattern, HealthCheckOptions options); ++ } + } + namespace Microsoft.AspNetCore.Diagnostics.HealthChecks { + public class HealthCheckOptions { +- public IDictionary ResultStatusCodes { get; } ++ public IDictionary ResultStatusCodes { get; set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.md new file mode 100644 index 00000000..548f86e0 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Diagnostics.md @@ -0,0 +1,109 @@ +# Microsoft.AspNetCore.Diagnostics + +``` diff + { + namespace Microsoft.AspNetCore.Diagnostics { + public class DeveloperExceptionPageMiddleware { +- public DeveloperExceptionPageMiddleware(RequestDelegate next, IOptions options, ILoggerFactory loggerFactory, IHostingEnvironment hostingEnvironment, DiagnosticSource diagnosticSource); + ++ public DeveloperExceptionPageMiddleware(RequestDelegate next, IOptions options, ILoggerFactory loggerFactory, IWebHostEnvironment hostingEnvironment, DiagnosticSource diagnosticSource, IEnumerable filters); + } + public class ExceptionHandlerMiddleware { ++ public ExceptionHandlerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options, DiagnosticListener diagnosticListener); +- public ExceptionHandlerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options, DiagnosticSource diagnosticSource); + + } + } +- namespace Microsoft.AspNetCore.Diagnostics.Views { + { +- public class WelcomePage : BaseView { + { +- public WelcomePage(); + +- public override Task ExecuteAsync(); + +- } +- } +- namespace Microsoft.AspNetCore.DiagnosticsViewPage.Views { + { +- public class AttributeValue { + { +- public AttributeValue(string prefix, object value, bool literal); + +- public bool Literal { get; } + +- public string Prefix { get; } + +- public object Value { get; } + +- public static AttributeValue FromTuple(Tuple value); + +- public static AttributeValue FromTuple(Tuple value); + +- public static implicit operator AttributeValue (Tuple value); + +- } +- public abstract class BaseView { + { +- protected BaseView(); + +- protected HttpContext Context { get; private set; } + +- protected HtmlEncoder HtmlEncoder { get; set; } + +- protected JavaScriptEncoder JavaScriptEncoder { get; set; } + +- protected StreamWriter Output { get; private set; } + +- protected HttpRequest Request { get; private set; } + +- protected HttpResponse Response { get; private set; } + +- protected UrlEncoder UrlEncoder { get; set; } + +- protected void BeginWriteAttribute(string name, string begining, int startPosition, string ending, int endPosition, int thingy); + +- protected void EndWriteAttribute(); + +- public abstract Task ExecuteAsync(); + +- public Task ExecuteAsync(HttpContext context); + +- protected string HtmlEncodeAndReplaceLineBreaks(string input); + +- protected void Write(HelperResult result); + +- protected void Write(object value); + +- protected void Write(string value); + +- protected void WriteAttributeTo(TextWriter writer, string name, string leader, string trailer, params AttributeValue[] values); + +- protected void WriteAttributeValue(string thingy, int startPostion, object value, int endValue, int dealyo, bool yesno); + +- protected void WriteLiteral(object value); + +- protected void WriteLiteral(string value); + +- protected void WriteLiteralTo(TextWriter writer, object value); + +- protected void WriteLiteralTo(TextWriter writer, string value); + +- protected void WriteTo(TextWriter writer, object value); + +- protected void WriteTo(TextWriter writer, string value); + +- } +- public class HelperResult { + { +- public HelperResult(Action action); + +- public Action WriteAction { get; } + +- public void WriteTo(TextWriter writer); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.HeaderPropagation.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.HeaderPropagation.md new file mode 100644 index 00000000..bb9a2785 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.HeaderPropagation.md @@ -0,0 +1,73 @@ +# Microsoft.AspNetCore.HeaderPropagation + +``` diff + { ++ namespace Microsoft.AspNetCore.Builder { ++ public static class HeaderPropagationApplicationBuilderExtensions { ++ public static IApplicationBuilder UseHeaderPropagation(this IApplicationBuilder app); ++ } ++ } ++ namespace Microsoft.AspNetCore.HeaderPropagation { ++ public readonly struct HeaderPropagationContext { ++ public HeaderPropagationContext(HttpContext httpContext, string headerName, StringValues headerValue); ++ public string HeaderName { get; } ++ public StringValues HeaderValue { get; } ++ public HttpContext HttpContext { get; } ++ } ++ public class HeaderPropagationEntry { ++ public HeaderPropagationEntry(string inboundHeaderName, string capturedHeaderName, Func valueFilter); ++ public string CapturedHeaderName { get; } ++ public string InboundHeaderName { get; } ++ public Func ValueFilter { get; } ++ } ++ public sealed class HeaderPropagationEntryCollection : Collection { ++ public HeaderPropagationEntryCollection(); ++ public void Add(string headerName); ++ public void Add(string headerName, Func valueFilter); ++ public void Add(string inboundHeaderName, string outboundHeaderName); ++ public void Add(string inboundHeaderName, string outboundHeaderName, Func valueFilter); ++ } ++ public class HeaderPropagationMessageHandler : DelegatingHandler { ++ public HeaderPropagationMessageHandler(HeaderPropagationMessageHandlerOptions options, HeaderPropagationValues values); ++ protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken); ++ } ++ public class HeaderPropagationMessageHandlerEntry { ++ public HeaderPropagationMessageHandlerEntry(string capturedHeaderName, string outboundHeaderName); ++ public string CapturedHeaderName { get; } ++ public string OutboundHeaderName { get; } ++ } ++ public sealed class HeaderPropagationMessageHandlerEntryCollection : Collection { ++ public HeaderPropagationMessageHandlerEntryCollection(); ++ public void Add(string headerName); ++ public void Add(string capturedHeaderName, string outboundHeaderName); ++ } ++ public class HeaderPropagationMessageHandlerOptions { ++ public HeaderPropagationMessageHandlerOptions(); ++ public HeaderPropagationMessageHandlerEntryCollection Headers { get; set; } ++ } ++ public class HeaderPropagationMiddleware { ++ public HeaderPropagationMiddleware(RequestDelegate next, IOptions options, HeaderPropagationValues values); ++ public Task Invoke(HttpContext context); ++ } ++ public class HeaderPropagationOptions { ++ public HeaderPropagationOptions(); ++ public HeaderPropagationEntryCollection Headers { get; set; } ++ } ++ public class HeaderPropagationValues { ++ public HeaderPropagationValues(); ++ public IDictionary Headers { get; set; } ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class HeaderPropagationHttpClientBuilderExtensions { ++ public static IHttpClientBuilder AddHeaderPropagation(this IHttpClientBuilder builder); ++ public static IHttpClientBuilder AddHeaderPropagation(this IHttpClientBuilder builder, Action configure); ++ } ++ public static class HeaderPropagationServiceCollectionExtensions { ++ public static IServiceCollection AddHeaderPropagation(this IServiceCollection services); ++ public static IServiceCollection AddHeaderPropagation(this IServiceCollection services, Action configureOptions); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.Abstractions.md new file mode 100644 index 00000000..2878ac0c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.Abstractions.md @@ -0,0 +1,39 @@ +# Microsoft.AspNetCore.Hosting.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Hosting { ++ public interface IStartupConfigureContainerFilter { ++ Action ConfigureContainer(Action container); ++ } ++ public interface IStartupConfigureServicesFilter { ++ Action ConfigureServices(Action next); ++ } ++ public interface IWebHostEnvironment : IHostEnvironment { ++ IFileProvider WebRootFileProvider { get; set; } ++ string WebRootPath { get; set; } ++ } + public class WebHostBuilderContext { +- public IHostingEnvironment HostingEnvironment { get; set; } ++ public IWebHostEnvironment HostingEnvironment { get; set; } + } + public static class WebHostDefaults { ++ public static readonly string StaticWebAssetsKey; + } + } +- namespace Microsoft.AspNetCore.Hosting.Internal { + { +- public interface IStartupConfigureContainerFilter { + { +- Action ConfigureContainer(Action container); + +- } +- public interface IStartupConfigureServicesFilter { + { +- Action ConfigureServices(Action next); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.Server.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.Server.Abstractions.md new file mode 100644 index 00000000..517569b4 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.Server.Abstractions.md @@ -0,0 +1,23 @@ +# Microsoft.AspNetCore.Hosting.Server.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Hosting.Server { ++ public interface IServerIntegratedAuth { ++ string AuthenticationScheme { get; } ++ bool IsEnabled { get; } ++ } ++ public class ServerIntegratedAuth : IServerIntegratedAuth { ++ public ServerIntegratedAuth(); ++ public string AuthenticationScheme { get; set; } ++ public bool IsEnabled { get; set; } ++ } + } ++ namespace Microsoft.AspNetCore.Hosting.Server.Abstractions { ++ public interface IHostContextContainer { ++ TContext HostContext { get; set; } ++ } ++ } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.md new file mode 100644 index 00000000..b0c57103 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Hosting.md @@ -0,0 +1,248 @@ +# Microsoft.AspNetCore.Hosting + +``` diff + { + namespace Microsoft.AspNetCore.Hosting { +- public class ConventionBasedStartup : IStartup { + { +- public ConventionBasedStartup(StartupMethods methods); + +- public void Configure(IApplicationBuilder app); + +- public IServiceProvider ConfigureServices(IServiceCollection services); + +- } + public static class WebHostBuilderExtensions { ++ public static IWebHostBuilder Configure(this IWebHostBuilder hostBuilder, Action configureApp); ++ public static IWebHostBuilder UseStaticWebAssets(this IWebHostBuilder builder); + } + } +- namespace Microsoft.AspNetCore.Hosting.Internal { + { +- public class ApplicationLifetime : IApplicationLifetime, IApplicationLifetime { + { +- public ApplicationLifetime(ILogger logger); + +- public CancellationToken ApplicationStarted { get; } + +- public CancellationToken ApplicationStopped { get; } + +- public CancellationToken ApplicationStopping { get; } + +- public void NotifyStarted(); + +- public void NotifyStopped(); + +- public void StopApplication(); + +- } +- public class AutoRequestServicesStartupFilter : IStartupFilter { + { +- public AutoRequestServicesStartupFilter(); + +- public Action Configure(Action next); + +- } +- public class ConfigureBuilder { + { +- public ConfigureBuilder(MethodInfo configure); + +- public MethodInfo MethodInfo { get; } + +- public Action Build(object instance); + +- } +- public class ConfigureContainerBuilder { + { +- public ConfigureContainerBuilder(MethodInfo configureContainerMethod); + +- public Func, Action> ConfigureContainerFilters { get; set; } + +- public MethodInfo MethodInfo { get; } + +- public Action Build(object instance); + +- public Type GetContainerType(); + +- } +- public class ConfigureServicesBuilder { + { +- public ConfigureServicesBuilder(MethodInfo configureServices); + +- public MethodInfo MethodInfo { get; } + +- public Func, Func> StartupServiceFilters { get; set; } + +- public Func Build(object instance); + +- } +- public class HostedServiceExecutor { + { +- public HostedServiceExecutor(ILogger logger, IEnumerable services); + +- public Task StartAsync(CancellationToken token); + +- public Task StopAsync(CancellationToken token); + +- } +- public class HostingApplication : IHttpApplication { + { +- public HostingApplication(RequestDelegate application, ILogger logger, DiagnosticListener diagnosticSource, IHttpContextFactory httpContextFactory); + +- public HostingApplication.Context CreateContext(IFeatureCollection contextFeatures); + +- public void DisposeContext(HostingApplication.Context context, Exception exception); + +- public Task ProcessRequestAsync(HostingApplication.Context context); + +- public struct Context { + { +- public Activity Activity { get; set; } + +- public bool EventLogEnabled { get; set; } + +- public HttpContext HttpContext { get; set; } + +- public IDisposable Scope { get; set; } + +- public long StartTimestamp { get; set; } + +- } +- } +- public class HostingEnvironment : IHostingEnvironment, IHostingEnvironment { + { +- public HostingEnvironment(); + +- public string ApplicationName { get; set; } + +- public IFileProvider ContentRootFileProvider { get; set; } + +- public string ContentRootPath { get; set; } + +- public string EnvironmentName { get; set; } + +- public IFileProvider WebRootFileProvider { get; set; } + +- public string WebRootPath { get; set; } + +- } +- public static class HostingEnvironmentExtensions { + { +- public static void Initialize(this IHostingEnvironment hostingEnvironment, string contentRootPath, WebHostOptions options); + +- } +- public sealed class HostingEventSource : EventSource { + { +- public static readonly HostingEventSource Log; + +- public void HostStart(); + +- public void HostStop(); + +- public void RequestStart(string method, string path); + +- public void RequestStop(); + +- public void UnhandledException(); + +- } +- public class RequestServicesContainerMiddleware { + { +- public RequestServicesContainerMiddleware(RequestDelegate next, IServiceScopeFactory scopeFactory); + +- public Task Invoke(HttpContext httpContext); + +- } +- public class RequestServicesFeature : IDisposable, IServiceProvidersFeature { + { +- public RequestServicesFeature(HttpContext context, IServiceScopeFactory scopeFactory); + +- public IServiceProvider RequestServices { get; set; } + +- public void Dispose(); + +- } +- public class StartupLoader { + { +- public StartupLoader(); + +- public static Type FindStartupType(string startupAssemblyName, string environmentName); + +- public static StartupMethods LoadMethods(IServiceProvider hostingServiceProvider, Type startupType, string environmentName); + +- } +- public class StartupMethods { + { +- public StartupMethods(object instance, Action configure, Func configureServices); + +- public Action ConfigureDelegate { get; } + +- public Func ConfigureServicesDelegate { get; } + +- public object StartupInstance { get; } + +- } +- public class WebHostOptions { + { +- public WebHostOptions(); + +- public WebHostOptions(IConfiguration configuration); + +- public WebHostOptions(IConfiguration configuration, string applicationNameFallback); + +- public string ApplicationName { get; set; } + +- public bool CaptureStartupErrors { get; set; } + +- public string ContentRootPath { get; set; } + +- public bool DetailedErrors { get; set; } + +- public string Environment { get; set; } + +- public IReadOnlyList HostingStartupAssemblies { get; set; } + +- public IReadOnlyList HostingStartupExcludeAssemblies { get; set; } + +- public bool PreventHostingStartup { get; set; } + +- public TimeSpan ShutdownTimeout { get; set; } + +- public string StartupAssembly { get; set; } + +- public bool SuppressStatusMessages { get; set; } + +- public string WebRoot { get; set; } + +- public IEnumerable GetFinalHostingStartupAssemblies(); + +- } +- public class WebHostUtilities { + { +- public WebHostUtilities(); + +- public static bool ParseBool(IConfiguration configuration, string key); + +- } +- } ++ namespace Microsoft.AspNetCore.Hosting.StaticWebAssets { ++ public class StaticWebAssetsLoader { ++ public StaticWebAssetsLoader(); ++ public static void UseStaticWebAssets(IWebHostEnvironment environment, IConfiguration configuration); ++ } ++ } ++ namespace Microsoft.AspNetCore.Http { ++ public class DefaultHttpContextFactory : IHttpContextFactory { ++ public DefaultHttpContextFactory(IServiceProvider serviceProvider); ++ public HttpContext Create(IFeatureCollection featureCollection); ++ public void Dispose(HttpContext httpContext); ++ } ++ } ++ namespace Microsoft.Extensions.Hosting { ++ public static class GenericHostWebHostBuilderExtensions { ++ public static IHostBuilder ConfigureWebHost(this IHostBuilder builder, Action configure); ++ } ++ } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Abstractions.md new file mode 100644 index 00000000..358f206c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Abstractions.md @@ -0,0 +1,290 @@ +# Microsoft.AspNetCore.Http.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public abstract class EndpointBuilder { ++ protected EndpointBuilder(); ++ public string DisplayName { get; set; } ++ public IList Metadata { get; } ++ public RequestDelegate RequestDelegate { get; set; } ++ public abstract Endpoint Build(); ++ } ++ public interface IEndpointConventionBuilder { ++ void Add(Action convention); ++ } + } ++ namespace Microsoft.AspNetCore.Cors.Infrastructure { ++ public interface ICorsMetadata ++ } + namespace Microsoft.AspNetCore.Http { ++ public class Endpoint { ++ public Endpoint(RequestDelegate requestDelegate, EndpointMetadataCollection metadata, string displayName); ++ public string DisplayName { get; } ++ public EndpointMetadataCollection Metadata { get; } ++ public RequestDelegate RequestDelegate { get; } ++ public override string ToString(); ++ } ++ public static class EndpointHttpContextExtensions { ++ public static Endpoint GetEndpoint(this HttpContext context); ++ public static void SetEndpoint(this HttpContext context, Endpoint endpoint); ++ } ++ public sealed class EndpointMetadataCollection : IEnumerable, IEnumerable, IReadOnlyCollection, IReadOnlyList { ++ public static readonly EndpointMetadataCollection Empty; ++ public EndpointMetadataCollection(IEnumerable items); ++ public EndpointMetadataCollection(params object[] items); ++ public int Count { get; } ++ public object this[int index] { get; } ++ public EndpointMetadataCollection.Enumerator GetEnumerator(); ++ public T GetMetadata() where T : class; ++ public IReadOnlyList GetOrderedMetadata() where T : class; ++ IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); ++ IEnumerator System.Collections.IEnumerable.GetEnumerator(); ++ public struct Enumerator : IDisposable, IEnumerator, IEnumerator { ++ public object Current { get; } ++ public void Dispose(); ++ public bool MoveNext(); ++ public void Reset(); ++ } ++ } +- public struct FragmentString : IEquatable ++ public readonly struct FragmentString : IEquatable +- public struct HostString : IEquatable ++ public readonly struct HostString : IEquatable + public abstract class HttpContext { +- public abstract AuthenticationManager Authentication { get; } + + } + public abstract class HttpRequest { ++ public virtual PipeReader BodyReader { get; } ++ public virtual RouteValueDictionary RouteValues { get; set; } + } + public abstract class HttpResponse { ++ public virtual PipeWriter BodyWriter { get; } ++ public virtual Task CompleteAsync(); ++ public virtual void RegisterForDisposeAsync(IAsyncDisposable disposable); ++ public virtual Task StartAsync(CancellationToken cancellationToken = default(CancellationToken)); + } +- public struct PathString : IEquatable ++ public readonly struct PathString : IEquatable +- public struct QueryString : IEquatable ++ public readonly struct QueryString : IEquatable ++ public static class RequestTrailerExtensions { ++ public static bool CheckTrailersAvailable(this HttpRequest request); ++ public static StringValues GetDeclaredTrailers(this HttpRequest request); ++ public static StringValues GetTrailer(this HttpRequest request, string trailerName); ++ public static bool SupportsTrailers(this HttpRequest request); ++ } + } +- namespace Microsoft.AspNetCore.Http.Authentication { + { +- public class AuthenticateInfo { + { +- public AuthenticateInfo(); + +- public AuthenticationDescription Description { get; set; } + +- public ClaimsPrincipal Principal { get; set; } + +- public AuthenticationProperties Properties { get; set; } + +- } +- public class AuthenticationDescription { + { +- public AuthenticationDescription(); + +- public AuthenticationDescription(IDictionary items); + +- public string AuthenticationScheme { get; set; } + +- public string DisplayName { get; set; } + +- public IDictionary Items { get; } + +- } +- public abstract class AuthenticationManager { + { +- public const string AutomaticScheme = "Automatic"; + +- protected AuthenticationManager(); + +- public abstract HttpContext HttpContext { get; } + +- public abstract Task AuthenticateAsync(AuthenticateContext context); + +- public virtual Task AuthenticateAsync(string authenticationScheme); + +- public virtual Task ChallengeAsync(); + +- public virtual Task ChallengeAsync(AuthenticationProperties properties); + +- public virtual Task ChallengeAsync(string authenticationScheme); + +- public virtual Task ChallengeAsync(string authenticationScheme, AuthenticationProperties properties); + +- public abstract Task ChallengeAsync(string authenticationScheme, AuthenticationProperties properties, ChallengeBehavior behavior); + +- public virtual Task ForbidAsync(); + +- public virtual Task ForbidAsync(AuthenticationProperties properties); + +- public virtual Task ForbidAsync(string authenticationScheme); + +- public virtual Task ForbidAsync(string authenticationScheme, AuthenticationProperties properties); + +- public abstract Task GetAuthenticateInfoAsync(string authenticationScheme); + +- public abstract IEnumerable GetAuthenticationSchemes(); + +- public virtual Task SignInAsync(string authenticationScheme, ClaimsPrincipal principal); + +- public abstract Task SignInAsync(string authenticationScheme, ClaimsPrincipal principal, AuthenticationProperties properties); + +- public virtual Task SignOutAsync(string authenticationScheme); + +- public abstract Task SignOutAsync(string authenticationScheme, AuthenticationProperties properties); + +- } +- public class AuthenticationProperties { + { +- public AuthenticationProperties(); + +- public AuthenticationProperties(IDictionary items); + +- public bool? AllowRefresh { get; set; } + +- public DateTimeOffset? ExpiresUtc { get; set; } + +- public bool IsPersistent { get; set; } + +- public DateTimeOffset? IssuedUtc { get; set; } + +- public IDictionary Items { get; } + +- public string RedirectUri { get; set; } + +- } +- } ++ namespace Microsoft.AspNetCore.Http.Features { ++ public interface IEndpointFeature { ++ Endpoint Endpoint { get; set; } ++ } ++ public interface IRouteValuesFeature { ++ RouteValueDictionary RouteValues { get; set; } ++ } ++ } +- namespace Microsoft.AspNetCore.Http.Internal { + { +- public struct HeaderSegment : IEquatable { + { +- public HeaderSegment(StringSegment formatting, StringSegment data); + +- public StringSegment Data { get; } + +- public StringSegment Formatting { get; } + +- public bool Equals(HeaderSegment other); + +- public override bool Equals(object obj); + +- public override int GetHashCode(); + +- public static bool operator ==(HeaderSegment left, HeaderSegment right); + +- public static bool operator !=(HeaderSegment left, HeaderSegment right); + +- } +- public struct HeaderSegmentCollection : IEnumerable, IEnumerable, IEquatable { + { +- public HeaderSegmentCollection(StringValues headers); + +- public bool Equals(HeaderSegmentCollection other); + +- public override bool Equals(object obj); + +- public HeaderSegmentCollection.Enumerator GetEnumerator(); + +- public override int GetHashCode(); + +- public static bool operator ==(HeaderSegmentCollection left, HeaderSegmentCollection right); + +- public static bool operator !=(HeaderSegmentCollection left, HeaderSegmentCollection right); + +- IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator { + { +- public Enumerator(StringValues headers); + +- public HeaderSegment Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } +- public static class ParsingHelpers { + { +- public static void AppendHeaderJoined(IHeaderDictionary headers, string key, params string[] values); + +- public static void AppendHeaderUnmodified(IHeaderDictionary headers, string key, StringValues values); + +- public static StringValues GetHeader(IHeaderDictionary headers, string key); + +- public static StringValues GetHeaderSplit(IHeaderDictionary headers, string key); + +- public static StringValues GetHeaderUnmodified(IHeaderDictionary headers, string key); + +- public static void SetHeaderJoined(IHeaderDictionary headers, string key, StringValues value); + +- public static void SetHeaderUnmodified(IHeaderDictionary headers, string key, StringValues? values); + +- } +- } ++ namespace Microsoft.AspNetCore.Routing { ++ public class RouteValueDictionary : ICollection>, IDictionary, IEnumerable, IEnumerable>, IReadOnlyCollection>, IReadOnlyDictionary { ++ public RouteValueDictionary(); ++ public RouteValueDictionary(object values); ++ public IEqualityComparer Comparer { get; } ++ public int Count { get; } ++ public ICollection Keys { get; } ++ bool System.Collections.Generic.ICollection>.IsReadOnly { get; } ++ IEnumerable System.Collections.Generic.IReadOnlyDictionary.Keys { get; } ++ IEnumerable System.Collections.Generic.IReadOnlyDictionary.Values { get; } ++ public object this[string key] { get; set; } ++ public ICollection Values { get; } ++ public void Add(string key, object value); ++ public void Clear(); ++ public bool ContainsKey(string key); ++ public static RouteValueDictionary FromArray(KeyValuePair[] items); ++ public RouteValueDictionary.Enumerator GetEnumerator(); ++ public bool Remove(string key); ++ public bool Remove(string key, out object value); ++ void System.Collections.Generic.ICollection>.Add(KeyValuePair item); ++ bool System.Collections.Generic.ICollection>.Contains(KeyValuePair item); ++ void System.Collections.Generic.ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex); ++ bool System.Collections.Generic.ICollection>.Remove(KeyValuePair item); ++ IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); ++ IEnumerator System.Collections.IEnumerable.GetEnumerator(); ++ public bool TryAdd(string key, object value); ++ public bool TryGetValue(string key, out object value); ++ public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { ++ public Enumerator(RouteValueDictionary dictionary); ++ public KeyValuePair Current { get; } ++ object System.Collections.IEnumerator.Current { get; } ++ public void Dispose(); ++ public bool MoveNext(); ++ public void Reset(); ++ } ++ } ++ } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.Client.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.Client.md new file mode 100644 index 00000000..8aa26b0b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.Client.md @@ -0,0 +1,86 @@ +# Microsoft.AspNetCore.Http.Connections.Client + +``` diff + { + namespace Microsoft.AspNetCore.Http.Connections.Client { + public class HttpConnection : ConnectionContext, IConnectionInherentKeepAliveFeature { +- public Task DisposeAsync(); + ++ public override ValueTask DisposeAsync(); + } ++ public class HttpConnectionFactory : IConnectionFactory { ++ public HttpConnectionFactory(IOptions options, ILoggerFactory loggerFactory); ++ public ValueTask ConnectAsync(EndPoint endPoint, CancellationToken cancellationToken = default(CancellationToken)); ++ } + public class HttpConnectionOptions { ++ public TransferFormat DefaultTransferFormat { get; set; } + } ++ public class NoTransportSupportedException : Exception { ++ public NoTransportSupportedException(string message); ++ } ++ public class TransportFailedException : Exception { ++ public TransportFailedException(string transportType, string message, Exception innerException = null); ++ public string TransportType { get; } ++ } + } +- namespace Microsoft.AspNetCore.Http.Connections.Client.Internal { + { +- public interface ITransport : IDuplexPipe { + { +- Task StartAsync(Uri url, TransferFormat transferFormat); + +- Task StopAsync(); + +- } +- public interface ITransportFactory { + { +- ITransport CreateTransport(HttpTransportType availableServerTransports); + +- } +- public class LongPollingTransport : IDuplexPipe, ITransport { + { +- public LongPollingTransport(HttpClient httpClient); + +- public LongPollingTransport(HttpClient httpClient, ILoggerFactory loggerFactory); + +- public PipeReader Input { get; } + +- public PipeWriter Output { get; } + +- public Task StartAsync(Uri url, TransferFormat transferFormat); + +- public Task StopAsync(); + +- } +- public class ServerSentEventsTransport : IDuplexPipe, ITransport { + { +- public ServerSentEventsTransport(HttpClient httpClient); + +- public ServerSentEventsTransport(HttpClient httpClient, ILoggerFactory loggerFactory); + +- public PipeReader Input { get; } + +- public PipeWriter Output { get; } + +- public Task StartAsync(Uri url, TransferFormat transferFormat); + +- public Task StopAsync(); + +- } +- public class WebSocketsTransport : IDuplexPipe, ITransport { + { +- public WebSocketsTransport(HttpConnectionOptions httpConnectionOptions, ILoggerFactory loggerFactory, Func> accessTokenProvider); + +- public PipeReader Input { get; } + +- public PipeWriter Output { get; } + +- public Task StartAsync(Uri url, TransferFormat transferFormat); + +- public Task StopAsync(); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.Common.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.Common.md new file mode 100644 index 00000000..2b841f44 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.Common.md @@ -0,0 +1,12 @@ +# Microsoft.AspNetCore.Http.Connections.Common + +``` diff + { + namespace Microsoft.AspNetCore.Http.Connections { + public static class NegotiateProtocol { ++ public static NegotiationResponse ParseResponse(ReadOnlySpan content); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.md new file mode 100644 index 00000000..b48e72af --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Connections.md @@ -0,0 +1,187 @@ +# Microsoft.AspNetCore.Http.Connections + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public sealed class ConnectionEndpointRouteBuilder : IEndpointConventionBuilder { ++ public void Add(Action convention); ++ } ++ public static class ConnectionEndpointRouteBuilderExtensions { ++ public static ConnectionEndpointRouteBuilder MapConnectionHandler(this IEndpointRouteBuilder endpoints, string pattern) where TConnectionHandler : ConnectionHandler; ++ public static ConnectionEndpointRouteBuilder MapConnectionHandler(this IEndpointRouteBuilder endpoints, string pattern, Action configureOptions) where TConnectionHandler : ConnectionHandler; ++ public static ConnectionEndpointRouteBuilder MapConnections(this IEndpointRouteBuilder endpoints, string pattern, HttpConnectionDispatcherOptions options, Action configure); ++ public static ConnectionEndpointRouteBuilder MapConnections(this IEndpointRouteBuilder endpoints, string pattern, Action configure); ++ } + } + namespace Microsoft.AspNetCore.Http.Connections { ++ public class ConnectionOptions { ++ public ConnectionOptions(); ++ public TimeSpan? DisconnectTimeout { get; set; } ++ } ++ public class ConnectionOptionsSetup : IConfigureOptions { ++ public static TimeSpan DefaultDisconectTimeout; ++ public ConnectionOptionsSetup(); ++ public void Configure(ConnectionOptions options); ++ } ++ public class NegotiateMetadata { ++ public NegotiateMetadata(); ++ } + } +- namespace Microsoft.AspNetCore.Http.Connections.Internal { + { +- public class HttpConnectionContext : ConnectionContext, IConnectionHeartbeatFeature, IConnectionIdFeature, IConnectionInherentKeepAliveFeature, IConnectionItemsFeature, IConnectionTransportFeature, IConnectionUserFeature, IHttpContextFeature, IHttpTransportFeature, ITransferFormatFeature { + { +- public HttpConnectionContext(string id, ILogger logger); + +- public HttpConnectionContext(string id, IDuplexPipe transport, IDuplexPipe application, ILogger logger = null); + +- public TransferFormat ActiveFormat { get; set; } + +- public IDuplexPipe Application { get; set; } + +- public Task ApplicationTask { get; set; } + +- public CancellationTokenSource Cancellation { get; set; } + +- public override string ConnectionId { get; set; } + +- public override IFeatureCollection Features { get; } + +- public bool HasInherentKeepAlive { get; set; } + +- public HttpContext HttpContext { get; set; } + +- public override IDictionary Items { get; set; } + +- public DateTime LastSeenUtc { get; set; } + +- public Task PreviousPollTask { get; set; } + +- public SemaphoreSlim StateLock { get; } + +- public HttpConnectionStatus Status { get; set; } + +- public TransferFormat SupportedFormats { get; set; } + +- public override IDuplexPipe Transport { get; set; } + +- public Task TransportTask { get; set; } + +- public HttpTransportType TransportType { get; set; } + +- public ClaimsPrincipal User { get; set; } + +- public SemaphoreSlim WriteLock { get; } + +- public Task DisposeAsync(bool closeGracefully = false); + +- public void OnHeartbeat(Action action, object state); + +- public void TickHeartbeat(); + +- } +- public class HttpConnectionDispatcher { + { +- public HttpConnectionDispatcher(HttpConnectionManager manager, ILoggerFactory loggerFactory); + +- public Task ExecuteAsync(HttpContext context, HttpConnectionDispatcherOptions options, ConnectionDelegate connectionDelegate); + +- public Task ExecuteNegotiateAsync(HttpContext context, HttpConnectionDispatcherOptions options); + +- } +- public class HttpConnectionManager { + { +- public HttpConnectionManager(ILoggerFactory loggerFactory, IApplicationLifetime appLifetime); + +- public void CloseConnections(); + +- public HttpConnectionContext CreateConnection(); + +- public HttpConnectionContext CreateConnection(PipeOptions transportPipeOptions, PipeOptions appPipeOptions); + +- public Task DisposeAndRemoveAsync(HttpConnectionContext connection, bool closeGracefully); + +- public void RemoveConnection(string id); + +- public Task ScanAsync(); + +- public void Start(); + +- public bool TryGetConnection(string id, out HttpConnectionContext connection); + +- } +- public enum HttpConnectionStatus { + { +- Active = 1, + +- Disposed = 2, + +- Inactive = 0, + +- } +- public static class ServerSentEventsMessageFormatter { + { +- public static Task WriteMessageAsync(ReadOnlySequence payload, Stream output); + +- } +- } +- namespace Microsoft.AspNetCore.Http.Connections.Internal.Transports { + { +- public interface IHttpTransport { + { +- Task ProcessRequestAsync(HttpContext context, CancellationToken token); + +- } +- public class LongPollingTransport : IHttpTransport { + { +- public LongPollingTransport(CancellationToken timeoutToken, PipeReader application, ILoggerFactory loggerFactory); + +- public Task ProcessRequestAsync(HttpContext context, CancellationToken token); + +- } +- public class ServerSentEventsTransport : IHttpTransport { + { +- public ServerSentEventsTransport(PipeReader application, string connectionId, ILoggerFactory loggerFactory); + +- public Task ProcessRequestAsync(HttpContext context, CancellationToken token); + +- } +- public class WebSocketsTransport : IHttpTransport { + { +- public WebSocketsTransport(WebSocketOptions options, IDuplexPipe application, HttpConnectionContext connection, ILoggerFactory loggerFactory); + +- public Task ProcessRequestAsync(HttpContext context, CancellationToken token); + +- public Task ProcessSocketAsync(WebSocket socket); + +- } +- } +- namespace Microsoft.AspNetCore.Internal { + { +- public static class AwaitableThreadPool { + { +- public static AwaitableThreadPool.Awaitable Yield(); + +- public readonly struct Awaitable : ICriticalNotifyCompletion, INotifyCompletion { + { +- public bool IsCompleted { get; } + +- public AwaitableThreadPool.Awaitable GetAwaiter(); + +- public void GetResult(); + +- public void OnCompleted(Action continuation); + +- public void UnsafeOnCompleted(Action continuation); + +- } +- } +- } + namespace Microsoft.Extensions.DependencyInjection { + public static class ConnectionsDependencyInjectionExtensions { ++ public static IServiceCollection AddConnections(this IServiceCollection services, Action options); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Extensions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Extensions.md new file mode 100644 index 00000000..09eaced1 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Extensions.md @@ -0,0 +1,15 @@ +# Microsoft.AspNetCore.Http.Extensions + +``` diff + { + namespace Microsoft.AspNetCore.Http { ++ public static class HttpContextServerVariableExtensions { ++ public static string GetServerVariable(this HttpContext context, string variableName); ++ } + public static class ResponseExtensions { ++ public static void Redirect(this HttpResponse response, string location, bool permanent, bool preserveMethod); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Features.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Features.md new file mode 100644 index 00000000..03bdd4d2 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.Features.md @@ -0,0 +1,147 @@ +# Microsoft.AspNetCore.Http.Features + +``` diff + { + namespace Microsoft.AspNetCore.Http.Features { + public struct FeatureReferences { ++ public void Initalize(IFeatureCollection collection); ++ public void Initalize(IFeatureCollection collection, int revision); + } ++ public enum HttpsCompressionMode { ++ Compress = 2, ++ Default = 0, ++ DoNotCompress = 1, ++ } ++ public interface IHttpRequestTrailersFeature { ++ bool Available { get; } ++ IHeaderDictionary Trailers { get; } ++ } ++ public interface IHttpResetFeature { ++ void Reset(int errorCode); ++ } ++ public interface IHttpResponseBodyFeature { ++ Stream Stream { get; } ++ PipeWriter Writer { get; } ++ Task CompleteAsync(); ++ void DisableBuffering(); ++ Task SendFileAsync(string path, long offset, long? count, CancellationToken cancellationToken = default(CancellationToken)); ++ Task StartAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ } ++ public interface IHttpsCompressionFeature { ++ HttpsCompressionMode Mode { get; set; } ++ } ++ public interface IRequestBodyPipeFeature { ++ PipeReader Reader { get; } ++ } ++ public interface IServerVariablesFeature { ++ string this[string variableName] { get; set; } ++ } + } + namespace Microsoft.AspNetCore.Http.Features.Authentication { +- public class AuthenticateContext { + { +- public AuthenticateContext(string authenticationScheme); + +- public bool Accepted { get; private set; } + +- public string AuthenticationScheme { get; } + +- public IDictionary Description { get; private set; } + +- public Exception Error { get; private set; } + +- public ClaimsPrincipal Principal { get; private set; } + +- public IDictionary Properties { get; private set; } + +- public virtual void Authenticated(ClaimsPrincipal principal, IDictionary properties, IDictionary description); + +- public virtual void Failed(Exception error); + +- public virtual void NotAuthenticated(); + +- } +- public enum ChallengeBehavior { + { +- Automatic = 0, + +- Forbidden = 2, + +- Unauthorized = 1, + +- } +- public class ChallengeContext { + { +- public ChallengeContext(string authenticationScheme); + +- public ChallengeContext(string authenticationScheme, IDictionary properties, ChallengeBehavior behavior); + +- public bool Accepted { get; private set; } + +- public string AuthenticationScheme { get; } + +- public ChallengeBehavior Behavior { get; } + +- public IDictionary Properties { get; } + +- public void Accept(); + +- } +- public class DescribeSchemesContext { + { +- public DescribeSchemesContext(); + +- public IEnumerable> Results { get; } + +- public void Accept(IDictionary description); + +- } +- public interface IAuthenticationHandler { + { +- Task AuthenticateAsync(AuthenticateContext context); + +- Task ChallengeAsync(ChallengeContext context); + +- void GetDescriptions(DescribeSchemesContext context); + +- Task SignInAsync(SignInContext context); + +- Task SignOutAsync(SignOutContext context); + +- } + public interface IHttpAuthenticationFeature { +- IAuthenticationHandler Handler { get; set; } + + } +- public class SignInContext { + { +- public SignInContext(string authenticationScheme, ClaimsPrincipal principal, IDictionary properties); + +- public bool Accepted { get; private set; } + +- public string AuthenticationScheme { get; } + +- public ClaimsPrincipal Principal { get; } + +- public IDictionary Properties { get; } + +- public void Accept(); + +- } +- public class SignOutContext { + { +- public SignOutContext(string authenticationScheme, IDictionary properties); + +- public bool Accepted { get; private set; } + +- public string AuthenticationScheme { get; } + +- public IDictionary Properties { get; } + +- public void Accept(); + +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.md new file mode 100644 index 00000000..92868eb7 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Http.md @@ -0,0 +1,518 @@ +# Microsoft.AspNetCore.Http + +``` diff + { ++ namespace Microsoft.AspNetCore.Builder { ++ public class ApplicationBuilder : IApplicationBuilder { ++ public ApplicationBuilder(IServiceProvider serviceProvider); ++ public ApplicationBuilder(IServiceProvider serviceProvider, object server); ++ public IServiceProvider ApplicationServices { get; set; } ++ public IDictionary Properties { get; } ++ public IFeatureCollection ServerFeatures { get; } ++ public RequestDelegate Build(); ++ public IApplicationBuilder New(); ++ public IApplicationBuilder Use(Func middleware); ++ } ++ } +- namespace Microsoft.AspNetCore.Builder.Internal { + { +- public class ApplicationBuilder : IApplicationBuilder { + { +- public ApplicationBuilder(IServiceProvider serviceProvider); + +- public ApplicationBuilder(IServiceProvider serviceProvider, object server); + +- public IServiceProvider ApplicationServices { get; set; } + +- public IDictionary Properties { get; } + +- public IFeatureCollection ServerFeatures { get; } + +- public RequestDelegate Build(); + +- public IApplicationBuilder New(); + +- public IApplicationBuilder Use(Func middleware); + +- } +- } + namespace Microsoft.AspNetCore.Http { ++ public class BindingAddress { ++ public BindingAddress(); ++ public string Host { get; } ++ public bool IsUnixPipe { get; } ++ public string PathBase { get; } ++ public int Port { get; } ++ public string Scheme { get; } ++ public string UnixPipePath { get; } ++ public override bool Equals(object obj); ++ public override int GetHashCode(); ++ public static BindingAddress Parse(string address); ++ public override string ToString(); ++ } +- public class DefaultHttpContext : HttpContext { ++ public sealed class DefaultHttpContext : HttpContext { +- public override AuthenticationManager Authentication { get; } + ++ public FormOptions FormOptions { get; set; } ++ public HttpContext HttpContext { get; } ++ public IServiceScopeFactory ServiceScopeFactory { get; set; } +- public virtual void Initialize(IFeatureCollection features); ++ public void Initialize(IFeatureCollection features); +- protected virtual AuthenticationManager InitializeAuthenticationManager(); + +- protected virtual ConnectionInfo InitializeConnectionInfo(); + +- protected virtual HttpRequest InitializeHttpRequest(); + +- protected virtual HttpResponse InitializeHttpResponse(); + +- protected virtual WebSocketManager InitializeWebSocketManager(); + +- public virtual void Uninitialize(); ++ public void Uninitialize(); +- protected virtual void UninitializeAuthenticationManager(AuthenticationManager instance); + +- protected virtual void UninitializeConnectionInfo(ConnectionInfo instance); + +- protected virtual void UninitializeHttpRequest(HttpRequest instance); + +- protected virtual void UninitializeHttpResponse(HttpResponse instance); + +- protected virtual void UninitializeWebSocketManager(WebSocketManager instance); + + } ++ public class FormFile : IFormFile { ++ public FormFile(Stream baseStream, long baseStreamOffset, long length, string name, string fileName); ++ public string ContentDisposition { get; set; } ++ public string ContentType { get; set; } ++ public string FileName { get; } ++ public IHeaderDictionary Headers { get; set; } ++ public long Length { get; } ++ public string Name { get; } ++ public void CopyTo(Stream target); ++ public Task CopyToAsync(Stream target, CancellationToken cancellationToken = default(CancellationToken)); ++ public Stream OpenReadStream(); ++ } ++ public class FormFileCollection : List, IEnumerable, IEnumerable, IFormFileCollection, IReadOnlyCollection, IReadOnlyList { ++ public FormFileCollection(); ++ public IFormFile this[string name] { get; } ++ public IFormFile GetFile(string name); ++ public IReadOnlyList GetFiles(string name); ++ } + public class HttpContextFactory : IHttpContextFactory { ++ public HttpContextFactory(IOptions formOptions, IServiceScopeFactory serviceScopeFactory); ++ public HttpContextFactory(IOptions formOptions, IServiceScopeFactory serviceScopeFactory, IHttpContextAccessor httpContextAccessor); + } ++ public class QueryCollection : IEnumerable, IEnumerable>, IQueryCollection { ++ public static readonly QueryCollection Empty; ++ public QueryCollection(); ++ public QueryCollection(QueryCollection store); ++ public QueryCollection(Dictionary store); ++ public QueryCollection(int capacity); ++ public int Count { get; } ++ public ICollection Keys { get; } ++ public StringValues this[string key] { get; } ++ public bool ContainsKey(string key); ++ public QueryCollection.Enumerator GetEnumerator(); ++ IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); ++ IEnumerator System.Collections.IEnumerable.GetEnumerator(); ++ public bool TryGetValue(string key, out StringValues value); ++ public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { ++ public KeyValuePair Current { get; } ++ object System.Collections.IEnumerator.Current { get; } ++ public void Dispose(); ++ public bool MoveNext(); ++ void System.Collections.IEnumerator.Reset(); ++ } ++ } ++ public static class SendFileFallback { ++ public static Task SendFileAsync(Stream destination, string filePath, long offset, long? count, CancellationToken cancellationToken); ++ } ++ public class StreamResponseBodyFeature : IHttpResponseBodyFeature { ++ public StreamResponseBodyFeature(Stream stream); ++ public StreamResponseBodyFeature(Stream stream, IHttpResponseBodyFeature priorFeature); ++ public IHttpResponseBodyFeature PriorFeature { get; } ++ public Stream Stream { get; } ++ public PipeWriter Writer { get; } ++ public virtual Task CompleteAsync(); ++ public virtual void DisableBuffering(); ++ public void Dispose(); ++ public virtual Task SendFileAsync(string path, long offset, long? count, CancellationToken cancellationToken); ++ public virtual Task StartAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ } + } +- namespace Microsoft.AspNetCore.Http.Authentication.Internal { + { +- public class DefaultAuthenticationManager : AuthenticationManager { + { +- public DefaultAuthenticationManager(HttpContext context); + +- public override HttpContext HttpContext { get; } + +- public override Task AuthenticateAsync(AuthenticateContext context); + +- public override Task ChallengeAsync(string authenticationScheme, AuthenticationProperties properties, ChallengeBehavior behavior); + +- public override Task GetAuthenticateInfoAsync(string authenticationScheme); + +- public override IEnumerable GetAuthenticationSchemes(); + +- public virtual void Initialize(HttpContext context); + +- public override Task SignInAsync(string authenticationScheme, ClaimsPrincipal principal, AuthenticationProperties properties); + +- public override Task SignOutAsync(string authenticationScheme, AuthenticationProperties properties); + +- public virtual void Uninitialize(); + +- } +- } + namespace Microsoft.AspNetCore.Http.Features { ++ public class RequestBodyPipeFeature : IRequestBodyPipeFeature { ++ public RequestBodyPipeFeature(HttpContext context); ++ public PipeReader Reader { get; } ++ } ++ public class RequestServicesFeature : IAsyncDisposable, IDisposable, IServiceProvidersFeature { ++ public RequestServicesFeature(HttpContext context, IServiceScopeFactory scopeFactory); ++ public IServiceProvider RequestServices { get; set; } ++ public void Dispose(); ++ public ValueTask DisposeAsync(); ++ } ++ public class RouteValuesFeature : IRouteValuesFeature { ++ public RouteValuesFeature(); ++ public RouteValueDictionary RouteValues { get; set; } ++ } + } + namespace Microsoft.AspNetCore.Http.Features.Authentication { + public class HttpAuthenticationFeature : IHttpAuthenticationFeature { +- public IAuthenticationHandler Handler { get; set; } + + } + } +- namespace Microsoft.AspNetCore.Http.Internal { + { +- public class BindingAddress { + { +- public BindingAddress(); + +- public string Host { get; private set; } + +- public bool IsUnixPipe { get; } + +- public string PathBase { get; private set; } + +- public int Port { get; internal set; } + +- public string Scheme { get; private set; } + +- public string UnixPipePath { get; } + +- public override bool Equals(object obj); + +- public override int GetHashCode(); + +- public static BindingAddress Parse(string address); + +- public override string ToString(); + +- } +- public static class BufferingHelper { + { +- public static string TempDirectory { get; } + +- public static HttpRequest EnableRewind(this HttpRequest request, int bufferThreshold = 30720, long? bufferLimit = default(long?)); + +- public static MultipartSection EnableRewind(this MultipartSection section, Action registerForDispose, int bufferThreshold = 30720, long? bufferLimit = default(long?)); + +- } +- public class DefaultConnectionInfo : ConnectionInfo { + { +- public DefaultConnectionInfo(IFeatureCollection features); + +- public override X509Certificate2 ClientCertificate { get; set; } + +- public override string Id { get; set; } + +- public override IPAddress LocalIpAddress { get; set; } + +- public override int LocalPort { get; set; } + +- public override IPAddress RemoteIpAddress { get; set; } + +- public override int RemotePort { get; set; } + +- public override Task GetClientCertificateAsync(CancellationToken cancellationToken = default(CancellationToken)); + +- public virtual void Initialize(IFeatureCollection features); + +- public virtual void Uninitialize(); + +- } +- public class DefaultHttpRequest : HttpRequest { + { +- public DefaultHttpRequest(HttpContext context); + +- public override Stream Body { get; set; } + +- public override long? ContentLength { get; set; } + +- public override string ContentType { get; set; } + +- public override IRequestCookieCollection Cookies { get; set; } + +- public override IFormCollection Form { get; set; } + +- public override bool HasFormContentType { get; } + +- public override IHeaderDictionary Headers { get; } + +- public override HostString Host { get; set; } + +- public override HttpContext HttpContext { get; } + +- public override bool IsHttps { get; set; } + +- public override string Method { get; set; } + +- public override PathString Path { get; set; } + +- public override PathString PathBase { get; set; } + +- public override string Protocol { get; set; } + +- public override IQueryCollection Query { get; set; } + +- public override QueryString QueryString { get; set; } + +- public override string Scheme { get; set; } + +- public virtual void Initialize(HttpContext context); + +- public override Task ReadFormAsync(CancellationToken cancellationToken); + +- public virtual void Uninitialize(); + +- } +- public class DefaultHttpResponse : HttpResponse { + { +- public DefaultHttpResponse(HttpContext context); + +- public override Stream Body { get; set; } + +- public override long? ContentLength { get; set; } + +- public override string ContentType { get; set; } + +- public override IResponseCookies Cookies { get; } + +- public override bool HasStarted { get; } + +- public override IHeaderDictionary Headers { get; } + +- public override HttpContext HttpContext { get; } + +- public override int StatusCode { get; set; } + +- public virtual void Initialize(HttpContext context); + +- public override void OnCompleted(Func callback, object state); + +- public override void OnStarting(Func callback, object state); + +- public override void Redirect(string location, bool permanent); + +- public virtual void Uninitialize(); + +- } +- public class DefaultWebSocketManager : WebSocketManager { + { +- public DefaultWebSocketManager(IFeatureCollection features); + +- public override bool IsWebSocketRequest { get; } + +- public override IList WebSocketRequestedProtocols { get; } + +- public override Task AcceptWebSocketAsync(string subProtocol); + +- public virtual void Initialize(IFeatureCollection features); + +- public virtual void Uninitialize(); + +- } +- public class FormFile : IFormFile { + { +- public FormFile(Stream baseStream, long baseStreamOffset, long length, string name, string fileName); + +- public string ContentDisposition { get; set; } + +- public string ContentType { get; set; } + +- public string FileName { get; } + +- public IHeaderDictionary Headers { get; set; } + +- public long Length { get; } + +- public string Name { get; } + +- public void CopyTo(Stream target); + +- public Task CopyToAsync(Stream target, CancellationToken cancellationToken = default(CancellationToken)); + +- public Stream OpenReadStream(); + +- } +- public class FormFileCollection : List, IEnumerable, IEnumerable, IFormFileCollection, IReadOnlyCollection, IReadOnlyList { + { +- public FormFileCollection(); + +- public IFormFile this[string name] { get; } + +- public IFormFile GetFile(string name); + +- public IReadOnlyList GetFiles(string name); + +- } +- public class ItemsDictionary : ICollection>, IDictionary, IEnumerable, IEnumerable> { + { +- public ItemsDictionary(); + +- public ItemsDictionary(IDictionary items); + +- public IDictionary Items { get; } + +- int System.Collections.Generic.ICollection>.Count { get; } + +- bool System.Collections.Generic.ICollection>.IsReadOnly { get; } + +- object System.Collections.Generic.IDictionary.this[object key] { get; set; } + +- ICollection System.Collections.Generic.IDictionary.Keys { get; } + +- ICollection System.Collections.Generic.IDictionary.Values { get; } + +- void System.Collections.Generic.ICollection>.Add(KeyValuePair item); + +- void System.Collections.Generic.ICollection>.Clear(); + +- bool System.Collections.Generic.ICollection>.Contains(KeyValuePair item); + +- void System.Collections.Generic.ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex); + +- bool System.Collections.Generic.ICollection>.Remove(KeyValuePair item); + +- void System.Collections.Generic.IDictionary.Add(object key, object value); + +- bool System.Collections.Generic.IDictionary.ContainsKey(object key); + +- bool System.Collections.Generic.IDictionary.Remove(object key); + +- bool System.Collections.Generic.IDictionary.TryGetValue(object key, out object value); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- } +- public class QueryCollection : IEnumerable, IEnumerable>, IQueryCollection { + { +- public static readonly QueryCollection Empty; + +- public QueryCollection(); + +- public QueryCollection(QueryCollection store); + +- public QueryCollection(Dictionary store); + +- public QueryCollection(int capacity); + +- public int Count { get; } + +- public ICollection Keys { get; } + +- public StringValues this[string key] { get; } + +- public bool ContainsKey(string key); + +- public QueryCollection.Enumerator GetEnumerator(); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public bool TryGetValue(string key, out StringValues value); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { + { +- public KeyValuePair Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- void System.Collections.IEnumerator.Reset(); + +- } +- } +- public class RequestCookieCollection : IEnumerable, IEnumerable>, IRequestCookieCollection { + { +- public static readonly RequestCookieCollection Empty; + +- public RequestCookieCollection(); + +- public RequestCookieCollection(Dictionary store); + +- public RequestCookieCollection(int capacity); + +- public int Count { get; } + +- public ICollection Keys { get; } + +- public string this[string key] { get; } + +- public bool ContainsKey(string key); + +- public RequestCookieCollection.Enumerator GetEnumerator(); + +- public static RequestCookieCollection Parse(IList values); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public bool TryGetValue(string key, out string value); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { + { +- public KeyValuePair Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } +- public class ResponseCookies : IResponseCookies { + { +- public ResponseCookies(IHeaderDictionary headers, ObjectPool builderPool); + +- public void Append(string key, string value); + +- public void Append(string key, string value, CookieOptions options); + +- public void Delete(string key); + +- public void Delete(string key, CookieOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.HttpOverrides.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.HttpOverrides.md new file mode 100644 index 00000000..e3d47a16 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.HttpOverrides.md @@ -0,0 +1,36 @@ +# Microsoft.AspNetCore.HttpOverrides + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public static class CertificateForwardingBuilderExtensions { ++ public static IApplicationBuilder UseCertificateForwarding(this IApplicationBuilder app); ++ } + } + namespace Microsoft.AspNetCore.HttpOverrides { ++ public class CertificateForwardingMiddleware { ++ public CertificateForwardingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options); ++ public Task Invoke(HttpContext httpContext); ++ } ++ public class CertificateForwardingOptions { ++ public Func HeaderConverter; ++ public CertificateForwardingOptions(); ++ public string CertificateHeader { get; set; } ++ } + } +- namespace Microsoft.AspNetCore.HttpOverrides.Internal { + { +- public static class IPEndPointParser { + { +- public static bool TryParse(string addressWithPort, out IPEndPoint endpoint); + +- } +- } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class CertificateForwardingServiceExtensions { ++ public static IServiceCollection AddCertificateForwarding(this IServiceCollection services, Action configure); ++ } ++ } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.EntityFrameworkCore.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.EntityFrameworkCore.md new file mode 100644 index 00000000..14c4c3e8 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.EntityFrameworkCore.md @@ -0,0 +1,39 @@ +# Microsoft.AspNetCore.Identity.EntityFrameworkCore + +``` diff + { + namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore { + public abstract class IdentityDbContext : IdentityUserContext where TUser : IdentityUser where TRole : IdentityRole where TKey : IEquatable where TUserClaim : IdentityUserClaim where TUserRole : IdentityUserRole where TUserLogin : IdentityUserLogin where TRoleClaim : IdentityRoleClaim where TUserToken : IdentityUserToken { +- public DbSet RoleClaims { get; set; } ++ public virtual DbSet RoleClaims { get; set; } +- public DbSet Roles { get; set; } ++ public virtual DbSet Roles { get; set; } +- public DbSet UserRoles { get; set; } ++ public virtual DbSet UserRoles { get; set; } + } + public abstract class IdentityUserContext : DbContext where TUser : IdentityUser where TKey : IEquatable where TUserClaim : IdentityUserClaim where TUserLogin : IdentityUserLogin where TUserToken : IdentityUserToken { +- public DbSet UserClaims { get; set; } ++ public virtual DbSet UserClaims { get; set; } +- public DbSet UserLogins { get; set; } ++ public virtual DbSet UserLogins { get; set; } +- public DbSet Users { get; set; } ++ public virtual DbSet Users { get; set; } +- public DbSet UserTokens { get; set; } ++ public virtual DbSet UserTokens { get; set; } + } + public class RoleStore : IDisposable, IQueryableRoleStore, IRoleClaimStore, IRoleStore where TRole : IdentityRole where TContext : DbContext where TKey : IEquatable where TUserRole : IdentityUserRole, new() where TRoleClaim : IdentityRoleClaim, new() { +- public TContext Context { get; private set; } ++ public virtual TContext Context { get; private set; } + } + public class UserOnlyStore : UserStoreBase, IDisposable, IProtectedUserStore, IQueryableUserStore, IUserAuthenticationTokenStore, IUserAuthenticatorKeyStore, IUserClaimStore, IUserEmailStore, IUserLockoutStore, IUserLoginStore, IUserPasswordStore, IUserPhoneNumberStore, IUserSecurityStampStore, IUserStore, IUserTwoFactorRecoveryCodeStore, IUserTwoFactorStore where TUser : IdentityUser where TContext : DbContext where TKey : IEquatable where TUserClaim : IdentityUserClaim, new() where TUserLogin : IdentityUserLogin, new() where TUserToken : IdentityUserToken, new() { +- public TContext Context { get; private set; } ++ public virtual TContext Context { get; private set; } + } + public class UserStore : UserStoreBase, IDisposable, IProtectedUserStore, IUserStore where TUser : IdentityUser where TRole : IdentityRole where TContext : DbContext where TKey : IEquatable where TUserClaim : IdentityUserClaim, new() where TUserRole : IdentityUserRole, new() where TUserLogin : IdentityUserLogin, new() where TUserToken : IdentityUserToken, new() where TRoleClaim : IdentityRoleClaim, new() { +- public TContext Context { get; private set; } ++ public virtual TContext Context { get; private set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.Specification.Tests.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.Specification.Tests.md new file mode 100644 index 00000000..f734f6f3 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.Specification.Tests.md @@ -0,0 +1,24 @@ +# Microsoft.AspNetCore.Identity.Specification.Tests + +``` diff + { + namespace Microsoft.AspNetCore.Identity.Test { + public static class IdentityResultAssert { +- public static void IsFailure(IdentityResult result, IdentityError error); ++ public static void IsFailure(IdentityResult result, IdentityError error = null); + } + public abstract class UserManagerSpecificationTestBase where TUser : class where TKey : IEquatable { ++ public Task CanChangeEmailOnlyIfEmailSame(); +- public Task CreateUpdatesSecurityStamp(); + ++ public Task PasswordValidatorWithNoErrorsCanBlockAddPassword(); ++ public Task PasswordValidatorWithNoErrorsCanBlockChangePassword(); ++ public Task PasswordValidatorWithNoErrorsCanBlockCreateUser(); ++ public Task PasswordValidatorWithNoErrorsCanBlockResetPasswordWithStaticTokenProvider(); +- protected virtual bool ShouldSkipDbTests(); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V3.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V3.md new file mode 100644 index 00000000..ab132e65 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V3.md @@ -0,0 +1,59 @@ +# Microsoft.AspNetCore.Identity.UI.Views.V3 + +``` diff + { + namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Internal { + public class Areas_Identity_Pages__Layout : RazorPage { +- public IHostingEnvironment Environment { get; private set; } ++ public IWebHostEnvironment Environment { get; private set; } + } + } + namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Internal.Account { ++ public class Areas_Identity_Pages_Account__StatusMessage : RazorPage { ++ public Areas_Identity_Pages_Account__StatusMessage(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public override Task ExecuteAsync(); ++ } ++ public class Areas_Identity_Pages_Account_ConfirmEmailChange : Page { ++ public Areas_Identity_Pages_Account_ConfirmEmailChange(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public ConfirmEmailChangeModel Model { get; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public ViewDataDictionary ViewData { get; } ++ public override Task ExecuteAsync(); ++ } ++ public class Areas_Identity_Pages_Account_RegisterConfirmation : Page { ++ public Areas_Identity_Pages_Account_RegisterConfirmation(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public RegisterConfirmationModel Model { get; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public ViewDataDictionary ViewData { get; } ++ public override Task ExecuteAsync(); ++ } + } + namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Internal.Account.Manage { ++ public class Areas_Identity_Pages_Account_Manage_Email : Page { ++ public Areas_Identity_Pages_Account_Manage_Email(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public EmailModel Model { get; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public ViewDataDictionary ViewData { get; } ++ public override Task ExecuteAsync(); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V4.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V4.md new file mode 100644 index 00000000..db162cda --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.Views.V4.md @@ -0,0 +1,59 @@ +# Microsoft.AspNetCore.Identity.UI.Views.V4 + +``` diff + { + namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Internal { + public class Areas_Identity_Pages__Layout : RazorPage { +- public IHostingEnvironment Environment { get; private set; } ++ public IWebHostEnvironment Environment { get; private set; } + } + } + namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Internal.Account { ++ public class Areas_Identity_Pages_Account__StatusMessage : RazorPage { ++ public Areas_Identity_Pages_Account__StatusMessage(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public override Task ExecuteAsync(); ++ } ++ public class Areas_Identity_Pages_Account_ConfirmEmailChange : Page { ++ public Areas_Identity_Pages_Account_ConfirmEmailChange(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public ConfirmEmailChangeModel Model { get; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public ViewDataDictionary ViewData { get; } ++ public override Task ExecuteAsync(); ++ } ++ public class Areas_Identity_Pages_Account_RegisterConfirmation : Page { ++ public Areas_Identity_Pages_Account_RegisterConfirmation(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public RegisterConfirmationModel Model { get; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public ViewDataDictionary ViewData { get; } ++ public override Task ExecuteAsync(); ++ } + } + namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Internal.Account.Manage { ++ public class Areas_Identity_Pages_Account_Manage_Email : Page { ++ public Areas_Identity_Pages_Account_Manage_Email(); ++ public IViewComponentHelper Component { get; private set; } ++ public IHtmlHelper Html { get; private set; } ++ public IJsonHelper Json { get; private set; } ++ public EmailModel Model { get; } ++ public IModelExpressionProvider ModelExpressionProvider { get; private set; } ++ public IUrlHelper Url { get; private set; } ++ public ViewDataDictionary ViewData { get; } ++ public override Task ExecuteAsync(); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.md new file mode 100644 index 00000000..cce8405e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.UI.md @@ -0,0 +1,142 @@ +# Microsoft.AspNetCore.Identity.UI + +``` diff + { + namespace Microsoft.AspNetCore.Identity { + public static class IdentityBuilderUIExtensions { +- public static IdentityBuilder AddDefaultUI(this IdentityBuilder builder, UIFramework framework); + + } + } + namespace Microsoft.AspNetCore.Identity.UI { +- public class DefaultUIOptions { + { +- public DefaultUIOptions(); + +- public UIFramework UIFramework { get; set; } + +- } +- public enum UIFramework { + { +- Bootstrap3 = 0, + +- Bootstrap4 = 1, + +- } ++ public sealed class UIFrameworkAttribute : Attribute { ++ public UIFrameworkAttribute(string uiFramework); ++ public string UIFramework { get; } ++ } + } + namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Internal { ++ public abstract class ConfirmEmailChangeModel : PageModel { ++ protected ConfirmEmailChangeModel(); ++ public string StatusMessage { get; set; } ++ public virtual Task OnGetAsync(string userId, string email, string code); ++ } + public abstract class ConfirmEmailModel : PageModel { ++ public string StatusMessage { get; set; } + } + public abstract class LoginModel : PageModel { ++ public virtual Task OnPostSendVerificationEmailAsync(); + } ++ public class RegisterConfirmationModel : PageModel { ++ public RegisterConfirmationModel(); ++ public bool DisplayConfirmAccountLink { get; set; } ++ public string Email { get; set; } ++ public string EmailConfirmationUrl { get; set; } ++ public virtual Task OnGetAsync(string email); ++ } + public abstract class RegisterModel : PageModel { ++ public IList ExternalLogins { get; set; } +- public virtual void OnGet(string returnUrl = null); + ++ public virtual Task OnGetAsync(string returnUrl = null); + } + } + namespace Microsoft.AspNetCore.Identity.UI.V3.Pages.Account.Manage.Internal { ++ public abstract class EmailModel : PageModel { ++ protected EmailModel(); ++ public string Email { get; set; } ++ public EmailModel.InputModel Input { get; set; } ++ public bool IsEmailConfirmed { get; set; } ++ public string StatusMessage { get; set; } ++ public virtual Task OnGetAsync(); ++ public virtual Task OnPostChangeEmailAsync(); ++ public virtual Task OnPostSendVerificationEmailAsync(); ++ public class InputModel { ++ public InputModel(); ++ public string NewEmail { get; set; } ++ } ++ } + public abstract class IndexModel : PageModel { +- public bool IsEmailConfirmed { get; set; } + +- public virtual Task OnPostSendVerificationEmailAsync(); + + public class InputModel { +- public string Email { get; set; } + + } + } + public static class ManageNavPages { ++ public static string Email { get; } ++ public static string EmailNavClass(ViewContext viewContext); + } + } + namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Internal { ++ public abstract class ConfirmEmailChangeModel : PageModel { ++ protected ConfirmEmailChangeModel(); ++ public string StatusMessage { get; set; } ++ public virtual Task OnGetAsync(string userId, string email, string code); ++ } + public abstract class ConfirmEmailModel : PageModel { ++ public string StatusMessage { get; set; } + } ++ public class RegisterConfirmationModel : PageModel { ++ public RegisterConfirmationModel(); ++ public bool DisplayConfirmAccountLink { get; set; } ++ public string Email { get; set; } ++ public string EmailConfirmationUrl { get; set; } ++ public virtual Task OnGetAsync(string email); ++ } + public abstract class RegisterModel : PageModel { ++ public IList ExternalLogins { get; set; } +- public virtual void OnGet(string returnUrl = null); + ++ public virtual Task OnGetAsync(string returnUrl = null); + } + } + namespace Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal { ++ public abstract class EmailModel : PageModel { ++ protected EmailModel(); ++ public string Email { get; set; } ++ public EmailModel.InputModel Input { get; set; } ++ public bool IsEmailConfirmed { get; set; } ++ public string StatusMessage { get; set; } ++ public virtual Task OnGetAsync(); ++ public virtual Task OnPostChangeEmailAsync(); ++ public virtual Task OnPostSendVerificationEmailAsync(); ++ public class InputModel { ++ public InputModel(); ++ public string NewEmail { get; set; } ++ } ++ } + public abstract class IndexModel : PageModel { +- public bool IsEmailConfirmed { get; set; } + +- public virtual Task OnPostSendVerificationEmailAsync(); + + public class InputModel { +- public string Email { get; set; } + + } + } + public static class ManageNavPages { ++ public static string Email { get; } ++ public static string EmailNavClass(ViewContext viewContext); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.md new file mode 100644 index 00000000..dfe9118a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Identity.md @@ -0,0 +1,44 @@ +# Microsoft.AspNetCore.Identity + +``` diff + { +- namespace Microsoft.AspNetCore.Builder { + { +- public static class BuilderExtensions { + { +- public static IApplicationBuilder UseIdentity(this IApplicationBuilder app); + +- } +- } + namespace Microsoft.AspNetCore.Identity { + public class DataProtectorTokenProvider : IUserTwoFactorTokenProvider where TUser : class { +- public DataProtectorTokenProvider(IDataProtectionProvider dataProtectionProvider, IOptions options); + ++ public DataProtectorTokenProvider(IDataProtectionProvider dataProtectionProvider, IOptions options, ILogger> logger); ++ public ILogger> Logger { get; } + } + public class ExternalLoginInfo : UserLoginInfo { ++ public AuthenticationProperties AuthenticationProperties { get; set; } + } + public class SecurityStampValidator : ISecurityStampValidator where TUser : class { +- public SecurityStampValidator(IOptions options, SignInManager signInManager, ISystemClock clock); + ++ public SecurityStampValidator(IOptions options, SignInManager signInManager, ISystemClock clock, ILoggerFactory logger); ++ public ILogger Logger { get; set; } + } + public class SignInManager where TUser : class { +- public SignInManager(UserManager userManager, IHttpContextAccessor contextAccessor, IUserClaimsPrincipalFactory claimsFactory, IOptions optionsAccessor, ILogger> logger, IAuthenticationSchemeProvider schemes); + ++ public SignInManager(UserManager userManager, IHttpContextAccessor contextAccessor, IUserClaimsPrincipalFactory claimsFactory, IOptions optionsAccessor, ILogger> logger, IAuthenticationSchemeProvider schemes, IUserConfirmation confirmation); ++ public virtual Task SignInWithClaimsAsync(TUser user, AuthenticationProperties authenticationProperties, IEnumerable additionalClaims); ++ public virtual Task SignInWithClaimsAsync(TUser user, bool isPersistent, IEnumerable additionalClaims); + } + public class TwoFactorSecurityStampValidator : SecurityStampValidator, ISecurityStampValidator, ITwoFactorSecurityStampValidator where TUser : class { +- public TwoFactorSecurityStampValidator(IOptions options, SignInManager signInManager, ISystemClock clock); + ++ public TwoFactorSecurityStampValidator(IOptions options, SignInManager signInManager, ISystemClock clock, ILoggerFactory logger); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.JsonPatch.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.JsonPatch.md new file mode 100644 index 00000000..f9646b57 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.JsonPatch.md @@ -0,0 +1,15 @@ +# Microsoft.AspNetCore.JsonPatch + +``` diff + { + namespace Microsoft.AspNetCore.JsonPatch.Internal { + public class ListAdapter : IAdapter { +- protected struct PositionInfo ++ protected readonly struct PositionInfo + } +- public struct ParsedPath ++ public readonly struct ParsedPath + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Localization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Localization.md new file mode 100644 index 00000000..dc992c3f --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Localization.md @@ -0,0 +1,17 @@ +# Microsoft.AspNetCore.Localization + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public static class RequestLocalizationOptionsExtensions { ++ public static RequestLocalizationOptions AddInitialRequestCultureProvider(this RequestLocalizationOptions requestLocalizationOptions, RequestCultureProvider requestCultureProvider); ++ } + } + namespace Microsoft.AspNetCore.Localization { + public class RequestLocalizationMiddleware { ++ public RequestLocalizationMiddleware(RequestDelegate next, IOptions options, ILoggerFactory loggerFactory); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Metadata.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Metadata.md new file mode 100644 index 00000000..2439fb25 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Metadata.md @@ -0,0 +1,15 @@ +# Microsoft.AspNetCore.Metadata + +``` diff + { ++ namespace Microsoft.AspNetCore.Authorization { ++ public interface IAllowAnonymous ++ public interface IAuthorizeData { ++ string AuthenticationSchemes { get; set; } ++ string Policy { get; set; } ++ string Roles { get; set; } ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Abstractions.md new file mode 100644 index 00000000..949560e6 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Abstractions.md @@ -0,0 +1,13 @@ +# Microsoft.AspNetCore.Mvc.Abstractions + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.Formatters { + public abstract class OutputFormatterCanWriteContext { +- protected OutputFormatterCanWriteContext(); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.ApiExplorer.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.ApiExplorer.md new file mode 100644 index 00000000..b2b76cae --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.ApiExplorer.md @@ -0,0 +1,119 @@ +# Microsoft.AspNetCore.Mvc.ApiExplorer + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.ApiExplorer { +- public class ApiDescription { + { +- public ApiDescription(); + +- public ActionDescriptor ActionDescriptor { get; set; } + +- public string GroupName { get; set; } + +- public string HttpMethod { get; set; } + +- public IList ParameterDescriptions { get; } + +- public IDictionary Properties { get; } + +- public string RelativePath { get; set; } + +- public IList SupportedRequestFormats { get; } + +- public IList SupportedResponseTypes { get; } + +- } +- public class ApiDescriptionProviderContext { + { +- public ApiDescriptionProviderContext(IReadOnlyList actions); + +- public IReadOnlyList Actions { get; } + +- public IList Results { get; } + +- } +- public class ApiParameterDescription { + { +- public ApiParameterDescription(); + +- public object DefaultValue { get; set; } + +- public bool IsRequired { get; set; } + +- public ModelMetadata ModelMetadata { get; set; } + +- public string Name { get; set; } + +- public ParameterDescriptor ParameterDescriptor { get; set; } + +- public ApiParameterRouteInfo RouteInfo { get; set; } + +- public BindingSource Source { get; set; } + +- public Type Type { get; set; } + +- } +- public class ApiParameterRouteInfo { + { +- public ApiParameterRouteInfo(); + +- public IEnumerable Constraints { get; set; } + +- public object DefaultValue { get; set; } + +- public bool IsOptional { get; set; } + +- } +- public class ApiRequestFormat { + { +- public ApiRequestFormat(); + +- public IInputFormatter Formatter { get; set; } + +- public string MediaType { get; set; } + +- } +- public class ApiResponseFormat { + { +- public ApiResponseFormat(); + +- public IOutputFormatter Formatter { get; set; } + +- public string MediaType { get; set; } + +- } +- public class ApiResponseType { + { +- public ApiResponseType(); + +- public IList ApiResponseFormats { get; set; } + +- public bool IsDefaultResponse { get; set; } + +- public ModelMetadata ModelMetadata { get; set; } + +- public int StatusCode { get; set; } + +- public Type Type { get; set; } + +- } + public class DefaultApiDescriptionProvider : IApiDescriptionProvider { +- public DefaultApiDescriptionProvider(IOptions optionsAccessor, IInlineConstraintResolver constraintResolver, IModelMetadataProvider modelMetadataProvider); + +- public DefaultApiDescriptionProvider(IOptions optionsAccessor, IInlineConstraintResolver constraintResolver, IModelMetadataProvider modelMetadataProvider, IActionResultTypeMapper mapper); + + } +- public interface IApiDescriptionProvider { + { +- int Order { get; } + +- void OnProvidersExecuted(ApiDescriptionProviderContext context); + +- void OnProvidersExecuting(ApiDescriptionProviderContext context); + +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Components.Prerendering.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Components.Prerendering.md new file mode 100644 index 00000000..98f78b62 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Components.Prerendering.md @@ -0,0 +1,13 @@ +# Microsoft.AspNetCore.Mvc.Components.Prerendering + +``` diff + { ++ namespace Microsoft.AspNetCore.Mvc.Rendering { ++ public static class HtmlHelperComponentPrerenderingExtensions { ++ public static Task RenderComponentAsync(this IHtmlHelper htmlHelper) where TComponent : IComponent; ++ public static Task RenderComponentAsync(this IHtmlHelper htmlHelper, object parameters) where TComponent : IComponent; ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Core.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Core.md new file mode 100644 index 00000000..dd8e1816 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Core.md @@ -0,0 +1,1507 @@ +# Microsoft.AspNetCore.Mvc.Core + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public sealed class ControllerActionEndpointConventionBuilder : IEndpointConventionBuilder { ++ public void Add(Action convention); ++ } ++ public static class ControllerEndpointRouteBuilderExtensions { ++ public static ControllerActionEndpointConventionBuilder MapAreaControllerRoute(this IEndpointRouteBuilder endpoints, string name, string areaName, string pattern, object defaults = null, object constraints = null, object dataTokens = null); ++ public static ControllerActionEndpointConventionBuilder MapControllerRoute(this IEndpointRouteBuilder endpoints, string name, string pattern, object defaults = null, object constraints = null, object dataTokens = null); ++ public static ControllerActionEndpointConventionBuilder MapControllers(this IEndpointRouteBuilder endpoints); ++ public static ControllerActionEndpointConventionBuilder MapDefaultControllerRoute(this IEndpointRouteBuilder endpoints); ++ public static void MapDynamicControllerRoute(this IEndpointRouteBuilder endpoints, string pattern) where TTransformer : DynamicRouteValueTransformer; ++ public static IEndpointConventionBuilder MapFallbackToAreaController(this IEndpointRouteBuilder endpoints, string action, string controller, string area); ++ public static IEndpointConventionBuilder MapFallbackToAreaController(this IEndpointRouteBuilder endpoints, string pattern, string action, string controller, string area); ++ public static IEndpointConventionBuilder MapFallbackToController(this IEndpointRouteBuilder endpoints, string action, string controller); ++ public static IEndpointConventionBuilder MapFallbackToController(this IEndpointRouteBuilder endpoints, string pattern, string action, string controller); ++ } + } + namespace Microsoft.AspNetCore.Mvc { + public class ApiBehaviorOptions : IEnumerable, IEnumerable { +- public bool AllowInferringBindingSourceForCollectionTypesAsFromQuery { get; set; } + +- public bool SuppressUseValidationProblemDetailsForInvalidModelStateResponses { get; set; } + + } + public class ApiControllerAttribute : ControllerAttribute, IApiBehaviorMetadata, IFilterMetadata + public enum CompatibilityVersion { ++ Version_3_0 = 3, + } +- public class ConsumesAttribute : Attribute, IActionConstraint, IActionConstraintMetadata, IApiRequestMetadataProvider, IConsumesActionConstraint, IFilterMetadata, IResourceFilter ++ public class ConsumesAttribute : Attribute, IActionConstraint, IActionConstraintMetadata, IApiRequestMetadataProvider, IFilterMetadata, IResourceFilter ++ public class JsonOptions { ++ public JsonOptions(); ++ public JsonSerializerOptions JsonSerializerOptions { get; } ++ } ++ public class JsonResult : ActionResult, IActionResult, IStatusCodeActionResult { ++ public JsonResult(object value); ++ public JsonResult(object value, object serializerSettings); ++ public string ContentType { get; set; } ++ public object SerializerSettings { get; set; } ++ public int? StatusCode { get; set; } ++ public object Value { get; set; } ++ public override Task ExecuteResultAsync(ActionContext context); ++ } + public class LocalRedirectResult : ActionResult { +- public override void ExecuteResult(ActionContext context); + + } + public class MvcOptions : IEnumerable, IEnumerable { +- public bool AllowBindingHeaderValuesToNonStringModelTypes { get; set; } + +- public bool AllowCombiningAuthorizeFilters { get; set; } + +- public bool AllowShortCircuitingValidationWhenNoValidatorsArePresent { get; set; } + +- public bool AllowValidatingTopLevelNodes { get; set; } + +- public InputFormatterExceptionPolicy InputFormatterExceptionPolicy { get; set; } + ++ public int MaxIAsyncEnumerableBufferLimit { get; set; } ++ public int MaxModelBindingCollectionSize { get; set; } ++ public int MaxModelBindingRecursionDepth { get; set; } ++ public bool SuppressAsyncSuffixInActionNames { get; set; } +- public bool SuppressBindingUndefinedValueToEnumType { get; set; } + ++ public bool SuppressImplicitRequiredAttributeForNonNullableReferenceTypes { get; set; } ++ public bool SuppressOutputFormatterBuffering { get; set; } ++ public bool ValidateComplexTypesIfChildValidationFails { get; set; } + } + public class RedirectResult : ActionResult, IActionResult, IKeepTempDataResult { +- public override void ExecuteResult(ActionContext context); + + } + public class RedirectToActionResult : ActionResult, IActionResult, IKeepTempDataResult { +- public override void ExecuteResult(ActionContext context); + + } + public class RedirectToPageResult : ActionResult, IActionResult, IKeepTempDataResult { +- public override void ExecuteResult(ActionContext context); + + } + public class RedirectToRouteResult : ActionResult, IActionResult, IKeepTempDataResult { +- public override void ExecuteResult(ActionContext context); + + } + public static class UrlHelperExtensions { ++ public static string ActionLink(this IUrlHelper helper, string action = null, string controller = null, object values = null, string protocol = null, string host = null, string fragment = null); ++ public static string PageLink(this IUrlHelper urlHelper, string pageName = null, string pageHandler = null, object values = null, string protocol = null, string host = null, string fragment = null); + } + } + namespace Microsoft.AspNetCore.Mvc.ActionConstraints { ++ public class HttpMethodActionConstraint : IActionConstraint, IActionConstraintMetadata { ++ public static readonly int HttpMethodConstraintOrder; ++ public HttpMethodActionConstraint(IEnumerable httpMethods); ++ public IEnumerable HttpMethods { get; } ++ public int Order { get; } ++ public virtual bool Accept(ActionConstraintContext context); ++ } + } + namespace Microsoft.AspNetCore.Mvc.ApplicationModels { + public class ActionModel : IApiExplorerModel, ICommonModel, IFilterModel, IPropertyModel { ++ public IOutboundParameterTransformer RouteParameterTransformer { get; set; } + } + } + namespace Microsoft.AspNetCore.Mvc.ApplicationParts { ++ public sealed class ApplicationPartAttribute : Attribute { ++ public ApplicationPartAttribute(string assemblyName); ++ public string AssemblyName { get; } ++ } +- public class AssemblyPart : ApplicationPart, IApplicationPartTypeProvider, ICompilationReferencesProvider { ++ public class AssemblyPart : ApplicationPart, IApplicationPartTypeProvider { +- public IEnumerable GetReferencePaths(); + + } + } + namespace Microsoft.AspNetCore.Mvc.Controllers { +- public class ControllerFactoryProvider : IControllerFactoryProvider { + { +- public ControllerFactoryProvider(IControllerActivatorProvider activatorProvider, IControllerFactory controllerFactory, IEnumerable propertyActivators); + +- public Func CreateControllerFactory(ControllerActionDescriptor descriptor); + +- public Action CreateControllerReleaser(ControllerActionDescriptor descriptor); + +- } +- public class DefaultControllerActivator : IControllerActivator { + { +- public DefaultControllerActivator(ITypeActivatorCache typeActivatorCache); + +- public virtual object Create(ControllerContext controllerContext); + +- public virtual void Release(ControllerContext context, object controller); + +- } +- public class DefaultControllerFactory : IControllerFactory { + { +- public DefaultControllerFactory(IControllerActivator controllerActivator, IEnumerable propertyActivators); + +- protected IControllerActivator ControllerActivator { get; } + +- public virtual object CreateController(ControllerContext context); + +- public virtual void ReleaseController(ControllerContext context, object controller); + +- } + } ++ namespace Microsoft.AspNetCore.Mvc.Diagnostics { ++ public sealed class AfterActionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterAction"; ++ public AfterActionEventData(ActionDescriptor actionDescriptor, HttpContext httpContext, RouteData routeData); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public HttpContext HttpContext { get; } ++ public RouteData RouteData { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterActionFilterOnActionExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecuted"; ++ public AfterActionFilterOnActionExecutedEventData(ActionDescriptor actionDescriptor, ActionExecutedContext actionExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public ActionExecutedContext ActionExecutedContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterActionFilterOnActionExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting"; ++ public AfterActionFilterOnActionExecutingEventData(ActionDescriptor actionDescriptor, ActionExecutingContext actionExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public ActionExecutingContext ActionExecutingContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterActionFilterOnActionExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnActionExecution"; ++ public AfterActionFilterOnActionExecutionEventData(ActionDescriptor actionDescriptor, ActionExecutedContext actionExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public ActionExecutedContext ActionExecutedContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterActionResultEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterActionResult"; ++ public AfterActionResultEventData(ActionContext actionContext, IActionResult result); ++ public ActionContext ActionContext { get; } ++ protected override int Count { get; } ++ public IActionResult Result { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterAuthorizationFilterOnAuthorizationEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnAuthorization"; ++ public AfterAuthorizationFilterOnAuthorizationEventData(ActionDescriptor actionDescriptor, AuthorizationFilterContext authorizationContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public AuthorizationFilterContext AuthorizationContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterControllerActionMethodEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterControllerActionMethod"; ++ public AfterControllerActionMethodEventData(ActionContext actionContext, IReadOnlyDictionary arguments, object controller, IActionResult result); ++ public ActionContext ActionContext { get; } ++ public IReadOnlyDictionary Arguments { get; } ++ public object Controller { get; } ++ protected override int Count { get; } ++ public IActionResult Result { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterExceptionFilterOnExceptionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnException"; ++ public AfterExceptionFilterOnExceptionEventData(ActionDescriptor actionDescriptor, ExceptionContext exceptionContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public ExceptionContext ExceptionContext { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterResourceFilterOnResourceExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuted"; ++ public AfterResourceFilterOnResourceExecutedEventData(ActionDescriptor actionDescriptor, ResourceExecutedContext resourceExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResourceExecutedContext ResourceExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterResourceFilterOnResourceExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting"; ++ public AfterResourceFilterOnResourceExecutingEventData(ActionDescriptor actionDescriptor, ResourceExecutingContext resourceExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResourceExecutingContext ResourceExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterResourceFilterOnResourceExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnResourceExecution"; ++ public AfterResourceFilterOnResourceExecutionEventData(ActionDescriptor actionDescriptor, ResourceExecutedContext resourceExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResourceExecutedContext ResourceExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterResultFilterOnResultExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecuted"; ++ public AfterResultFilterOnResultExecutedEventData(ActionDescriptor actionDescriptor, ResultExecutedContext resultExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResultExecutedContext ResultExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterResultFilterOnResultExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecuting"; ++ public AfterResultFilterOnResultExecutingEventData(ActionDescriptor actionDescriptor, ResultExecutingContext resultExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResultExecutingContext ResultExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterResultFilterOnResultExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnResultExecution"; ++ public AfterResultFilterOnResultExecutionEventData(ActionDescriptor actionDescriptor, ResultExecutedContext resultExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResultExecutedContext ResultExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeActionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeAction"; ++ public BeforeActionEventData(ActionDescriptor actionDescriptor, HttpContext httpContext, RouteData routeData); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public HttpContext HttpContext { get; } ++ public RouteData RouteData { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeActionFilterOnActionExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuted"; ++ public BeforeActionFilterOnActionExecutedEventData(ActionDescriptor actionDescriptor, ActionExecutedContext actionExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public ActionExecutedContext ActionExecutedContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeActionFilterOnActionExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting"; ++ public BeforeActionFilterOnActionExecutingEventData(ActionDescriptor actionDescriptor, ActionExecutingContext actionExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public ActionExecutingContext ActionExecutingContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeActionFilterOnActionExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution"; ++ public BeforeActionFilterOnActionExecutionEventData(ActionDescriptor actionDescriptor, ActionExecutingContext actionExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public ActionExecutingContext ActionExecutingContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeActionResultEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeActionResult"; ++ public BeforeActionResultEventData(ActionContext actionContext, IActionResult result); ++ public ActionContext ActionContext { get; } ++ protected override int Count { get; } ++ public IActionResult Result { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeAuthorizationFilterOnAuthorizationEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnAuthorization"; ++ public BeforeAuthorizationFilterOnAuthorizationEventData(ActionDescriptor actionDescriptor, AuthorizationFilterContext authorizationContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ public AuthorizationFilterContext AuthorizationContext { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeControllerActionMethodEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeControllerActionMethod"; ++ public BeforeControllerActionMethodEventData(ActionContext actionContext, IReadOnlyDictionary actionArguments, object controller); ++ public IReadOnlyDictionary ActionArguments { get; } ++ public ActionContext ActionContext { get; } ++ public object Controller { get; } ++ protected sealed override int Count { get; } ++ protected sealed override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeExceptionFilterOnException : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnException"; ++ public BeforeExceptionFilterOnException(ActionDescriptor actionDescriptor, ExceptionContext exceptionContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public ExceptionContext ExceptionContext { get; } ++ public IFilterMetadata Filter { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeResourceFilterOnResourceExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuted"; ++ public BeforeResourceFilterOnResourceExecutedEventData(ActionDescriptor actionDescriptor, ResourceExecutedContext resourceExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResourceExecutedContext ResourceExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeResourceFilterOnResourceExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting"; ++ public BeforeResourceFilterOnResourceExecutingEventData(ActionDescriptor actionDescriptor, ResourceExecutingContext resourceExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResourceExecutingContext ResourceExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeResourceFilterOnResourceExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecution"; ++ public BeforeResourceFilterOnResourceExecutionEventData(ActionDescriptor actionDescriptor, ResourceExecutingContext resourceExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResourceExecutingContext ResourceExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeResultFilterOnResultExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuted"; ++ public BeforeResultFilterOnResultExecutedEventData(ActionDescriptor actionDescriptor, ResultExecutedContext resultExecutedContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResultExecutedContext ResultExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeResultFilterOnResultExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuting"; ++ public BeforeResultFilterOnResultExecutingEventData(ActionDescriptor actionDescriptor, ResultExecutingContext resultExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResultExecutingContext ResultExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeResultFilterOnResultExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnResultExecution"; ++ public BeforeResultFilterOnResultExecutionEventData(ActionDescriptor actionDescriptor, ResultExecutingContext resultExecutingContext, IFilterMetadata filter); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IFilterMetadata Filter { get; } ++ public ResultExecutingContext ResultExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public abstract class EventData : IEnumerable, IEnumerable>, IReadOnlyCollection>, IReadOnlyList> { ++ protected const string EventNamespace = "Microsoft.AspNetCore.Mvc."; ++ protected EventData(); ++ protected abstract int Count { get; } ++ int System.Collections.Generic.IReadOnlyCollection>.Count { get; } ++ KeyValuePair System.Collections.Generic.IReadOnlyList>.this[int index] { get; } ++ protected abstract KeyValuePair this[int index] { get; } ++ IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); ++ IEnumerator System.Collections.IEnumerable.GetEnumerator(); ++ public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { ++ public KeyValuePair Current { get; } ++ object System.Collections.IEnumerator.Current { get; } ++ public void Dispose(); ++ public bool MoveNext(); ++ void System.Collections.IEnumerator.Reset(); ++ } ++ } ++ } + namespace Microsoft.AspNetCore.Mvc.Formatters { +- public class FormatFilter : IFilterMetadata, IFormatFilter, IResourceFilter, IResultFilter { ++ public class FormatFilter : IFilterMetadata, IResourceFilter, IResultFilter { +- public FormatFilter(IOptions options); + + } +- public class InputFormatterException : Exception { + { +- public InputFormatterException(); + +- public InputFormatterException(string message); + +- public InputFormatterException(string message, Exception innerException); + +- } + public readonly struct MediaType { +- public static MediaTypeSegmentWithQuality CreateMediaTypeSegmentWithQuality(string mediaType, int start); + ++ public static MediaTypeSegmentWithQuality CreateMediaTypeSegmentWithQuality(string mediaType, int start); + } ++ public readonly struct MediaTypeSegmentWithQuality { ++ public MediaTypeSegmentWithQuality(StringSegment mediaType, double quality); ++ public StringSegment MediaType { get; } ++ public double Quality { get; } ++ public override string ToString(); ++ } ++ public class SystemTextJsonInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy { ++ public SystemTextJsonInputFormatter(JsonOptions options, ILogger logger); ++ InputFormatterExceptionPolicy Microsoft.AspNetCore.Mvc.Formatters.IInputFormatterExceptionPolicy.ExceptionPolicy { get; } ++ public JsonSerializerOptions SerializerOptions { get; } ++ public sealed override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding); ++ } ++ public class SystemTextJsonOutputFormatter : TextOutputFormatter { ++ public SystemTextJsonOutputFormatter(JsonOptions options); ++ public JsonSerializerOptions SerializerOptions { get; } ++ public sealed override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding); ++ } + } +- namespace Microsoft.AspNetCore.Mvc.Formatters.Internal { + { +- public static class AcceptHeaderParser { + { +- public static IList ParseAcceptHeader(IList acceptHeaders); + +- public static void ParseAcceptHeader(IList acceptHeaders, IList parsedValues); + +- } +- public enum HttpParseResult { + { +- InvalidFormat = 2, + +- NotParsed = 1, + +- Parsed = 0, + +- } +- public static class HttpTokenParsingRules + +- public interface IFormatFilter : IFilterMetadata { + { +- string GetFormat(ActionContext context); + +- } +- public readonly struct MediaTypeSegmentWithQuality { + { +- public MediaTypeSegmentWithQuality(StringSegment mediaType, double quality); + +- public StringSegment MediaType { get; } + +- public double Quality { get; } + +- public override string ToString(); + +- } +- } + namespace Microsoft.AspNetCore.Mvc.Infrastructure { ++ public sealed class ActionResultObjectValueAttribute : Attribute { ++ public ActionResultObjectValueAttribute(); ++ } ++ public sealed class ActionResultStatusCodeAttribute : Attribute { ++ public ActionResultStatusCodeAttribute(); ++ } ++ public class AmbiguousActionException : InvalidOperationException { ++ protected AmbiguousActionException(SerializationInfo info, StreamingContext context); ++ public AmbiguousActionException(string message); ++ } ++ public interface IApiBehaviorMetadata : IFilterMetadata + public class ObjectResultExecutor : IActionResultExecutor { ++ public ObjectResultExecutor(OutputFormatterSelector formatterSelector, IHttpResponseStreamWriterFactory writerFactory, ILoggerFactory loggerFactory, IOptions mvcOptions); + } + public class VirtualFileResultExecutor : FileResultExecutorBase, IActionResultExecutor { +- public VirtualFileResultExecutor(ILoggerFactory loggerFactory, IHostingEnvironment hostingEnvironment); + ++ public VirtualFileResultExecutor(ILoggerFactory loggerFactory, IWebHostEnvironment hostingEnvironment); + } + } +- namespace Microsoft.AspNetCore.Mvc.Internal { + { +- public static class ActionAttributeRouteModel { + { +- public static IEnumerable> GetAttributeRoutes(ActionModel actionModel); + +- } +- public class ActionConstraintCache { + { +- public ActionConstraintCache(IActionDescriptorCollectionProvider collectionProvider, IEnumerable actionConstraintProviders); + +- public IReadOnlyList GetActionConstraints(HttpContext httpContext, ActionDescriptor action); + +- } +- public class ActionInvokerFactory : IActionInvokerFactory { + { +- public ActionInvokerFactory(IEnumerable actionInvokerProviders); + +- public IActionInvoker CreateInvoker(ActionContext actionContext); + +- } +- public class ActionResultTypeMapper : IActionResultTypeMapper { + { +- public ActionResultTypeMapper(); + +- public IActionResult Convert(object value, Type returnType); + +- public Type GetResultDataType(Type returnType); + +- } +- public class ActionSelector : IActionSelector { + { +- public ActionSelector(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, ActionConstraintCache actionConstraintCache, ILoggerFactory loggerFactory); + +- protected virtual IReadOnlyList SelectBestActions(IReadOnlyList actions); + +- public ActionDescriptor SelectBestCandidate(RouteContext context, IReadOnlyList candidates); + +- public IReadOnlyList SelectCandidates(RouteContext context); + +- } +- public class AmbiguousActionException : InvalidOperationException { + { +- protected AmbiguousActionException(SerializationInfo info, StreamingContext context); + +- public AmbiguousActionException(string message); + +- } +- public class ApiBehaviorOptionsSetup : ConfigureCompatibilityOptions, IConfigureOptions { + { +- public ApiBehaviorOptionsSetup(ILoggerFactory loggerFactory, IOptions compatibilityOptions); + +- protected override IReadOnlyDictionary DefaultValues { get; } + +- public void Configure(ApiBehaviorOptions options); + +- public override void PostConfigure(string name, ApiBehaviorOptions options); + +- } +- public class ApiDescriptionActionData { + { +- public ApiDescriptionActionData(); + +- public string GroupName { get; set; } + +- } +- public static class ApplicationModelConventions { + { +- public static void ApplyConventions(ApplicationModel applicationModel, IEnumerable conventions); + +- } +- public class AttributeRoute : IRouter { + { +- public AttributeRoute(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, IServiceProvider services, Func handlerFactory); + +- public VirtualPathData GetVirtualPath(VirtualPathContext context); + +- public Task RouteAsync(RouteContext context); + +- } +- public static class AttributeRouting { + { +- public static IRouter CreateAttributeMegaRoute(IServiceProvider services); + +- } +- public class AuthorizationApplicationModelProvider : IApplicationModelProvider { + { +- public AuthorizationApplicationModelProvider(IAuthorizationPolicyProvider policyProvider); + +- public int Order { get; } + +- public static AuthorizeFilter GetFilter(IAuthorizationPolicyProvider policyProvider, IEnumerable authData); + +- public void OnProvidersExecuted(ApplicationModelProviderContext context); + +- public void OnProvidersExecuting(ApplicationModelProviderContext context); + +- } +- public class ClientValidatorCache { + { +- public ClientValidatorCache(); + +- public IReadOnlyList GetValidators(ModelMetadata metadata, IClientModelValidatorProvider validatorProvider); + +- } +- public static class ControllerActionDescriptorBuilder { + { +- public static void AddRouteValues(ControllerActionDescriptor actionDescriptor, ControllerModel controller, ActionModel action); + +- public static IList Build(ApplicationModel application); + +- } +- public class ControllerActionDescriptorProvider : IActionDescriptorProvider { + { +- public ControllerActionDescriptorProvider(ApplicationPartManager partManager, IEnumerable applicationModelProviders, IOptions optionsAccessor); + +- public int Order { get; } + +- protected internal ApplicationModel BuildModel(); + +- protected internal IEnumerable GetDescriptors(); + +- public void OnProvidersExecuted(ActionDescriptorProviderContext context); + +- public void OnProvidersExecuting(ActionDescriptorProviderContext context); + +- } +- public class ControllerActionFilter : IAsyncActionFilter, IFilterMetadata, IOrderedFilter { + { +- public ControllerActionFilter(); + +- public int Order { get; set; } + +- public Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next); + +- } +- public class ControllerActionInvoker : ResourceInvoker, IActionInvoker { + { +- protected override Task InvokeInnerFilterAsync(); + +- protected override void ReleaseResources(); + +- } +- public class ControllerActionInvokerCache { + { +- public ControllerActionInvokerCache(IActionDescriptorCollectionProvider collectionProvider, ParameterBinder parameterBinder, IModelBinderFactory modelBinderFactory, IModelMetadataProvider modelMetadataProvider, IEnumerable filterProviders, IControllerFactoryProvider factoryProvider, IOptions mvcOptions); + +- public (ControllerActionInvokerCacheEntry cacheEntry, IFilterMetadata[] filters) GetCachedResult(ControllerContext controllerContext); + +- } +- public class ControllerActionInvokerCacheEntry { + { +- public FilterItem[] CachedFilters { get; } + +- public ControllerBinderDelegate ControllerBinderDelegate { get; } + +- public Func ControllerFactory { get; } + +- public Action ControllerReleaser { get; } + +- } +- public class ControllerActionInvokerProvider : IActionInvokerProvider { + { +- public ControllerActionInvokerProvider(ControllerActionInvokerCache controllerActionInvokerCache, IOptions optionsAccessor, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, IActionResultTypeMapper mapper); + +- public int Order { get; } + +- public void OnProvidersExecuted(ActionInvokerProviderContext context); + +- public void OnProvidersExecuting(ActionInvokerProviderContext context); + +- } +- public delegate Task ControllerBinderDelegate(ControllerContext controllerContext, object controller, Dictionary arguments); + +- public static class ControllerBinderDelegateProvider { + { +- public static ControllerBinderDelegate CreateBinderDelegate(ParameterBinder parameterBinder, IModelBinderFactory modelBinderFactory, IModelMetadataProvider modelMetadataProvider, ControllerActionDescriptor actionDescriptor, MvcOptions mvcOptions); + +- } +- public class ControllerResultFilter : IAsyncResultFilter, IFilterMetadata, IOrderedFilter { + { +- public ControllerResultFilter(); + +- public int Order { get; set; } + +- public Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next); + +- } +- public class CopyOnWriteList : ICollection, IEnumerable, IEnumerable, IList { + { +- public CopyOnWriteList(IReadOnlyList source); + +- public int Count { get; } + +- public bool IsReadOnly { get; } + +- protected IReadOnlyList Readable { get; } + +- public T this[int index] { get; set; } + +- protected List Writable { get; } + +- public void Add(T item); + +- public void Clear(); + +- public bool Contains(T item); + +- public void CopyTo(T[] array, int arrayIndex); + +- public IEnumerator GetEnumerator(); + +- public int IndexOf(T item); + +- public void Insert(int index, T item); + +- public bool Remove(T item); + +- public void RemoveAt(int index); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- } +- public class DefaultActionConstraintProvider : IActionConstraintProvider { + { +- public DefaultActionConstraintProvider(); + +- public int Order { get; } + +- public void OnProvidersExecuted(ActionConstraintProviderContext context); + +- public void OnProvidersExecuting(ActionConstraintProviderContext context); + +- } +- public class DefaultApplicationModelProvider : IApplicationModelProvider { + { +- public DefaultApplicationModelProvider(IOptions mvcOptionsAccessor, IModelMetadataProvider modelMetadataProvider); + +- public int Order { get; } + +- protected virtual ActionModel CreateActionModel(TypeInfo typeInfo, MethodInfo methodInfo); + +- protected virtual ControllerModel CreateControllerModel(TypeInfo typeInfo); + +- protected virtual ParameterModel CreateParameterModel(ParameterInfo parameterInfo); + +- protected virtual PropertyModel CreatePropertyModel(PropertyInfo propertyInfo); + +- protected virtual bool IsAction(TypeInfo typeInfo, MethodInfo methodInfo); + +- public virtual void OnProvidersExecuted(ApplicationModelProviderContext context); + +- public virtual void OnProvidersExecuting(ApplicationModelProviderContext context); + +- } +- public class DefaultBindingMetadataProvider : IBindingMetadataProvider, IMetadataDetailsProvider { + { +- public DefaultBindingMetadataProvider(); + +- public void CreateBindingMetadata(BindingMetadataProviderContext context); + +- } +- public class DefaultCollectionValidationStrategy : IValidationStrategy { + { +- public static readonly DefaultCollectionValidationStrategy Instance; + +- public IEnumerator GetChildren(ModelMetadata metadata, string key, object model); + +- public IEnumerator GetEnumeratorForElementType(ModelMetadata metadata, object model); + +- } +- public class DefaultComplexObjectValidationStrategy : IValidationStrategy { + { +- public static readonly IValidationStrategy Instance; + +- public IEnumerator GetChildren(ModelMetadata metadata, string key, object model); + +- } +- public class DefaultCompositeMetadataDetailsProvider : IBindingMetadataProvider, ICompositeMetadataDetailsProvider, IDisplayMetadataProvider, IMetadataDetailsProvider, IValidationMetadataProvider { + { +- public DefaultCompositeMetadataDetailsProvider(IEnumerable providers); + +- public virtual void CreateBindingMetadata(BindingMetadataProviderContext context); + +- public virtual void CreateDisplayMetadata(DisplayMetadataProviderContext context); + +- public virtual void CreateValidationMetadata(ValidationMetadataProviderContext context); + +- } +- public class DefaultControllerPropertyActivator : IControllerPropertyActivator { + { +- public DefaultControllerPropertyActivator(); + +- public void Activate(ControllerContext context, object controller); + +- public Action GetActivatorDelegate(ControllerActionDescriptor actionDescriptor); + +- } +- public class DefaultFilterProvider : IFilterProvider { + { +- public DefaultFilterProvider(); + +- public int Order { get; } + +- public void OnProvidersExecuted(FilterProviderContext context); + +- public void OnProvidersExecuting(FilterProviderContext context); + +- public virtual void ProvideFilter(FilterProviderContext context, FilterItem filterItem); + +- } +- public class DefaultValidationMetadataProvider : IMetadataDetailsProvider, IValidationMetadataProvider { + { +- public DefaultValidationMetadataProvider(); + +- public void CreateValidationMetadata(ValidationMetadataProviderContext context); + +- } +- public class DisableRequestSizeLimitFilter : IAuthorizationFilter, IFilterMetadata, IRequestSizePolicy { + { +- public DisableRequestSizeLimitFilter(ILoggerFactory loggerFactory); + +- public void OnAuthorization(AuthorizationFilterContext context); + +- } +- public class ElementalValueProvider : IValueProvider { + { +- public ElementalValueProvider(string key, string value, CultureInfo culture); + +- public CultureInfo Culture { get; } + +- public string Key { get; } + +- public string Value { get; } + +- public bool ContainsPrefix(string prefix); + +- public ValueProviderResult GetValue(string key); + +- } +- public class ExplicitIndexCollectionValidationStrategy : IValidationStrategy { + { +- public ExplicitIndexCollectionValidationStrategy(IEnumerable elementKeys); + +- public IEnumerable ElementKeys { get; } + +- public IEnumerator GetChildren(ModelMetadata metadata, string key, object model); + +- } +- public struct FilterCursor { + { +- public FilterCursor(IFilterMetadata[] filters); + +- public FilterCursorItem GetNextFilter() where TFilter : class where TFilterAsync : class; + +- public void Reset(); + +- } +- public readonly struct FilterCursorItem { + { +- public FilterCursorItem(TFilter filter, TFilterAsync filterAsync); + +- public TFilter Filter { get; } + +- public TFilterAsync FilterAsync { get; } + +- } +- public class FilterDescriptorOrderComparer : IComparer { + { +- public FilterDescriptorOrderComparer(); + +- public static FilterDescriptorOrderComparer Comparer { get; } + +- public int Compare(FilterDescriptor x, FilterDescriptor y); + +- } +- public static class FilterFactory { + { +- public static IFilterMetadata[] CreateUncachedFilters(IFilterProvider[] filterProviders, ActionContext actionContext, FilterItem[] cachedFilterItems); + +- public static FilterFactoryResult GetAllFilters(IFilterProvider[] filterProviders, ActionContext actionContext); + +- } +- public readonly struct FilterFactoryResult { + { +- public FilterFactoryResult(FilterItem[] cacheableFilters, IFilterMetadata[] filters); + +- public FilterItem[] CacheableFilters { get; } + +- public IFilterMetadata[] Filters { get; } + +- } +- public class HttpMethodActionConstraint : IActionConstraint, IActionConstraintMetadata { + { +- public static readonly int HttpMethodConstraintOrder; + +- public HttpMethodActionConstraint(IEnumerable httpMethods); + +- public IEnumerable HttpMethods { get; } + +- public int Order { get; } + +- public virtual bool Accept(ActionConstraintContext context); + +- } +- public interface IConsumesActionConstraint : IActionConstraint, IActionConstraintMetadata + +- public interface IControllerPropertyActivator { + { +- void Activate(ControllerContext context, object controller); + +- Action GetActivatorDelegate(ControllerActionDescriptor actionDescriptor); + +- } +- public interface IMiddlewareFilterFeature { + { +- ResourceExecutingContext ResourceExecutingContext { get; } + +- ResourceExecutionDelegate ResourceExecutionDelegate { get; } + +- } +- public interface IResponseCacheFilter : IFilterMetadata + +- public interface ITypeActivatorCache { + { +- TInstance CreateInstance(IServiceProvider serviceProvider, Type optionType); + +- } +- public class MemoryPoolHttpRequestStreamReaderFactory : IHttpRequestStreamReaderFactory { + { +- public static readonly int DefaultBufferSize; + +- public MemoryPoolHttpRequestStreamReaderFactory(ArrayPool bytePool, ArrayPool charPool); + +- public TextReader CreateReader(Stream stream, Encoding encoding); + +- } +- public class MemoryPoolHttpResponseStreamWriterFactory : IHttpResponseStreamWriterFactory { + { +- public static readonly int DefaultBufferSize; + +- public MemoryPoolHttpResponseStreamWriterFactory(ArrayPool bytePool, ArrayPool charPool); + +- public TextWriter CreateWriter(Stream stream, Encoding encoding); + +- } +- public class MiddlewareFilterBuilder { + { +- public MiddlewareFilterBuilder(MiddlewareFilterConfigurationProvider configurationProvider); + +- public IApplicationBuilder ApplicationBuilder { get; set; } + +- public RequestDelegate GetPipeline(Type configurationType); + +- } +- public class MiddlewareFilterConfigurationProvider { + { +- public MiddlewareFilterConfigurationProvider(); + +- public Action CreateConfigureDelegate(Type configurationType); + +- } +- public class MiddlewareFilterFeature : IMiddlewareFilterFeature { + { +- public MiddlewareFilterFeature(); + +- public ResourceExecutingContext ResourceExecutingContext { get; set; } + +- public ResourceExecutionDelegate ResourceExecutionDelegate { get; set; } + +- } +- public class MvcAttributeRouteHandler : IRouter { + { +- public MvcAttributeRouteHandler(IActionInvokerFactory actionInvokerFactory, IActionSelector actionSelector, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory); + +- public MvcAttributeRouteHandler(IActionInvokerFactory actionInvokerFactory, IActionSelector actionSelector, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory, IActionContextAccessor actionContextAccessor); + +- public ActionDescriptor[] Actions { get; set; } + +- public VirtualPathData GetVirtualPath(VirtualPathContext context); + +- public Task RouteAsync(RouteContext context); + +- } +- public class MvcBuilder : IMvcBuilder { + { +- public MvcBuilder(IServiceCollection services, ApplicationPartManager manager); + +- public ApplicationPartManager PartManager { get; } + +- public IServiceCollection Services { get; } + +- } +- public class MvcCoreBuilder : IMvcCoreBuilder { + { +- public MvcCoreBuilder(IServiceCollection services, ApplicationPartManager manager); + +- public ApplicationPartManager PartManager { get; } + +- public IServiceCollection Services { get; } + +- } +- public static class MvcCoreDiagnosticSourceExtensions { + { +- public static void AfterAction(this DiagnosticSource diagnosticSource, ActionDescriptor actionDescriptor, HttpContext httpContext, RouteData routeData); + +- public static void AfterActionMethod(this DiagnosticSource diagnosticSource, ActionContext actionContext, IDictionary actionArguments, object controller, IActionResult result); + +- public static void AfterActionResult(this DiagnosticSource diagnosticSource, ActionContext actionContext, IActionResult result); + +- public static void AfterOnActionExecuted(this DiagnosticSource diagnosticSource, ActionExecutedContext actionExecutedContext, IActionFilter filter); + +- public static void AfterOnActionExecuting(this DiagnosticSource diagnosticSource, ActionExecutingContext actionExecutingContext, IActionFilter filter); + +- public static void AfterOnActionExecution(this DiagnosticSource diagnosticSource, ActionExecutedContext actionExecutedContext, IAsyncActionFilter filter); + +- public static void AfterOnAuthorization(this DiagnosticSource diagnosticSource, AuthorizationFilterContext authorizationContext, IAuthorizationFilter filter); + +- public static void AfterOnAuthorizationAsync(this DiagnosticSource diagnosticSource, AuthorizationFilterContext authorizationContext, IAsyncAuthorizationFilter filter); + +- public static void AfterOnException(this DiagnosticSource diagnosticSource, ExceptionContext exceptionContext, IExceptionFilter filter); + +- public static void AfterOnExceptionAsync(this DiagnosticSource diagnosticSource, ExceptionContext exceptionContext, IAsyncExceptionFilter filter); + +- public static void AfterOnResourceExecuted(this DiagnosticSource diagnosticSource, ResourceExecutedContext resourceExecutedContext, IResourceFilter filter); + +- public static void AfterOnResourceExecuting(this DiagnosticSource diagnosticSource, ResourceExecutingContext resourceExecutingContext, IResourceFilter filter); + +- public static void AfterOnResourceExecution(this DiagnosticSource diagnosticSource, ResourceExecutedContext resourceExecutedContext, IAsyncResourceFilter filter); + +- public static void AfterOnResultExecuted(this DiagnosticSource diagnosticSource, ResultExecutedContext resultExecutedContext, IResultFilter filter); + +- public static void AfterOnResultExecuting(this DiagnosticSource diagnosticSource, ResultExecutingContext resultExecutingContext, IResultFilter filter); + +- public static void AfterOnResultExecution(this DiagnosticSource diagnosticSource, ResultExecutedContext resultExecutedContext, IAsyncResultFilter filter); + +- public static void BeforeAction(this DiagnosticSource diagnosticSource, ActionDescriptor actionDescriptor, HttpContext httpContext, RouteData routeData); + +- public static void BeforeActionMethod(this DiagnosticSource diagnosticSource, ActionContext actionContext, IDictionary actionArguments, object controller); + +- public static void BeforeActionResult(this DiagnosticSource diagnosticSource, ActionContext actionContext, IActionResult result); + +- public static void BeforeOnActionExecuted(this DiagnosticSource diagnosticSource, ActionExecutedContext actionExecutedContext, IActionFilter filter); + +- public static void BeforeOnActionExecuting(this DiagnosticSource diagnosticSource, ActionExecutingContext actionExecutingContext, IActionFilter filter); + +- public static void BeforeOnActionExecution(this DiagnosticSource diagnosticSource, ActionExecutingContext actionExecutingContext, IAsyncActionFilter filter); + +- public static void BeforeOnAuthorization(this DiagnosticSource diagnosticSource, AuthorizationFilterContext authorizationContext, IAuthorizationFilter filter); + +- public static void BeforeOnAuthorizationAsync(this DiagnosticSource diagnosticSource, AuthorizationFilterContext authorizationContext, IAsyncAuthorizationFilter filter); + +- public static void BeforeOnException(this DiagnosticSource diagnosticSource, ExceptionContext exceptionContext, IExceptionFilter filter); + +- public static void BeforeOnExceptionAsync(this DiagnosticSource diagnosticSource, ExceptionContext exceptionContext, IAsyncExceptionFilter filter); + +- public static void BeforeOnResourceExecuted(this DiagnosticSource diagnosticSource, ResourceExecutedContext resourceExecutedContext, IResourceFilter filter); + +- public static void BeforeOnResourceExecuting(this DiagnosticSource diagnosticSource, ResourceExecutingContext resourceExecutingContext, IResourceFilter filter); + +- public static void BeforeOnResourceExecution(this DiagnosticSource diagnosticSource, ResourceExecutingContext resourceExecutingContext, IAsyncResourceFilter filter); + +- public static void BeforeOnResultExecuted(this DiagnosticSource diagnosticSource, ResultExecutedContext resultExecutedContext, IResultFilter filter); + +- public static void BeforeOnResultExecuting(this DiagnosticSource diagnosticSource, ResultExecutingContext resultExecutingContext, IResultFilter filter); + +- public static void BeforeOnResultExecution(this DiagnosticSource diagnosticSource, ResultExecutingContext resultExecutingContext, IAsyncResultFilter filter); + +- } +- public class MvcCoreRouteOptionsSetup : IConfigureOptions { + { +- public MvcCoreRouteOptionsSetup(); + +- public void Configure(RouteOptions options); + +- } +- public class MvcMarkerService { + { +- public MvcMarkerService(); + +- } +- public class MvcRouteHandler : IRouter { + { +- public MvcRouteHandler(IActionInvokerFactory actionInvokerFactory, IActionSelector actionSelector, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory); + +- public MvcRouteHandler(IActionInvokerFactory actionInvokerFactory, IActionSelector actionSelector, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory, IActionContextAccessor actionContextAccessor); + +- public VirtualPathData GetVirtualPath(VirtualPathContext context); + +- public Task RouteAsync(RouteContext context); + +- } +- public class NonDisposableStream : Stream { + { +- public NonDisposableStream(Stream innerStream); + +- public override bool CanRead { get; } + +- public override bool CanSeek { get; } + +- public override bool CanTimeout { get; } + +- public override bool CanWrite { get; } + +- protected Stream InnerStream { get; } + +- public override long Length { get; } + +- public override long Position { get; set; } + +- public override int ReadTimeout { get; set; } + +- public override int WriteTimeout { get; set; } + +- public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state); + +- public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state); + +- public override void Close(); + +- public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken); + +- protected override void Dispose(bool disposing); + +- public override int EndRead(IAsyncResult asyncResult); + +- public override void EndWrite(IAsyncResult asyncResult); + +- public override void Flush(); + +- public override Task FlushAsync(CancellationToken cancellationToken); + +- public override int Read(byte[] buffer, int offset, int count); + +- public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- public override int ReadByte(); + +- public override long Seek(long offset, SeekOrigin origin); + +- public override void SetLength(long value); + +- public override void Write(byte[] buffer, int offset, int count); + +- public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- public override void WriteByte(byte value); + +- } +- public class NoOpBinder : IModelBinder { + { +- public static readonly IModelBinder Instance; + +- public NoOpBinder(); + +- public Task BindModelAsync(ModelBindingContext bindingContext); + +- } +- public static class NormalizedRouteValue { + { +- public static string GetNormalizedRouteValue(ActionContext context, string key); + +- } +- public static class ParameterDefaultValues { + { +- public static object[] GetParameterDefaultValues(MethodInfo methodInfo); + +- public static bool TryGetDeclaredParameterDefaultValue(ParameterInfo parameterInfo, out object defaultValue); + +- } +- public class PlaceholderBinder : IModelBinder { + { +- public PlaceholderBinder(); + +- public IModelBinder Inner { get; set; } + +- public Task BindModelAsync(ModelBindingContext bindingContext); + +- } +- public class PrefixContainer { + { +- public PrefixContainer(ICollection values); + +- public bool ContainsPrefix(string prefix); + +- public IDictionary GetKeysFromPrefix(string prefix); + +- } +- public static class PropertyValueSetter { + { +- public static void SetValue(ModelMetadata metadata, object instance, object value); + +- } +- public class RequestFormLimitsFilter : IAuthorizationFilter, IFilterMetadata, IRequestFormLimitsPolicy { + { +- public RequestFormLimitsFilter(ILoggerFactory loggerFactory); + +- public FormOptions FormOptions { get; set; } + +- public void OnAuthorization(AuthorizationFilterContext context); + +- } +- public class RequestSizeLimitFilter : IAuthorizationFilter, IFilterMetadata, IRequestSizePolicy { + { +- public RequestSizeLimitFilter(ILoggerFactory loggerFactory); + +- public long Bytes { get; set; } + +- public void OnAuthorization(AuthorizationFilterContext context); + +- } +- public abstract class ResourceInvoker { + { +- protected readonly ActionContext _actionContext; + +- protected readonly IFilterMetadata[] _filters; + +- protected IActionResult _result; + +- protected readonly IActionResultTypeMapper _mapper; + +- protected FilterCursor _cursor; + +- protected readonly ILogger _logger; + +- protected readonly IList _valueProviderFactories; + +- protected readonly DiagnosticSource _diagnosticSource; + +- protected object _instance; + +- public ResourceInvoker(DiagnosticSource diagnosticSource, ILogger logger, IActionResultTypeMapper mapper, ActionContext actionContext, IFilterMetadata[] filters, IList valueProviderFactories); + +- public virtual Task InvokeAsync(); + +- protected abstract Task InvokeInnerFilterAsync(); + +- protected virtual Task InvokeResultAsync(IActionResult result); + +- protected abstract void ReleaseResources(); + +- } +- public class ResponseCacheFilter : IActionFilter, IFilterMetadata, IResponseCacheFilter { + { +- public ResponseCacheFilter(CacheProfile cacheProfile, ILoggerFactory loggerFactory); + +- public int Duration { get; set; } + +- public ResponseCacheLocation Location { get; set; } + +- public bool NoStore { get; set; } + +- public string VaryByHeader { get; set; } + +- public string[] VaryByQueryKeys { get; set; } + +- public void OnActionExecuted(ActionExecutedContext context); + +- public void OnActionExecuting(ActionExecutingContext context); + +- } +- public class ResponseCacheFilterExecutor { + { +- public ResponseCacheFilterExecutor(CacheProfile cacheProfile); + +- public int Duration { get; set; } + +- public ResponseCacheLocation Location { get; set; } + +- public bool NoStore { get; set; } + +- public string VaryByHeader { get; set; } + +- public string[] VaryByQueryKeys { get; set; } + +- public void Execute(FilterContext context); + +- } +- public static class ResponseContentTypeHelper { + { +- public static void ResolveContentTypeAndEncoding(string actionResultContentType, string httpResponseContentType, string defaultContentType, out string resolvedContentType, out Encoding resolvedContentTypeEncoding); + +- } +- public class ShortFormDictionaryValidationStrategy : IValidationStrategy { + { +- public ShortFormDictionaryValidationStrategy(IEnumerable> keyMappings, ModelMetadata valueMetadata); + +- public IEnumerable> KeyMappings { get; } + +- public IEnumerator GetChildren(ModelMetadata metadata, string key, object model); + +- } +- public class TypeActivatorCache : ITypeActivatorCache { + { +- public TypeActivatorCache(); + +- public TInstance CreateInstance(IServiceProvider serviceProvider, Type implementationType); + +- } +- public class ValidatorCache { + { +- public ValidatorCache(); + +- public IReadOnlyList GetValidators(ModelMetadata metadata, IModelValidatorProvider validatorProvider); + +- } +- public static class ViewEnginePath { + { +- public static readonly char[] PathSeparators; + +- public static string CombinePath(string first, string second); + +- public static string ResolvePath(string path); + +- } +- } + namespace Microsoft.AspNetCore.Mvc.ModelBinding { + public class FormValueProvider : BindingSourceValueProvider, IEnumerableValueProvider, IValueProvider + public abstract class JQueryValueProvider : BindingSourceValueProvider, IEnumerableValueProvider, IKeyRewriterValueProvider, IValueProvider + public class ModelAttributes { +- public ModelAttributes(IEnumerable typeAttributes); + +- public ModelAttributes(IEnumerable propertyAttributes, IEnumerable typeAttributes); + + } + public class ModelBinderFactory : IModelBinderFactory { +- public ModelBinderFactory(IModelMetadataProvider metadataProvider, IOptions options); + + } + public abstract class ObjectModelValidator : IObjectModelValidator { +- public abstract ValidationVisitor GetValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState); + ++ public abstract ValidationVisitor GetValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState); + } + public class ParameterBinder { +- public ParameterBinder(IModelMetadataProvider modelMetadataProvider, IModelBinderFactory modelBinderFactory, IObjectModelValidator validator); + +- public Task BindModelAsync(ActionContext actionContext, IValueProvider valueProvider, ParameterDescriptor parameter); + +- public virtual Task BindModelAsync(ActionContext actionContext, IValueProvider valueProvider, ParameterDescriptor parameter, object value); + + } ++ public class PrefixContainer { ++ public PrefixContainer(ICollection values); ++ public bool ContainsPrefix(string prefix); ++ public IDictionary GetKeysFromPrefix(string prefix); ++ } + public class QueryStringValueProvider : BindingSourceValueProvider, IEnumerableValueProvider, IValueProvider + public class RouteValueProvider : BindingSourceValueProvider + } + namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { + public class ArrayModelBinder : CollectionModelBinder { +- public ArrayModelBinder(IModelBinder elementBinder); + ++ public ArrayModelBinder(IModelBinder elementBinder, ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, MvcOptions mvcOptions); + } + public class ByteArrayModelBinder : IModelBinder { +- public ByteArrayModelBinder(); + + } + public class CollectionModelBinder : ICollectionModelBinder, IModelBinder { +- public CollectionModelBinder(IModelBinder elementBinder); + ++ public CollectionModelBinder(IModelBinder elementBinder, ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, MvcOptions mvcOptions); + } + public class ComplexTypeModelBinder : IModelBinder { +- public ComplexTypeModelBinder(IDictionary propertyBinders); + + } + public class DecimalModelBinder : IModelBinder { +- public DecimalModelBinder(NumberStyles supportedStyles); + + } + public class DictionaryModelBinder : CollectionModelBinder> { +- public DictionaryModelBinder(IModelBinder keyBinder, IModelBinder valueBinder); + ++ public DictionaryModelBinder(IModelBinder keyBinder, IModelBinder valueBinder, ILoggerFactory loggerFactory, bool allowValidatingTopLevelNodes, MvcOptions mvcOptions); + } + public class DoubleModelBinder : IModelBinder { +- public DoubleModelBinder(NumberStyles supportedStyles); + + } + public class FloatModelBinder : IModelBinder { +- public FloatModelBinder(NumberStyles supportedStyles); + + } + public class FormCollectionModelBinder : IModelBinder { +- public FormCollectionModelBinder(); + + } + public class FormFileModelBinder : IModelBinder { +- public FormFileModelBinder(); + + } + public class HeaderModelBinder : IModelBinder { +- public HeaderModelBinder(); + + } + public class KeyValuePairModelBinder : IModelBinder { +- public KeyValuePairModelBinder(IModelBinder keyBinder, IModelBinder valueBinder); + + } + public class SimpleTypeModelBinder : IModelBinder { +- public SimpleTypeModelBinder(Type type); + + } + } +- namespace Microsoft.AspNetCore.Mvc.ModelBinding.Internal { + { +- public static class ModelBindingHelper { + { +- public static bool CanGetCompatibleCollection(ModelBindingContext bindingContext); + +- public static void ClearValidationStateForModel(ModelMetadata modelMetadata, ModelStateDictionary modelState, string modelKey); + +- public static void ClearValidationStateForModel(Type modelType, ModelStateDictionary modelState, IModelMetadataProvider metadataProvider, string modelKey); + +- public static object ConvertTo(object value, Type type, CultureInfo culture); + +- public static T ConvertTo(object value, CultureInfo culture); + +- public static ICollection GetCompatibleCollection(ModelBindingContext bindingContext); + +- public static ICollection GetCompatibleCollection(ModelBindingContext bindingContext, int capacity); + +- public static Expression> GetPropertyFilterExpression(Expression>[] expressions); + +- public static Task TryUpdateModelAsync(object model, Type modelType, string prefix, ActionContext actionContext, IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, IObjectModelValidator objectModelValidator); + +- public static Task TryUpdateModelAsync(object model, Type modelType, string prefix, ActionContext actionContext, IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, IObjectModelValidator objectModelValidator, Func propertyFilter); + +- public static Task TryUpdateModelAsync(TModel model, string prefix, ActionContext actionContext, IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, IObjectModelValidator objectModelValidator) where TModel : class; + +- public static Task TryUpdateModelAsync(TModel model, string prefix, ActionContext actionContext, IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, IObjectModelValidator objectModelValidator, Func propertyFilter) where TModel : class; + +- public static Task TryUpdateModelAsync(TModel model, string prefix, ActionContext actionContext, IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, IObjectModelValidator objectModelValidator, params Expression>[] includeExpressions) where TModel : class; + +- } +- public class ValidationStack { + { +- public ValidationStack(); + +- public int Count { get; } + +- public void Pop(object model); + +- public bool Push(object model); + +- } +- } + namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata { + public class ValidationMetadataProviderContext { ++ public IReadOnlyList ParameterAttributes { get; } + } + } + namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation { ++ public class ClientValidatorCache { ++ public ClientValidatorCache(); ++ public IReadOnlyList GetValidators(ModelMetadata metadata, IClientModelValidatorProvider validatorProvider); ++ } + public class ValidationVisitor { +- public ValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState); + ++ public ValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider, ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState); +- protected ValidationStack CurrentPath { get; } + + } ++ public class ValidatorCache { ++ public ValidatorCache(); ++ public IReadOnlyList GetValidators(ModelMetadata metadata, IModelValidatorProvider validatorProvider); ++ } + } + namespace Microsoft.AspNetCore.Mvc.Routing { ++ public abstract class DynamicRouteValueTransformer { ++ protected DynamicRouteValueTransformer(); ++ public abstract ValueTask TransformAsync(HttpContext httpContext, RouteValueDictionary values); ++ } + public class KnownRouteValueConstraint : IParameterPolicy, IRouteConstraint { +- public KnownRouteValueConstraint(); + + } + } + namespace Microsoft.Extensions.DependencyInjection { + public static class MvcCoreMvcBuilderExtensions { ++ public static IMvcBuilder AddJsonOptions(this IMvcBuilder builder, Action configure); + } + public static class MvcCoreMvcCoreBuilderExtensions { ++ public static IMvcCoreBuilder AddJsonOptions(this IMvcCoreBuilder builder, Action configure); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Cors.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Cors.md new file mode 100644 index 00000000..5b19158d --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Cors.md @@ -0,0 +1,59 @@ +# Microsoft.AspNetCore.Mvc.Cors + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.Cors { +- public class CorsAuthorizationFilter : IAsyncAuthorizationFilter, ICorsAuthorizationFilter, IFilterMetadata, IOrderedFilter ++ public class CorsAuthorizationFilter : IAsyncAuthorizationFilter, IFilterMetadata, IOrderedFilter + } +- namespace Microsoft.AspNetCore.Mvc.Cors.Internal { + { +- public class CorsApplicationModelProvider : IApplicationModelProvider { + { +- public CorsApplicationModelProvider(); + +- public int Order { get; } + +- public void OnProvidersExecuted(ApplicationModelProviderContext context); + +- public void OnProvidersExecuting(ApplicationModelProviderContext context); + +- } +- public class CorsAuthorizationFilterFactory : IFilterFactory, IFilterMetadata, IOrderedFilter { + { +- public CorsAuthorizationFilterFactory(string policyName); + +- public bool IsReusable { get; } + +- public int Order { get; } + +- public IFilterMetadata CreateInstance(IServiceProvider serviceProvider); + +- } +- public class CorsHttpMethodActionConstraint : HttpMethodActionConstraint { + { +- public CorsHttpMethodActionConstraint(HttpMethodActionConstraint constraint); + +- public override bool Accept(ActionConstraintContext context); + +- } +- public static class CorsLoggerExtensions { + { +- public static void NotMostEffectiveFilter(this ILogger logger, Type policyType); + +- } +- public class DisableCorsAuthorizationFilter : IAsyncAuthorizationFilter, ICorsAuthorizationFilter, IFilterMetadata, IOrderedFilter { + { +- public DisableCorsAuthorizationFilter(); + +- public int Order { get; } + +- public Task OnAuthorizationAsync(AuthorizationFilterContext context); + +- } +- public interface ICorsAuthorizationFilter : IAsyncAuthorizationFilter, IFilterMetadata, IOrderedFilter + +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.DataAnnotations.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.DataAnnotations.md new file mode 100644 index 00000000..b686e5fc --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.DataAnnotations.md @@ -0,0 +1,183 @@ +# Microsoft.AspNetCore.Mvc.DataAnnotations + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.DataAnnotations { + public class MvcDataAnnotationsLocalizationOptions : IEnumerable, IEnumerable { +- public bool AllowDataAnnotationsLocalizationForEnumDisplayAttributes { get; set; } + +- public IEnumerator GetEnumerator(); + ++ IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + } ++ public sealed class RequiredAttributeAdapter : AttributeAdapterBase { ++ public RequiredAttributeAdapter(RequiredAttribute attribute, IStringLocalizer stringLocalizer); ++ public override void AddValidation(ClientModelValidationContext context); ++ public override string GetErrorMessage(ModelValidationContextBase validationContext); ++ } + } +- namespace Microsoft.AspNetCore.Mvc.DataAnnotations.Internal { + { +- public class CompareAttributeAdapter : AttributeAdapterBase { + { +- public CompareAttributeAdapter(CompareAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class DataAnnotationsClientModelValidatorProvider : IClientModelValidatorProvider { + { +- public DataAnnotationsClientModelValidatorProvider(IValidationAttributeAdapterProvider validationAttributeAdapterProvider, IOptions options, IStringLocalizerFactory stringLocalizerFactory); + +- public void CreateValidators(ClientValidatorProviderContext context); + +- } +- public static class DataAnnotationsLocalizationServices { + { +- public static void AddDataAnnotationsLocalizationServices(IServiceCollection services, Action setupAction); + +- } +- public class DataAnnotationsMetadataProvider : IBindingMetadataProvider, IDisplayMetadataProvider, IMetadataDetailsProvider, IValidationMetadataProvider { + { +- public DataAnnotationsMetadataProvider(IOptions options, IStringLocalizerFactory stringLocalizerFactory); + +- public void CreateBindingMetadata(BindingMetadataProviderContext context); + +- public void CreateDisplayMetadata(DisplayMetadataProviderContext context); + +- public void CreateValidationMetadata(ValidationMetadataProviderContext context); + +- } +- public class DataAnnotationsModelValidator : IModelValidator { + { +- public DataAnnotationsModelValidator(IValidationAttributeAdapterProvider validationAttributeAdapterProvider, ValidationAttribute attribute, IStringLocalizer stringLocalizer); + +- public ValidationAttribute Attribute { get; } + +- public IEnumerable Validate(ModelValidationContext validationContext); + +- } +- public class DataTypeAttributeAdapter : AttributeAdapterBase { + { +- public DataTypeAttributeAdapter(DataTypeAttribute attribute, string ruleName, IStringLocalizer stringLocalizer); + +- public string RuleName { get; } + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class DefaultClientModelValidatorProvider : IClientModelValidatorProvider { + { +- public DefaultClientModelValidatorProvider(); + +- public void CreateValidators(ClientValidatorProviderContext context); + +- } +- public class FileExtensionsAttributeAdapter : AttributeAdapterBase { + { +- public FileExtensionsAttributeAdapter(FileExtensionsAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class MaxLengthAttributeAdapter : AttributeAdapterBase { + { +- public MaxLengthAttributeAdapter(MaxLengthAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class MinLengthAttributeAdapter : AttributeAdapterBase { + { +- public MinLengthAttributeAdapter(MinLengthAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class MvcDataAnnotationsLocalizationOptionsSetup : IConfigureOptions { + { +- public MvcDataAnnotationsLocalizationOptionsSetup(); + +- public void Configure(MvcDataAnnotationsLocalizationOptions options); + +- } +- public class MvcDataAnnotationsMvcOptionsSetup : IConfigureOptions { + { +- public MvcDataAnnotationsMvcOptionsSetup(IValidationAttributeAdapterProvider validationAttributeAdapterProvider, IOptions dataAnnotationLocalizationOptions); + +- public MvcDataAnnotationsMvcOptionsSetup(IValidationAttributeAdapterProvider validationAttributeAdapterProvider, IOptions dataAnnotationLocalizationOptions, IStringLocalizerFactory stringLocalizerFactory); + +- public void Configure(MvcOptions options); + +- } +- public class NumericClientModelValidator : IClientModelValidator { + { +- public NumericClientModelValidator(); + +- public void AddValidation(ClientModelValidationContext context); + +- } +- public class NumericClientModelValidatorProvider : IClientModelValidatorProvider { + { +- public NumericClientModelValidatorProvider(); + +- public void CreateValidators(ClientValidatorProviderContext context); + +- } +- public class RangeAttributeAdapter : AttributeAdapterBase { + { +- public RangeAttributeAdapter(RangeAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class RegularExpressionAttributeAdapter : AttributeAdapterBase { + { +- public RegularExpressionAttributeAdapter(RegularExpressionAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class RequiredAttributeAdapter : AttributeAdapterBase { + { +- public RequiredAttributeAdapter(RequiredAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class StringLengthAttributeAdapter : AttributeAdapterBase { + { +- public StringLengthAttributeAdapter(StringLengthAttribute attribute, IStringLocalizer stringLocalizer); + +- public override void AddValidation(ClientModelValidationContext context); + +- public override string GetErrorMessage(ModelValidationContextBase validationContext); + +- } +- public class ValidatableObjectAdapter : IModelValidator { + { +- public ValidatableObjectAdapter(); + +- public IEnumerable Validate(ModelValidationContext context); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Json.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Json.md new file mode 100644 index 00000000..9a0bde5e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Json.md @@ -0,0 +1,189 @@ +# Microsoft.AspNetCore.Mvc.Formatters.Json + +``` diff + { +- namespace Microsoft.AspNetCore.Mvc { + { +- public static class JsonPatchExtensions { + { +- public static void ApplyTo(this JsonPatchDocument patchDoc, T objectToApplyTo, ModelStateDictionary modelState) where T : class; + +- public static void ApplyTo(this JsonPatchDocument patchDoc, T objectToApplyTo, ModelStateDictionary modelState, string prefix) where T : class; + +- } +- public class JsonResult : ActionResult, IActionResult, IStatusCodeActionResult { + { +- public JsonResult(object value); + +- public JsonResult(object value, JsonSerializerSettings serializerSettings); + +- public string ContentType { get; set; } + +- public JsonSerializerSettings SerializerSettings { get; set; } + +- public int? StatusCode { get; set; } + +- public object Value { get; set; } + +- public override Task ExecuteResultAsync(ActionContext context); + +- } +- public class MvcJsonOptions : IEnumerable, IEnumerable { + { +- public MvcJsonOptions(); + +- public bool AllowInputFormatterExceptionMessages { get; set; } + +- public JsonSerializerSettings SerializerSettings { get; } + +- IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- } +- } +- namespace Microsoft.AspNetCore.Mvc.Formatters { + { +- public class JsonInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy { + { +- public JsonInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider); + +- public JsonInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, MvcOptions options, MvcJsonOptions jsonOptions); + +- public JsonInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, bool suppressInputFormatterBuffering); + +- public JsonInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, bool suppressInputFormatterBuffering, bool allowInputFormatterExceptionMessages); + +- public virtual InputFormatterExceptionPolicy ExceptionPolicy { get; } + +- protected JsonSerializerSettings SerializerSettings { get; } + +- protected virtual JsonSerializer CreateJsonSerializer(); + +- public override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding); + +- protected virtual void ReleaseJsonSerializer(JsonSerializer serializer); + +- } +- public class JsonOutputFormatter : TextOutputFormatter { + { +- public JsonOutputFormatter(JsonSerializerSettings serializerSettings, ArrayPool charPool); + +- public JsonSerializerSettings PublicSerializerSettings { get; } + +- protected JsonSerializerSettings SerializerSettings { get; } + +- protected virtual JsonSerializer CreateJsonSerializer(); + +- protected virtual JsonWriter CreateJsonWriter(TextWriter writer); + +- public void WriteObject(TextWriter writer, object value); + +- public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding); + +- } +- public class JsonPatchInputFormatter : JsonInputFormatter { + { +- public JsonPatchInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider); + +- public JsonPatchInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, MvcOptions options, MvcJsonOptions jsonOptions); + +- public JsonPatchInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, bool suppressInputFormatterBuffering); + +- public JsonPatchInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, bool suppressInputFormatterBuffering, bool allowInputFormatterExceptionMessages); + +- public override InputFormatterExceptionPolicy ExceptionPolicy { get; } + +- public override bool CanRead(InputFormatterContext context); + +- public override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding); + +- } +- public static class JsonSerializerSettingsProvider { + { +- public static JsonSerializerSettings CreateSerializerSettings(); + +- } +- } +- namespace Microsoft.AspNetCore.Mvc.Formatters.Json { + { +- public class JsonPatchOperationsArrayProvider : IApiDescriptionProvider { + { +- public JsonPatchOperationsArrayProvider(IModelMetadataProvider modelMetadataProvider); + +- public int Order { get; } + +- public void OnProvidersExecuted(ApiDescriptionProviderContext context); + +- public void OnProvidersExecuting(ApiDescriptionProviderContext context); + +- } +- } +- namespace Microsoft.AspNetCore.Mvc.Formatters.Json.Internal { + { +- public class JsonArrayPool : IArrayPool { + { +- public JsonArrayPool(ArrayPool inner); + +- public T[] Rent(int minimumLength); + +- public void Return(T[] array); + +- } +- public class JsonResultExecutor { + { +- public JsonResultExecutor(IHttpResponseStreamWriterFactory writerFactory, ILogger logger, IOptions options, ArrayPool charPool); + +- protected ILogger Logger { get; } + +- protected MvcJsonOptions Options { get; } + +- protected IHttpResponseStreamWriterFactory WriterFactory { get; } + +- public virtual Task ExecuteAsync(ActionContext context, JsonResult result); + +- } +- public class JsonSerializerObjectPolicy : IPooledObjectPolicy { + { +- public JsonSerializerObjectPolicy(JsonSerializerSettings serializerSettings); + +- public JsonSerializer Create(); + +- public bool Return(JsonSerializer serializer); + +- } +- public class MvcJsonMvcOptionsSetup : IConfigureOptions { + { +- public MvcJsonMvcOptionsSetup(ILoggerFactory loggerFactory, IOptions jsonOptions, ArrayPool charPool, ObjectPoolProvider objectPoolProvider); + +- public void Configure(MvcOptions options); + +- } +- } +- namespace Microsoft.Extensions.DependencyInjection { + { +- public static class MvcJsonMvcBuilderExtensions { + { +- public static IMvcBuilder AddJsonOptions(this IMvcBuilder builder, Action setupAction); + +- } +- public static class MvcJsonMvcCoreBuilderExtensions { + { +- public static IMvcCoreBuilder AddJsonFormatters(this IMvcCoreBuilder builder); + +- public static IMvcCoreBuilder AddJsonFormatters(this IMvcCoreBuilder builder, Action setupAction); + +- public static IMvcCoreBuilder AddJsonOptions(this IMvcCoreBuilder builder, Action setupAction); + +- } +- public static class MvcJsonOptionsExtensions { + { +- public static MvcJsonOptions UseCamelCasing(this MvcJsonOptions options, bool processDictionaryKeys); + +- public static MvcJsonOptions UseMemberCasing(this MvcJsonOptions options); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Xml.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Xml.md new file mode 100644 index 00000000..8046d036 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Formatters.Xml.md @@ -0,0 +1,83 @@ +# Microsoft.AspNetCore.Mvc.Formatters.Xml + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.Formatters { + public class XmlDataContractSerializerInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy { +- public XmlDataContractSerializerInputFormatter(); + +- public XmlDataContractSerializerInputFormatter(bool suppressInputFormatterBuffering); + + } + public class XmlSerializerInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy { +- public XmlSerializerInputFormatter(); + +- public XmlSerializerInputFormatter(bool suppressInputFormatterBuffering); + + } + } + namespace Microsoft.AspNetCore.Mvc.Formatters.Xml { + public class MvcXmlOptions : IEnumerable, IEnumerable { +- public bool AllowRfc7807CompliantProblemDetailsFormat { get; set; } + +- public IEnumerator GetEnumerator(); + ++ IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + } +- public class ProblemDetails21Wrapper : IUnwrappable, IXmlSerializable { + { +- protected static readonly string EmptyKey; + +- public ProblemDetails21Wrapper(); + +- public ProblemDetails21Wrapper(ProblemDetails problemDetails); + +- public XmlSchema GetSchema(); + +- object Microsoft.AspNetCore.Mvc.Formatters.Xml.IUnwrappable.Unwrap(Type declaredType); + +- protected virtual void ReadValue(XmlReader reader, string name); + +- public virtual void ReadXml(XmlReader reader); + +- public virtual void WriteXml(XmlWriter writer); + +- } +- public class ValidationProblemDetails21Wrapper : ProblemDetails21Wrapper, IUnwrappable { + { +- public ValidationProblemDetails21Wrapper(); + +- public ValidationProblemDetails21Wrapper(ValidationProblemDetails problemDetails); + +- object Microsoft.AspNetCore.Mvc.Formatters.Xml.IUnwrappable.Unwrap(Type declaredType); + +- protected override void ReadValue(XmlReader reader, string name); + +- public override void WriteXml(XmlWriter writer); + +- } + } +- namespace Microsoft.AspNetCore.Mvc.Formatters.Xml.Internal { + { +- public static class FormattingUtilities { + { +- public static readonly int DefaultMaxDepth; + +- public static readonly XsdDataContractExporter XsdDataContractExporter; + +- public static XmlDictionaryReaderQuotas GetDefaultXmlReaderQuotas(); + +- public static XmlWriterSettings GetDefaultXmlWriterSettings(); + +- } +- public static class LoggerExtensions { + { +- public static void FailedToCreateDataContractSerializer(this ILogger logger, string typeName, Exception exception); + +- public static void FailedToCreateXmlSerializer(this ILogger logger, string typeName, Exception exception); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Localization.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Localization.md new file mode 100644 index 00000000..86feb8ee --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Localization.md @@ -0,0 +1,14 @@ +# Microsoft.AspNetCore.Mvc.Localization + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.Localization { + public class ViewLocalizer : IHtmlLocalizer, IViewContextAware, IViewLocalizer { +- public ViewLocalizer(IHtmlLocalizerFactory localizerFactory, IHostingEnvironment hostingEnvironment); + ++ public ViewLocalizer(IHtmlLocalizerFactory localizerFactory, IWebHostEnvironment hostingEnvironment); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.NewtonsoftJson.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.NewtonsoftJson.md new file mode 100644 index 00000000..b7c24bb3 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.NewtonsoftJson.md @@ -0,0 +1,81 @@ +# Microsoft.AspNetCore.Mvc.NewtonsoftJson + +``` diff + { ++ namespace Microsoft.AspNetCore.Mvc { ++ public static class JsonPatchExtensions { ++ public static void ApplyTo(this JsonPatchDocument patchDoc, T objectToApplyTo, ModelStateDictionary modelState) where T : class; ++ public static void ApplyTo(this JsonPatchDocument patchDoc, T objectToApplyTo, ModelStateDictionary modelState, string prefix) where T : class; ++ } ++ public class MvcNewtonsoftJsonOptions : IEnumerable, IEnumerable { ++ public MvcNewtonsoftJsonOptions(); ++ public bool AllowInputFormatterExceptionMessages { get; set; } ++ public JsonSerializerSettings SerializerSettings { get; } ++ IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); ++ IEnumerator System.Collections.IEnumerable.GetEnumerator(); ++ } ++ } ++ namespace Microsoft.AspNetCore.Mvc.Formatters { ++ public class NewtonsoftJsonInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy { ++ public NewtonsoftJsonInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, MvcOptions options, MvcNewtonsoftJsonOptions jsonOptions); ++ public virtual InputFormatterExceptionPolicy ExceptionPolicy { get; } ++ protected JsonSerializerSettings SerializerSettings { get; } ++ protected virtual JsonSerializer CreateJsonSerializer(); ++ protected virtual JsonSerializer CreateJsonSerializer(InputFormatterContext context); ++ public override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding); ++ protected virtual void ReleaseJsonSerializer(JsonSerializer serializer); ++ } ++ public class NewtonsoftJsonOutputFormatter : TextOutputFormatter { ++ public NewtonsoftJsonOutputFormatter(JsonSerializerSettings serializerSettings, ArrayPool charPool, MvcOptions mvcOptions); ++ protected JsonSerializerSettings SerializerSettings { get; } ++ protected virtual JsonSerializer CreateJsonSerializer(); ++ protected virtual JsonSerializer CreateJsonSerializer(OutputFormatterWriteContext context); ++ protected virtual JsonWriter CreateJsonWriter(TextWriter writer); ++ public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding); ++ } ++ public class NewtonsoftJsonPatchInputFormatter : NewtonsoftJsonInputFormatter { ++ public NewtonsoftJsonPatchInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool charPool, ObjectPoolProvider objectPoolProvider, MvcOptions options, MvcNewtonsoftJsonOptions jsonOptions); ++ public override InputFormatterExceptionPolicy ExceptionPolicy { get; } ++ public override bool CanRead(InputFormatterContext context); ++ public override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding); ++ } ++ } ++ namespace Microsoft.AspNetCore.Mvc.NewtonsoftJson { ++ public static class JsonSerializerSettingsProvider { ++ public static JsonSerializerSettings CreateSerializerSettings(); ++ } ++ public sealed class ProblemDetailsConverter : JsonConverter { ++ public ProblemDetailsConverter(); ++ public override bool CanConvert(Type objectType); ++ public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer); ++ public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer); ++ } ++ public sealed class ValidationProblemDetailsConverter : JsonConverter { ++ public ValidationProblemDetailsConverter(); ++ public override bool CanConvert(Type objectType); ++ public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer); ++ public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer); ++ } ++ } ++ namespace Microsoft.AspNetCore.Mvc.Rendering { ++ public static class JsonHelperExtensions { ++ public static IHtmlContent Serialize(this IJsonHelper jsonHelper, object value, JsonSerializerSettings serializerSettings); ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class MvcNewtonsoftJsonOptionsExtensions { ++ public static MvcNewtonsoftJsonOptions UseCamelCasing(this MvcNewtonsoftJsonOptions options, bool processDictionaryKeys); ++ public static MvcNewtonsoftJsonOptions UseMemberCasing(this MvcNewtonsoftJsonOptions options); ++ } ++ public static class NewtonsoftJsonMvcBuilderExtensions { ++ public static IMvcBuilder AddNewtonsoftJson(this IMvcBuilder builder); ++ public static IMvcBuilder AddNewtonsoftJson(this IMvcBuilder builder, Action setupAction); ++ } ++ public static class NewtonsoftJsonMvcCoreBuilderExtensions { ++ public static IMvcCoreBuilder AddNewtonsoftJson(this IMvcCoreBuilder builder); ++ public static IMvcCoreBuilder AddNewtonsoftJson(this IMvcCoreBuilder builder, Action setupAction); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.Extensions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.Extensions.md new file mode 100644 index 00000000..309a9219 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.Extensions.md @@ -0,0 +1,45 @@ +# Microsoft.AspNetCore.Mvc.Razor.Extensions + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.Razor.Extensions { +- public class AssemblyAttributeInjectionPass : IntermediateNodePassBase, IRazorEngineFeature, IRazorFeature, IRazorOptimizationPass { + { +- public AssemblyAttributeInjectionPass(); + +- protected override void ExecuteCore(RazorCodeDocument codeDocument, DocumentIntermediateNode documentNode); + +- } +- public class InstrumentationPass : IntermediateNodePassBase, IRazorEngineFeature, IRazorFeature, IRazorOptimizationPass { + { +- public InstrumentationPass(); + +- public override int Order { get; } + +- protected override void ExecuteCore(RazorCodeDocument codeDocument, DocumentIntermediateNode documentNode); + +- } +- public class MvcRazorTemplateEngine : RazorTemplateEngine { + { +- public MvcRazorTemplateEngine(RazorEngine engine, RazorProject project); + +- public override RazorCodeDocument CreateCodeDocument(RazorProjectItem projectItem); + +- } +- public static class NamespaceDirective { + { +- public static readonly DirectiveDescriptor Directive; + +- public static void Register(IRazorEngineBuilder builder); + +- public static void Register(RazorProjectEngineBuilder builder); + +- } + public static class RazorExtensions { +- public static void Register(IRazorEngineBuilder builder); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.md new file mode 100644 index 00000000..5e13256f --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.md @@ -0,0 +1,41 @@ +# Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation + +``` diff + { ++ namespace Microsoft.AspNetCore.Mvc.ApplicationParts { ++ public static class AssemblyPartExtensions { ++ public static IEnumerable GetReferencePaths(this AssemblyPart assemblyPart); ++ } ++ } ++ namespace Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation { ++ public class FileProviderRazorProjectItem : RazorProjectItem { ++ public FileProviderRazorProjectItem(IFileInfo fileInfo, string basePath, string filePath, string root); ++ public FileProviderRazorProjectItem(IFileInfo fileInfo, string basePath, string filePath, string root, string fileKind); ++ public override string BasePath { get; } ++ public override bool Exists { get; } ++ public IFileInfo FileInfo { get; } ++ public override string FileKind { get; } ++ public override string FilePath { get; } ++ public override string PhysicalPath { get; } ++ public override string RelativePhysicalPath { get; } ++ public override Stream Read(); ++ } ++ public class MvcRazorRuntimeCompilationOptions { ++ public MvcRazorRuntimeCompilationOptions(); ++ public IList AdditionalReferencePaths { get; } ++ public IList FileProviders { get; } ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class RazorRuntimeCompilationMvcBuilderExtensions { ++ public static IMvcBuilder AddRazorRuntimeCompilation(this IMvcBuilder builder); ++ public static IMvcBuilder AddRazorRuntimeCompilation(this IMvcBuilder builder, Action setupAction); ++ } ++ public static class RazorRuntimeCompilationMvcCoreBuilderExtensions { ++ public static IMvcCoreBuilder AddRazorRuntimeCompilation(this IMvcCoreBuilder builder); ++ public static IMvcCoreBuilder AddRazorRuntimeCompilation(this IMvcCoreBuilder builder, Action setupAction); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.md new file mode 100644 index 00000000..0984d2b5 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Razor.md @@ -0,0 +1,392 @@ +# Microsoft.AspNetCore.Mvc.Razor + +``` diff + { ++ namespace Microsoft.AspNetCore.Mvc.Diagnostics { ++ public sealed class AfterViewPageEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.Razor.AfterViewPage"; ++ public AfterViewPageEventData(IRazorPage page, ViewContext viewContext, ActionDescriptor actionDescriptor, HttpContext httpContext); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public HttpContext HttpContext { get; } ++ public IRazorPage Page { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public ViewContext ViewContext { get; } ++ } ++ public sealed class BeforeViewPageEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.Razor.BeforeViewPage"; ++ public BeforeViewPageEventData(IRazorPage page, ViewContext viewContext, ActionDescriptor actionDescriptor, HttpContext httpContext); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public HttpContext HttpContext { get; } ++ public IRazorPage Page { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public ViewContext ViewContext { get; } ++ } ++ } + namespace Microsoft.AspNetCore.Mvc.Razor { + public class RazorView : IView { ++ public RazorView(IRazorViewEngine viewEngine, IRazorPageActivator pageActivator, IReadOnlyList viewStartPages, IRazorPage razorPage, HtmlEncoder htmlEncoder, DiagnosticListener diagnosticListener); +- public RazorView(IRazorViewEngine viewEngine, IRazorPageActivator pageActivator, IReadOnlyList viewStartPages, IRazorPage razorPage, HtmlEncoder htmlEncoder, DiagnosticSource diagnosticSource); + + } + public class RazorViewEngine : IRazorViewEngine, IViewEngine { +- public RazorViewEngine(IRazorPageFactoryProvider pageFactory, IRazorPageActivator pageActivator, HtmlEncoder htmlEncoder, IOptions optionsAccessor, RazorProject razorProject, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource); + +- public RazorViewEngine(IRazorPageFactoryProvider pageFactory, IRazorPageActivator pageActivator, HtmlEncoder htmlEncoder, IOptions optionsAccessor, RazorProjectFileSystem razorFileSystem, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource); + ++ public RazorViewEngine(IRazorPageFactoryProvider pageFactory, IRazorPageActivator pageActivator, HtmlEncoder htmlEncoder, IOptions optionsAccessor, ILoggerFactory loggerFactory, DiagnosticListener diagnosticListener); + } +- public class RazorViewEngineOptions : IEnumerable, IEnumerable { ++ public class RazorViewEngineOptions { +- public IList AdditionalCompilationReferences { get; } + +- public bool AllowRecompilingViewsOnFileChange { get; set; } + +- public Action CompilationCallback { get; set; } + +- public IList FileProviders { get; } + +- IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + + } + } + namespace Microsoft.AspNetCore.Mvc.Razor.Compilation { +- public class CompilationFailedException : Exception, ICompilationException { + { +- public CompilationFailedException(IEnumerable compilationFailures); + +- public IEnumerable CompilationFailures { get; } + +- } + public class CompiledViewDescriptor { ++ public CompiledViewDescriptor(RazorCompiledItem item); +- public bool IsPrecompiled { get; set; } + + } +- public interface IViewCompilationMemoryCacheProvider { + { +- IMemoryCache CompilationMemoryCache { get; } + +- } +- public class MetadataReferenceFeature { + { +- public MetadataReferenceFeature(); + +- public IList MetadataReferences { get; } + +- } +- public class MetadataReferenceFeatureProvider : IApplicationFeatureProvider, IApplicationFeatureProvider { + { +- public MetadataReferenceFeatureProvider(); + +- public void PopulateFeature(IEnumerable parts, MetadataReferenceFeature feature); + +- } +- public abstract class RazorReferenceManager { + { +- protected RazorReferenceManager(); + +- public abstract IReadOnlyList CompilationReferences { get; } + +- } +- public class RoslynCompilationContext { + { +- public RoslynCompilationContext(CSharpCompilation compilation); + +- public CSharpCompilation Compilation { get; set; } + +- } +- public class ViewsFeatureProvider : IApplicationFeatureProvider, IApplicationFeatureProvider { + { +- public static readonly string PrecompiledViewsAssemblySuffix; + +- public ViewsFeatureProvider(); + +- protected virtual IEnumerable GetViewAttributes(AssemblyPart assemblyPart); + +- public void PopulateFeature(IEnumerable parts, ViewsFeature feature); + +- } + } + namespace Microsoft.AspNetCore.Mvc.Razor.Internal { +- public static class ChecksumValidator { + { +- public static bool IsItemValid(RazorProjectFileSystem fileSystem, RazorCompiledItem item); + +- public static bool IsRecompilationSupported(RazorCompiledItem item); + +- } +- public class CSharpCompiler { + { +- public CSharpCompiler(RazorReferenceManager manager, IHostingEnvironment hostingEnvironment); + +- public virtual CSharpCompilationOptions CSharpCompilationOptions { get; } + +- public virtual EmitOptions EmitOptions { get; } + +- public virtual bool EmitPdb { get; } + +- public virtual CSharpParseOptions ParseOptions { get; } + +- public CSharpCompilation CreateCompilation(string assemblyName); + +- public SyntaxTree CreateSyntaxTree(SourceText sourceText); + +- protected internal virtual CompilationOptions GetDependencyContextCompilationOptions(); + +- } +- public class DefaultRazorPageFactoryProvider : IRazorPageFactoryProvider { + { +- public DefaultRazorPageFactoryProvider(IViewCompilerProvider viewCompilerProvider); + +- public RazorPageFactoryResult CreateFactory(string relativePath); + +- } +- public class DefaultRazorReferenceManager : RazorReferenceManager { + { +- public DefaultRazorReferenceManager(ApplicationPartManager partManager, IOptions optionsAccessor); + +- public override IReadOnlyList CompilationReferences { get; } + +- } +- public class DefaultRazorViewEngineFileProviderAccessor : IRazorViewEngineFileProviderAccessor { + { +- public DefaultRazorViewEngineFileProviderAccessor(IOptions optionsAccessor); + +- public IFileProvider FileProvider { get; } + +- } +- public class DefaultTagHelperActivator : ITagHelperActivator { + { +- public DefaultTagHelperActivator(ITypeActivatorCache typeActivatorCache); + +- public TTagHelper Create(ViewContext context) where TTagHelper : ITagHelper; + +- } +- public class DefaultTagHelperFactory : ITagHelperFactory { + { +- public DefaultTagHelperFactory(ITagHelperActivator activator); + +- public TTagHelper CreateTagHelper(ViewContext context) where TTagHelper : ITagHelper; + +- } +- public class ExpressionRewriter : CSharpSyntaxRewriter { + { +- public ExpressionRewriter(SemanticModel semanticModel); + +- public static CSharpCompilation Rewrite(CSharpCompilation compilation); + +- public override SyntaxNode VisitClassDeclaration(ClassDeclarationSyntax node); + +- public override SyntaxNode VisitSimpleLambdaExpression(SimpleLambdaExpressionSyntax node); + +- } +- public class FileProviderRazorProjectFileSystem : RazorProjectFileSystem { + { +- public FileProviderRazorProjectFileSystem(IRazorViewEngineFileProviderAccessor accessor, IHostingEnvironment hostingEnvironment); + +- public override IEnumerable EnumerateItems(string path); + +- public override RazorProjectItem GetItem(string path); + +- } +- public class FileProviderRazorProjectItem : RazorProjectItem { + { +- public FileProviderRazorProjectItem(IFileInfo fileInfo, string basePath, string filePath, string root); + +- public override string BasePath { get; } + +- public override bool Exists { get; } + +- public IFileInfo FileInfo { get; } + +- public override string FilePath { get; } + +- public override string PhysicalPath { get; } + +- public override string RelativePhysicalPath { get; } + +- public override Stream Read(); + +- } +- public interface IRazorViewEngineFileProviderAccessor { + { +- IFileProvider FileProvider { get; } + +- } +- public class LazyMetadataReferenceFeature : IMetadataReferenceFeature, IRazorEngineFeature, IRazorFeature { + { +- public LazyMetadataReferenceFeature(RazorReferenceManager referenceManager); + +- public RazorEngine Engine { get; set; } + +- public IReadOnlyList References { get; } + +- } +- public static class MvcRazorDiagnosticSourceExtensions { + { +- public static void AfterViewPage(this DiagnosticSource diagnosticSource, IRazorPage page, ViewContext viewContext); + +- public static void BeforeViewPage(this DiagnosticSource diagnosticSource, IRazorPage page, ViewContext viewContext); + +- } +- public static class MvcRazorLoggerExtensions { + { +- public static void GeneratedCodeToAssemblyCompilationEnd(this ILogger logger, string filePath, long startTimestamp); + +- public static void GeneratedCodeToAssemblyCompilationStart(this ILogger logger, string filePath); + +- public static void PrecompiledViewFound(this ILogger logger, string relativePath); + +- public static void TagHelperComponentInitialized(this ILogger logger, string componentName); + +- public static void TagHelperComponentProcessed(this ILogger logger, string componentName); + +- public static void ViewCompilerCouldNotFindFileAtPath(this ILogger logger, string path); + +- public static void ViewCompilerEndCodeGeneration(this ILogger logger, string filePath, long startTimestamp); + +- public static void ViewCompilerFoundFileToCompile(this ILogger logger, string path); + +- public static void ViewCompilerInvalidingCompiledFile(this ILogger logger, string path); + +- public static void ViewCompilerLocatedCompiledView(this ILogger logger, string view); + +- public static void ViewCompilerLocatedCompiledViewForPath(this ILogger logger, string path); + +- public static void ViewCompilerNoCompiledViewsFound(this ILogger logger); + +- public static void ViewCompilerStartCodeGeneration(this ILogger logger, string filePath); + +- public static void ViewLookupCacheHit(this ILogger logger, string viewName, string controllerName); + +- public static void ViewLookupCacheMiss(this ILogger logger, string viewName, string controllerName); + +- } +- public class MvcRazorMvcViewOptionsSetup : IConfigureOptions { + { +- public MvcRazorMvcViewOptionsSetup(IRazorViewEngine razorViewEngine); + +- public void Configure(MvcViewOptions options); + +- } +- public class RazorPagePropertyActivator { + { +- public RazorPagePropertyActivator(Type pageType, Type declaredModelType, IModelMetadataProvider metadataProvider, RazorPagePropertyActivator.PropertyValueAccessors propertyValueAccessors); + +- public void Activate(object page, ViewContext context); + +- public class PropertyValueAccessors { + { +- public PropertyValueAccessors(); + +- public Func DiagnosticSourceAccessor { get; set; } + +- public Func HtmlEncoderAccessor { get; set; } + +- public Func JsonHelperAccessor { get; set; } + +- public Func ModelExpressionProviderAccessor { get; set; } + +- public Func UrlHelperAccessor { get; set; } + +- } +- } +- public class RazorViewCompiler : IViewCompiler { + { +- public RazorViewCompiler(IFileProvider fileProvider, RazorProjectEngine projectEngine, CSharpCompiler csharpCompiler, Action compilationCallback, IList precompiledViews, IMemoryCache cache, ILogger logger); + +- public bool AllowRecompilingViewsOnFileChange { get; set; } + +- protected virtual CompiledViewDescriptor CompileAndEmit(string relativePath); + +- public Task CompileAsync(string relativePath); + +- } +- public class RazorViewCompilerProvider : IViewCompilerProvider { + { +- public RazorViewCompilerProvider(ApplicationPartManager applicationPartManager, RazorProjectEngine razorProjectEngine, IRazorViewEngineFileProviderAccessor fileProviderAccessor, CSharpCompiler csharpCompiler, IOptions viewEngineOptionsAccessor, IViewCompilationMemoryCacheProvider compilationMemoryCacheProvider, ILoggerFactory loggerFactory); + +- public IViewCompiler GetCompiler(); + +- } +- public class ServiceBasedTagHelperActivator : ITagHelperActivator { + { +- public ServiceBasedTagHelperActivator(); + +- public TTagHelper Create(ViewContext context) where TTagHelper : ITagHelper; + +- } +- public class TagHelperComponentManager : ITagHelperComponentManager { + { +- public TagHelperComponentManager(IEnumerable tagHelperComponents); + +- public ICollection Components { get; } + +- } +- public static class TagHelpersAsServices { + { +- public static void AddTagHelpersAsServices(ApplicationPartManager manager, IServiceCollection services); + +- } +- public readonly struct ViewLocationCacheItem { + { +- public ViewLocationCacheItem(Func razorPageFactory, string location); + +- public string Location { get; } + +- public Func PageFactory { get; } + +- } +- public readonly struct ViewLocationCacheKey : IEquatable { + { +- public ViewLocationCacheKey(string viewName, bool isMainPage); + +- public ViewLocationCacheKey(string viewName, string controllerName, string areaName, string pageName, bool isMainPage, IReadOnlyDictionary values); + +- public string AreaName { get; } + +- public string ControllerName { get; } + +- public bool IsMainPage { get; } + +- public string PageName { get; } + +- public IReadOnlyDictionary ViewLocationExpanderValues { get; } + +- public string ViewName { get; } + +- public bool Equals(ViewLocationCacheKey y); + +- public override bool Equals(object obj); + +- public override int GetHashCode(); + +- } +- public class ViewLocationCacheResult { + { +- public ViewLocationCacheResult(ViewLocationCacheItem view, IReadOnlyList viewStarts); + +- public ViewLocationCacheResult(IEnumerable searchedLocations); + +- public IEnumerable SearchedLocations { get; } + +- public bool Success { get; } + +- public ViewLocationCacheItem ViewEntry { get; } + +- public IReadOnlyList ViewStartEntries { get; } + +- } +- public static class ViewPath { + { +- public static string NormalizePath(string path); + +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.RazorPages.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.RazorPages.md new file mode 100644 index 00000000..16384004 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.RazorPages.md @@ -0,0 +1,475 @@ +# Microsoft.AspNetCore.Mvc.RazorPages + +``` diff + { ++ namespace Microsoft.AspNetCore.Builder { ++ public sealed class PageActionEndpointConventionBuilder : IEndpointConventionBuilder { ++ public void Add(Action convention); ++ } ++ public static class RazorPagesEndpointRouteBuilderExtensions { ++ public static void MapDynamicPageRoute(this IEndpointRouteBuilder endpoints, string pattern) where TTransformer : DynamicRouteValueTransformer; ++ public static IEndpointConventionBuilder MapFallbackToAreaPage(this IEndpointRouteBuilder endpoints, string page, string area); ++ public static IEndpointConventionBuilder MapFallbackToAreaPage(this IEndpointRouteBuilder endpoints, string pattern, string page, string area); ++ public static IEndpointConventionBuilder MapFallbackToPage(this IEndpointRouteBuilder endpoints, string page); ++ public static IEndpointConventionBuilder MapFallbackToPage(this IEndpointRouteBuilder endpoints, string pattern, string page); ++ public static PageActionEndpointConventionBuilder MapRazorPages(this IEndpointRouteBuilder endpoints); ++ } ++ } + namespace Microsoft.AspNetCore.Mvc.ApplicationModels { ++ public interface IPageApplicationModelPartsProvider { ++ PageHandlerModel CreateHandlerModel(MethodInfo method); ++ PageParameterModel CreateParameterModel(ParameterInfo parameter); ++ PagePropertyModel CreatePropertyModel(PropertyInfo property); ++ bool IsHandler(MethodInfo methodInfo); ++ } + public class PageApplicationModel { ++ public IList EndpointMetadata { get; } + } + public class PageParameterModel : ParameterModelBase, IBindingModel, ICommonModel, IPropertyModel { ++ IReadOnlyList Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.Attributes { get; } ++ IDictionary Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel.Properties { get; } +- IReadOnlyList Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.get_Attributes(); ++ get; +- IDictionary Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel.get_Properties(); ++ get; + } + public class PagePropertyModel : ParameterModelBase, ICommonModel, IPropertyModel { ++ IReadOnlyList Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.Attributes { get; } ++ IDictionary Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel.Properties { get; } +- IReadOnlyList Microsoft.AspNetCore.Mvc.ApplicationModels.ICommonModel.get_Attributes(); ++ get; +- IDictionary Microsoft.AspNetCore.Mvc.ApplicationModels.IPropertyModel.get_Properties(); ++ get; + } ++ public sealed class PageRouteMetadata { ++ public PageRouteMetadata(string pageRoute, string routeTemplate); ++ public string PageRoute { get; } ++ public string RouteTemplate { get; } ++ } + public class PageRouteModel { ++ public IOutboundParameterTransformer RouteParameterTransformer { get; set; } + } + } ++ namespace Microsoft.AspNetCore.Mvc.Diagnostics { ++ public sealed class AfterHandlerMethodEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterHandlerMethod"; ++ public AfterHandlerMethodEventData(ActionContext actionContext, IReadOnlyDictionary arguments, HandlerMethodDescriptor handlerMethodDescriptor, object instance, IActionResult result); ++ public ActionContext ActionContext { get; } ++ public IReadOnlyDictionary Arguments { get; } ++ protected override int Count { get; } ++ public HandlerMethodDescriptor HandlerMethodDescriptor { get; } ++ public object Instance { get; } ++ public IActionResult Result { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterPageFilterOnPageHandlerExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecuted"; ++ public AfterPageFilterOnPageHandlerExecutedEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerExecutedContext handlerExecutedContext, IPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IPageFilter Filter { get; } ++ public PageHandlerExecutedContext HandlerExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterPageFilterOnPageHandlerExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecuting"; ++ public AfterPageFilterOnPageHandlerExecutingEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerExecutingContext handlerExecutingContext, IPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IPageFilter Filter { get; } ++ public PageHandlerExecutingContext HandlerExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterPageFilterOnPageHandlerExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerExecution"; ++ public AfterPageFilterOnPageHandlerExecutionEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerExecutedContext handlerExecutedContext, IAsyncPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IAsyncPageFilter Filter { get; } ++ public PageHandlerExecutedContext HandlerExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterPageFilterOnPageHandlerSelectedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerSelected"; ++ public AfterPageFilterOnPageHandlerSelectedEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerSelectedContext handlerSelectedContext, IPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IPageFilter Filter { get; } ++ public PageHandlerSelectedContext HandlerSelectedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class AfterPageFilterOnPageHandlerSelectionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterOnPageHandlerSelection"; ++ public AfterPageFilterOnPageHandlerSelectionEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerSelectedContext handlerSelectedContext, IAsyncPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IAsyncPageFilter Filter { get; } ++ public PageHandlerSelectedContext HandlerSelectedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforeHandlerMethodEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeHandlerMethod"; ++ public BeforeHandlerMethodEventData(ActionContext actionContext, IReadOnlyDictionary arguments, HandlerMethodDescriptor handlerMethodDescriptor, object instance); ++ public ActionContext ActionContext { get; } ++ public IReadOnlyDictionary Arguments { get; } ++ protected override int Count { get; } ++ public HandlerMethodDescriptor HandlerMethodDescriptor { get; } ++ public object Instance { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforePageFilterOnPageHandlerExecutedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecuted"; ++ public BeforePageFilterOnPageHandlerExecutedEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerExecutedContext handlerExecutedContext, IPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IPageFilter Filter { get; } ++ public PageHandlerExecutedContext HandlerExecutedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforePageFilterOnPageHandlerExecutingEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecuting"; ++ public BeforePageFilterOnPageHandlerExecutingEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerExecutingContext handlerExecutingContext, IPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IPageFilter Filter { get; } ++ public PageHandlerExecutingContext HandlerExecutingContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforePageFilterOnPageHandlerExecutionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerExecution"; ++ public BeforePageFilterOnPageHandlerExecutionEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerExecutingContext handlerExecutionContext, IAsyncPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IAsyncPageFilter Filter { get; } ++ public PageHandlerExecutingContext HandlerExecutionContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforePageFilterOnPageHandlerSelectedEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerSelected"; ++ public BeforePageFilterOnPageHandlerSelectedEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerSelectedContext handlerSelectedContext, IPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IPageFilter Filter { get; } ++ public PageHandlerSelectedContext HandlerSelectedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ public sealed class BeforePageFilterOnPageHandlerSelectionEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeOnPageHandlerSelection"; ++ public BeforePageFilterOnPageHandlerSelectionEventData(CompiledPageActionDescriptor actionDescriptor, PageHandlerSelectedContext handlerSelectedContext, IAsyncPageFilter filter); ++ public CompiledPageActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ public IAsyncPageFilter Filter { get; } ++ public PageHandlerSelectedContext HandlerSelectedContext { get; } ++ protected override KeyValuePair this[int index] { get; } ++ } ++ } +- namespace Microsoft.AspNetCore.Mvc.Internal { + { +- public static class MvcRazorPagesDiagnosticSourceExtensions { + { +- public static void AfterHandlerMethod(this DiagnosticSource diagnosticSource, ActionContext actionContext, HandlerMethodDescriptor handlerMethodDescriptor, IDictionary arguments, object instance, IActionResult result); + +- public static void AfterOnPageHandlerExecuted(this DiagnosticSource diagnosticSource, PageHandlerExecutedContext handlerExecutedContext, IPageFilter filter); + +- public static void AfterOnPageHandlerExecuting(this DiagnosticSource diagnosticSource, PageHandlerExecutingContext handlerExecutingContext, IPageFilter filter); + +- public static void AfterOnPageHandlerExecution(this DiagnosticSource diagnosticSource, PageHandlerExecutedContext handlerExecutedContext, IAsyncPageFilter filter); + +- public static void AfterOnPageHandlerSelected(this DiagnosticSource diagnosticSource, PageHandlerSelectedContext handlerSelectedContext, IPageFilter filter); + +- public static void AfterOnPageHandlerSelection(this DiagnosticSource diagnosticSource, PageHandlerSelectedContext handlerSelectedContext, IAsyncPageFilter filter); + +- public static void BeforeHandlerMethod(this DiagnosticSource diagnosticSource, ActionContext actionContext, HandlerMethodDescriptor handlerMethodDescriptor, IDictionary arguments, object instance); + +- public static void BeforeOnPageHandlerExecuted(this DiagnosticSource diagnosticSource, PageHandlerExecutedContext handlerExecutedContext, IPageFilter filter); + +- public static void BeforeOnPageHandlerExecuting(this DiagnosticSource diagnosticSource, PageHandlerExecutingContext handlerExecutingContext, IPageFilter filter); + +- public static void BeforeOnPageHandlerExecution(this DiagnosticSource diagnosticSource, PageHandlerExecutingContext handlerExecutionContext, IAsyncPageFilter filter); + +- public static void BeforeOnPageHandlerSelected(this DiagnosticSource diagnosticSource, PageHandlerSelectedContext handlerSelectedContext, IPageFilter filter); + +- public static void BeforeOnPageHandlerSelection(this DiagnosticSource diagnosticSource, PageHandlerSelectedContext handlerSelectedContext, IAsyncPageFilter filter); + +- } +- } + namespace Microsoft.AspNetCore.Mvc.RazorPages { + public class CompiledPageActionDescriptor : PageActionDescriptor { ++ public Endpoint Endpoint { get; set; } + } + public class RazorPagesOptions : IEnumerable, IEnumerable { +- public bool AllowAreas { get; set; } + +- public bool AllowDefaultHandlingForOptionsRequests { get; set; } + +- public bool AllowMappingHeadRequestsToGetHandler { get; set; } + + } + } + namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure { +- public class DefaultPageActivatorProvider : IPageActivatorProvider { + { +- public DefaultPageActivatorProvider(); + +- public virtual Func CreateActivator(CompiledPageActionDescriptor actionDescriptor); + +- public virtual Action CreateReleaser(CompiledPageActionDescriptor actionDescriptor); + +- } +- public class DefaultPageFactoryProvider : IPageFactoryProvider { + { +- public DefaultPageFactoryProvider(IPageActivatorProvider pageActivator, IModelMetadataProvider metadataProvider, IUrlHelperFactory urlHelperFactory, IJsonHelper jsonHelper, DiagnosticSource diagnosticSource, HtmlEncoder htmlEncoder, IModelExpressionProvider modelExpressionProvider); + +- public virtual Action CreatePageDisposer(CompiledPageActionDescriptor descriptor); + +- public virtual Func CreatePageFactory(CompiledPageActionDescriptor actionDescriptor); + +- } +- public class DefaultPageHandlerMethodSelector : IPageHandlerMethodSelector { + { +- public DefaultPageHandlerMethodSelector(); + +- public DefaultPageHandlerMethodSelector(IOptions options); + +- public HandlerMethodDescriptor Select(PageContext context); + +- } +- public class DefaultPageModelActivatorProvider : IPageModelActivatorProvider { + { +- public DefaultPageModelActivatorProvider(); + +- public virtual Func CreateActivator(CompiledPageActionDescriptor actionDescriptor); + +- public virtual Action CreateReleaser(CompiledPageActionDescriptor actionDescriptor); + +- } +- public class DefaultPageModelFactoryProvider : IPageModelFactoryProvider { + { +- public DefaultPageModelFactoryProvider(IPageModelActivatorProvider modelActivator); + +- public virtual Action CreateModelDisposer(CompiledPageActionDescriptor descriptor); + +- public virtual Func CreateModelFactory(CompiledPageActionDescriptor descriptor); + +- } +- public abstract class PageArgumentBinder { + { +- protected PageArgumentBinder(); + +- protected abstract Task BindAsync(PageContext context, object value, string name, Type type); + +- public Task BindModelAsync(PageContext context, Type type, object @default, string name); + +- public Task BindModelAsync(PageContext context, string name); + +- public Task BindModelAsync(PageContext context, TModel @default, string name); + +- public Task TryUpdateModelAsync(PageContext context, TModel value); + +- public Task TryUpdateModelAsync(PageContext context, TModel value, string name); + +- } +- public static class PageDirectiveFeature { + { +- public static bool TryGetPageDirective(ILogger logger, RazorProjectItem projectItem, out string template); + +- } ++ public abstract class PageLoader : IPageLoader { ++ protected PageLoader(); ++ public abstract Task LoadAsync(PageActionDescriptor actionDescriptor); ++ CompiledPageActionDescriptor Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.IPageLoader.Load(PageActionDescriptor actionDescriptor); ++ } + public class PageResultExecutor : ViewExecutor { ++ public PageResultExecutor(IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine compositeViewEngine, IRazorViewEngine razorViewEngine, IRazorPageActivator razorPageActivator, DiagnosticListener diagnosticListener, HtmlEncoder htmlEncoder); +- public PageResultExecutor(IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine compositeViewEngine, IRazorViewEngine razorViewEngine, IRazorPageActivator razorPageActivator, DiagnosticSource diagnosticSource, HtmlEncoder htmlEncoder); + + } + public class RazorPageAdapter : IModelTypeProvider, IRazorPage { +- public RazorPageAdapter(RazorPageBase page); + + } + } +- namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal { + { +- public class AuthorizationPageApplicationModelProvider : IPageApplicationModelProvider { + { +- public AuthorizationPageApplicationModelProvider(IAuthorizationPolicyProvider policyProvider); + +- public int Order { get; } + +- public void OnProvidersExecuted(PageApplicationModelProviderContext context); + +- public void OnProvidersExecuting(PageApplicationModelProviderContext context); + +- } +- public static class CompiledPageActionDescriptorBuilder { + { +- public static CompiledPageActionDescriptor Build(PageApplicationModel applicationModel, FilterCollection globalFilters); + +- } +- public class CompiledPageRouteModelProvider : IPageRouteModelProvider { + { +- public CompiledPageRouteModelProvider(ApplicationPartManager applicationManager, IOptions pagesOptionsAccessor, RazorProjectEngine razorProjectEngine, ILogger logger); + +- public int Order { get; } + +- protected virtual ViewsFeature GetViewFeature(ApplicationPartManager applicationManager); + +- public void OnProvidersExecuted(PageRouteModelProviderContext context); + +- public void OnProvidersExecuting(PageRouteModelProviderContext context); + +- } +- public class DefaultPageArgumentBinder : PageArgumentBinder { + { +- public DefaultPageArgumentBinder(ParameterBinder binder); + +- protected override Task BindAsync(PageContext pageContext, object value, string name, Type type); + +- } +- public class DefaultPageLoader : IPageLoader { + { +- public DefaultPageLoader(IEnumerable applicationModelProviders, IViewCompilerProvider viewCompilerProvider, IOptions pageOptions, IOptions mvcOptions); + +- public CompiledPageActionDescriptor Load(PageActionDescriptor actionDescriptor); + +- } +- public static class ExecutorFactory { + { +- public static PageHandlerExecutorDelegate CreateExecutor(HandlerMethodDescriptor handlerDescriptor); + +- } +- public class PageActionDescriptorChangeProvider : IActionDescriptorChangeProvider { + { +- public PageActionDescriptorChangeProvider(RazorTemplateEngine templateEngine, IRazorViewEngineFileProviderAccessor fileProviderAccessor, IOptions razorPagesOptions, IOptions razorViewEngineOptions); + +- public IChangeToken GetChangeToken(); + +- } +- public class PageActionInvoker : ResourceInvoker, IActionInvoker { + { +- public PageActionInvoker(IPageHandlerMethodSelector handlerMethodSelector, DiagnosticSource diagnosticSource, ILogger logger, IActionResultTypeMapper mapper, PageContext pageContext, IFilterMetadata[] filterMetadata, PageActionInvokerCacheEntry cacheEntry, ParameterBinder parameterBinder, ITempDataDictionaryFactory tempDataFactory, HtmlHelperOptions htmlHelperOptions); + +- protected override Task InvokeInnerFilterAsync(); + +- protected override Task InvokeResultAsync(IActionResult result); + +- protected override void ReleaseResources(); + +- } +- public class PageActionInvokerCacheEntry { + { +- public PageActionInvokerCacheEntry(CompiledPageActionDescriptor actionDescriptor, Func viewDataFactory, Func pageFactory, Action releasePage, Func modelFactory, Action releaseModel, Func propertyBinder, PageHandlerExecutorDelegate[] handlerExecutors, PageHandlerBinderDelegate[] handlerBinders, IReadOnlyList> viewStartFactories, FilterItem[] cacheableFilters); + +- public CompiledPageActionDescriptor ActionDescriptor { get; } + +- public FilterItem[] CacheableFilters { get; } + +- public PageHandlerBinderDelegate[] HandlerBinders { get; } + +- public PageHandlerExecutorDelegate[] HandlerExecutors { get; } + +- public Func ModelFactory { get; } + +- public Func PageFactory { get; } + +- public Func PropertyBinder { get; } + +- public Action ReleaseModel { get; } + +- public Action ReleasePage { get; } + +- public Func ViewDataFactory { get; } + +- public IReadOnlyList> ViewStartFactories { get; } + +- } +- public class PageActionInvokerProvider : IActionInvokerProvider { + { +- public PageActionInvokerProvider(IPageLoader loader, IPageFactoryProvider pageFactoryProvider, IPageModelFactoryProvider modelFactoryProvider, IRazorPageFactoryProvider razorPageFactoryProvider, IActionDescriptorCollectionProvider collectionProvider, IEnumerable filterProviders, ParameterBinder parameterBinder, IModelMetadataProvider modelMetadataProvider, IModelBinderFactory modelBinderFactory, ITempDataDictionaryFactory tempDataFactory, IOptions mvcOptions, IOptions htmlHelperOptions, IPageHandlerMethodSelector selector, RazorProjectFileSystem razorFileSystem, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory, IActionResultTypeMapper mapper); + +- public int Order { get; } + +- public void OnProvidersExecuted(ActionInvokerProviderContext context); + +- public void OnProvidersExecuting(ActionInvokerProviderContext context); + +- } +- public delegate Task PageHandlerBinderDelegate(PageContext pageContext, IDictionary arguments); + +- public delegate Task PageHandlerExecutorDelegate(object handler, object[] arguments); + +- public class PageHandlerPageFilter : IAsyncPageFilter, IFilterMetadata, IOrderedFilter { + { +- public PageHandlerPageFilter(); + +- public int Order { get; } + +- public Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next); + +- public Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context); + +- } +- public class PageHandlerResultFilter : IAsyncResultFilter, IFilterMetadata, IOrderedFilter { + { +- public PageHandlerResultFilter(); + +- public int Order { get; } + +- public Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next); + +- } +- public class RazorPagesRazorViewEngineOptionsSetup : IConfigureOptions { + { +- public RazorPagesRazorViewEngineOptionsSetup(IOptions pagesOptions); + +- public void Configure(RazorViewEngineOptions options); + +- } +- public class RazorProjectPageRouteModelProvider : IPageRouteModelProvider { + { +- public RazorProjectPageRouteModelProvider(RazorProjectFileSystem razorFileSystem, IOptions pagesOptionsAccessor, ILoggerFactory loggerFactory); + +- public int Order { get; } + +- public void OnProvidersExecuted(PageRouteModelProviderContext context); + +- public void OnProvidersExecuting(PageRouteModelProviderContext context); + +- } +- public class ResponseCacheFilter : IFilterMetadata, IPageFilter, IResponseCacheFilter { + { +- public ResponseCacheFilter(CacheProfile cacheProfile, ILoggerFactory loggerFactory); + +- public int Duration { get; set; } + +- public ResponseCacheLocation Location { get; set; } + +- public bool NoStore { get; set; } + +- public string VaryByHeader { get; set; } + +- public string[] VaryByQueryKeys { get; set; } + +- public void OnPageHandlerExecuted(PageHandlerExecutedContext context); + +- public void OnPageHandlerExecuting(PageHandlerExecutingContext context); + +- public void OnPageHandlerSelected(PageHandlerSelectedContext context); + +- } +- public class ResponseCacheFilterApplicationModelProvider : IPageApplicationModelProvider { + { +- public ResponseCacheFilterApplicationModelProvider(IOptions mvcOptionsAccessor, ILoggerFactory loggerFactory); + +- public int Order { get; } + +- public void OnProvidersExecuted(PageApplicationModelProviderContext context); + +- public void OnProvidersExecuting(PageApplicationModelProviderContext context); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.TagHelpers.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.TagHelpers.md new file mode 100644 index 00000000..f7cf7c80 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.TagHelpers.md @@ -0,0 +1,146 @@ +# Microsoft.AspNetCore.Mvc.TagHelpers + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.TagHelpers { + public class CacheTagHelper : CacheTagHelperBase { ++ public CacheTagHelper(CacheTagHelperMemoryCacheFactory factory, HtmlEncoder htmlEncoder); +- public CacheTagHelper(CacheTagHelperMemoryCacheFactory factory, HtmlEncoder htmlEncoder); + + } ++ public class CacheTagHelperMemoryCacheFactory { ++ public CacheTagHelperMemoryCacheFactory(IOptions options); ++ public IMemoryCache Cache { get; } ++ } + public class EnvironmentTagHelper : TagHelper { +- public EnvironmentTagHelper(IHostingEnvironment hostingEnvironment); + ++ public EnvironmentTagHelper(IWebHostEnvironment hostingEnvironment); +- protected IHostingEnvironment HostingEnvironment { get; } ++ protected IWebHostEnvironment HostingEnvironment { get; } + } ++ public class GlobbingUrlBuilder { ++ public GlobbingUrlBuilder(IFileProvider fileProvider, IMemoryCache cache, PathString requestPathBase); ++ public IMemoryCache Cache { get; } ++ public IFileProvider FileProvider { get; } ++ public PathString RequestPathBase { get; } ++ public virtual IReadOnlyList BuildUrlList(string staticUrl, string includePattern, string excludePattern); ++ } + public class ImageTagHelper : UrlResolutionTagHelper { +- public ImageTagHelper(IHostingEnvironment hostingEnvironment, TagHelperMemoryCacheProvider cacheProvider, IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, IUrlHelperFactory urlHelperFactory); + +- public ImageTagHelper(IHostingEnvironment hostingEnvironment, IMemoryCache cache, HtmlEncoder htmlEncoder, IUrlHelperFactory urlHelperFactory); + ++ public ImageTagHelper(IWebHostEnvironment hostingEnvironment, TagHelperMemoryCacheProvider cacheProvider, IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, IUrlHelperFactory urlHelperFactory); ++ public ImageTagHelper(IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, IUrlHelperFactory urlHelperFactory); +- protected internal IHostingEnvironment HostingEnvironment { get; } ++ protected internal IWebHostEnvironment HostingEnvironment { get; } + } + public class LinkTagHelper : UrlResolutionTagHelper { +- public LinkTagHelper(IHostingEnvironment hostingEnvironment, TagHelperMemoryCacheProvider cacheProvider, IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, JavaScriptEncoder javaScriptEncoder, IUrlHelperFactory urlHelperFactory); + +- public LinkTagHelper(IHostingEnvironment hostingEnvironment, IMemoryCache cache, HtmlEncoder htmlEncoder, JavaScriptEncoder javaScriptEncoder, IUrlHelperFactory urlHelperFactory); + ++ public LinkTagHelper(IWebHostEnvironment hostingEnvironment, TagHelperMemoryCacheProvider cacheProvider, IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, JavaScriptEncoder javaScriptEncoder, IUrlHelperFactory urlHelperFactory); +- protected internal IHostingEnvironment HostingEnvironment { get; } ++ protected internal IWebHostEnvironment HostingEnvironment { get; } + } + public class PartialTagHelper : TagHelper { ++ public PartialTagHelper(ICompositeViewEngine viewEngine, IViewBufferScope viewBufferScope); +- public PartialTagHelper(ICompositeViewEngine viewEngine, IViewBufferScope viewBufferScope); + + } + public class ScriptTagHelper : UrlResolutionTagHelper { +- public ScriptTagHelper(IHostingEnvironment hostingEnvironment, TagHelperMemoryCacheProvider cacheProvider, IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, JavaScriptEncoder javaScriptEncoder, IUrlHelperFactory urlHelperFactory); + +- public ScriptTagHelper(IHostingEnvironment hostingEnvironment, IMemoryCache cache, HtmlEncoder htmlEncoder, JavaScriptEncoder javaScriptEncoder, IUrlHelperFactory urlHelperFactory); + ++ public ScriptTagHelper(IWebHostEnvironment hostingEnvironment, TagHelperMemoryCacheProvider cacheProvider, IFileVersionProvider fileVersionProvider, HtmlEncoder htmlEncoder, JavaScriptEncoder javaScriptEncoder, IUrlHelperFactory urlHelperFactory); +- protected internal IHostingEnvironment HostingEnvironment { get; } ++ protected internal IWebHostEnvironment HostingEnvironment { get; } + } + } +- namespace Microsoft.AspNetCore.Mvc.TagHelpers.Internal { + { +- public static class AttributeMatcher { + { +- public static bool TryDetermineMode(TagHelperContext context, IReadOnlyList> modeInfos, Func compare, out TMode result); + +- } +- public class CacheTagHelperMemoryCacheFactory { + { +- public CacheTagHelperMemoryCacheFactory(IOptions options); + +- public IMemoryCache Cache { get; } + +- } +- public class CurrentValues { + { +- public CurrentValues(ICollection values); + +- public ICollection Values { get; } + +- public ICollection ValuesAndEncodedValues { get; set; } + +- } +- public class FileProviderGlobbingDirectory : DirectoryInfoBase { + { +- public FileProviderGlobbingDirectory(IFileProvider fileProvider, IFileInfo fileInfo, FileProviderGlobbingDirectory parent); + +- public override string FullName { get; } + +- public override string Name { get; } + +- public override DirectoryInfoBase ParentDirectory { get; } + +- public string RelativePath { get; } + +- public override IEnumerable EnumerateFileSystemInfos(); + +- public override DirectoryInfoBase GetDirectory(string path); + +- public override FileInfoBase GetFile(string path); + +- } +- public class FileProviderGlobbingFile : FileInfoBase { + { +- public FileProviderGlobbingFile(IFileInfo fileInfo, DirectoryInfoBase parent); + +- public override string FullName { get; } + +- public override string Name { get; } + +- public override DirectoryInfoBase ParentDirectory { get; } + +- } +- public class GlobbingUrlBuilder { + { +- public GlobbingUrlBuilder(IFileProvider fileProvider, IMemoryCache cache, PathString requestPathBase); + +- public IMemoryCache Cache { get; } + +- public IFileProvider FileProvider { get; } + +- public PathString RequestPathBase { get; } + +- public virtual IReadOnlyList BuildUrlList(string staticUrl, string includePattern, string excludePattern); + +- } +- public static class JavaScriptResources { + { +- public static string GetEmbeddedJavaScript(string resourceName); + +- } +- public class ModeAttributes { + { +- public ModeAttributes(TMode mode, string[] attributes); + +- public string[] Attributes { get; } + +- public TMode Mode { get; } + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Testing.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Testing.md new file mode 100644 index 00000000..50153fa9 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.Testing.md @@ -0,0 +1,14 @@ +# Microsoft.AspNetCore.Mvc.Testing + +``` diff + { + namespace Microsoft.AspNetCore.Mvc.Testing { + public class WebApplicationFactory : IDisposable where TEntryPoint : class { ++ public virtual IServiceProvider Services { get; } ++ protected virtual IHost CreateHost(IHostBuilder builder); ++ protected virtual IHostBuilder CreateHostBuilder(); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.ViewFeatures.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.ViewFeatures.md new file mode 100644 index 00000000..f50e940f --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.ViewFeatures.md @@ -0,0 +1,754 @@ +# Microsoft.AspNetCore.Mvc.ViewFeatures + +``` diff + { + namespace Microsoft.AspNetCore.Mvc { + public abstract class Controller : ControllerBase, IActionFilter, IAsyncActionFilter, IDisposable, IFilterMetadata { +- public virtual JsonResult Json(object data, JsonSerializerSettings serializerSettings); + ++ public virtual JsonResult Json(object data, object serializerSettings); + } + public class CookieTempDataProviderOptions { +- public string CookieName { get; set; } + +- public string Domain { get; set; } + +- public string Path { get; set; } + + } + public class MvcViewOptions : IEnumerable, IEnumerable { +- public bool AllowRenderingMaxLengthAttribute { get; set; } + +- public bool SuppressTempDataAttributePrefix { get; set; } + + } ++ public class PageRemoteAttribute : RemoteAttributeBase { ++ public PageRemoteAttribute(); ++ public string PageHandler { get; set; } ++ public string PageName { get; set; } ++ protected override string GetUrl(ClientModelValidationContext context); ++ } +- public class RemoteAttribute : ValidationAttribute, IClientModelValidator { ++ public class RemoteAttribute : RemoteAttributeBase { +- public string AdditionalFields { get; set; } + +- public string HttpMethod { get; set; } + +- protected RouteValueDictionary RouteData { get; } + +- public virtual void AddValidation(ClientModelValidationContext context); + +- public string FormatAdditionalFieldsForClientValidation(string property); + +- public override string FormatErrorMessage(string name); + +- public static string FormatPropertyForClientValidation(string property); + +- protected virtual string GetUrl(ClientModelValidationContext context); ++ protected override string GetUrl(ClientModelValidationContext context); +- public override bool IsValid(object value); + + } ++ public abstract class RemoteAttributeBase : ValidationAttribute, IClientModelValidator { ++ protected RemoteAttributeBase(); ++ public string AdditionalFields { get; set; } ++ public string HttpMethod { get; set; } ++ protected RouteValueDictionary RouteData { get; } ++ public virtual void AddValidation(ClientModelValidationContext context); ++ public string FormatAdditionalFieldsForClientValidation(string property); ++ public override string FormatErrorMessage(string name); ++ public static string FormatPropertyForClientValidation(string property); ++ protected abstract string GetUrl(ClientModelValidationContext context); ++ public override bool IsValid(object value); ++ } + } ++ namespace Microsoft.AspNetCore.Mvc.Diagnostics { ++ public sealed class AfterViewComponentEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterViewComponent"; ++ public AfterViewComponentEventData(ActionDescriptor actionDescriptor, ViewComponentContext viewComponentContext, IViewComponentResult viewComponentResult, object viewComponent); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public object ViewComponent { get; } ++ public ViewComponentContext ViewComponentContext { get; } ++ public IViewComponentResult ViewComponentResult { get; } ++ } ++ public sealed class AfterViewEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.AfterView"; ++ public AfterViewEventData(IView view, ViewContext viewContext); ++ protected override int Count { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public IView View { get; } ++ public ViewContext ViewContext { get; } ++ } ++ public sealed class BeforeViewComponentEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeViewComponent"; ++ public BeforeViewComponentEventData(ActionDescriptor actionDescriptor, ViewComponentContext viewComponentContext, object viewComponent); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public object ViewComponent { get; } ++ public ViewComponentContext ViewComponentContext { get; } ++ } ++ public sealed class BeforeViewEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.BeforeView"; ++ public BeforeViewEventData(IView view, ViewContext viewContext); ++ protected override int Count { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public IView View { get; } ++ public ViewContext ViewContext { get; } ++ } ++ public sealed class ViewComponentAfterViewExecuteEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.ViewComponentAfterViewExecute"; ++ public ViewComponentAfterViewExecuteEventData(ActionDescriptor actionDescriptor, ViewComponentContext viewComponentContext, IView view); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public IView View { get; } ++ public ViewComponentContext ViewComponentContext { get; } ++ } ++ public sealed class ViewComponentBeforeViewExecuteEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.ViewComponentBeforeViewExecute"; ++ public ViewComponentBeforeViewExecuteEventData(ActionDescriptor actionDescriptor, ViewComponentContext viewComponentContext, IView view); ++ public ActionDescriptor ActionDescriptor { get; } ++ protected override int Count { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public IView View { get; } ++ public ViewComponentContext ViewComponentContext { get; } ++ } ++ public sealed class ViewFoundEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.ViewFound"; ++ public ViewFoundEventData(ActionContext actionContext, bool isMainPage, ActionResult result, string viewName, IView view); ++ public ActionContext ActionContext { get; } ++ protected override int Count { get; } ++ public bool IsMainPage { get; } ++ public ActionResult Result { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public IView View { get; } ++ public string ViewName { get; } ++ } ++ public sealed class ViewNotFoundEventData : EventData { ++ public const string EventName = "Microsoft.AspNetCore.Mvc.ViewNotFound"; ++ public ViewNotFoundEventData(ActionContext actionContext, bool isMainPage, ActionResult result, string viewName, IEnumerable searchedLocations); ++ public ActionContext ActionContext { get; } ++ protected override int Count { get; } ++ public bool IsMainPage { get; } ++ public ActionResult Result { get; } ++ public IEnumerable SearchedLocations { get; } ++ protected override KeyValuePair this[int index] { get; } ++ public string ViewName { get; } ++ } ++ } + namespace Microsoft.AspNetCore.Mvc.Rendering { ++ public static class HtmlHelperRazorComponentExtensions { ++ public static Task RenderStaticComponentAsync(this IHtmlHelper htmlHelper) where TComponent : IComponent; ++ public static Task RenderStaticComponentAsync(this IHtmlHelper htmlHelper, object parameters) where TComponent : IComponent; ++ } + public interface IJsonHelper { +- IHtmlContent Serialize(object value, JsonSerializerSettings serializerSettings); + + } + } + namespace Microsoft.AspNetCore.Mvc.ViewComponents { +- public class DefaultViewComponentActivator : IViewComponentActivator { + { +- public DefaultViewComponentActivator(ITypeActivatorCache typeActivatorCache); + +- public virtual object Create(ViewComponentContext context); + +- public virtual void Release(ViewComponentContext context, object viewComponent); + +- } + public class DefaultViewComponentHelper : IViewComponentHelper, IViewContextAware { ++ public DefaultViewComponentHelper(IViewComponentDescriptorCollectionProvider descriptorProvider, HtmlEncoder htmlEncoder, IViewComponentSelector selector, IViewComponentInvokerFactory invokerFactory, IViewBufferScope viewBufferScope); +- public DefaultViewComponentHelper(IViewComponentDescriptorCollectionProvider descriptorProvider, HtmlEncoder htmlEncoder, IViewComponentSelector selector, IViewComponentInvokerFactory invokerFactory, IViewBufferScope viewBufferScope); + + } +- public class DefaultViewComponentInvoker : IViewComponentInvoker { + { +- public DefaultViewComponentInvoker(IViewComponentFactory viewComponentFactory, ViewComponentInvokerCache viewComponentInvokerCache, DiagnosticSource diagnosticSource, ILogger logger); + +- public Task InvokeAsync(ViewComponentContext context); + +- } +- public class DefaultViewComponentInvokerFactory : IViewComponentInvokerFactory { + { +- public DefaultViewComponentInvokerFactory(IViewComponentFactory viewComponentFactory, ViewComponentInvokerCache viewComponentInvokerCache, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory); + +- public IViewComponentInvoker CreateInstance(ViewComponentContext context); + +- } + } + namespace Microsoft.AspNetCore.Mvc.ViewFeatures { + public class CookieTempDataProvider : ITempDataProvider { +- public CookieTempDataProvider(IDataProtectionProvider dataProtectionProvider, ILoggerFactory loggerFactory, IOptions options); + ++ public CookieTempDataProvider(IDataProtectionProvider dataProtectionProvider, ILoggerFactory loggerFactory, IOptions options, TempDataSerializer tempDataSerializer); + } + public class DefaultValidationHtmlAttributeProvider : ValidationHtmlAttributeProvider { +- public DefaultValidationHtmlAttributeProvider(IOptions optionsAccessor, IModelMetadataProvider metadataProvider, ClientValidatorCache clientValidatorCache); + ++ public DefaultValidationHtmlAttributeProvider(IOptions optionsAccessor, IModelMetadataProvider metadataProvider, ClientValidatorCache clientValidatorCache); + } + public class HtmlHelper : IHtmlHelper, IViewContextAware { ++ public HtmlHelper(IHtmlGenerator htmlGenerator, ICompositeViewEngine viewEngine, IModelMetadataProvider metadataProvider, IViewBufferScope bufferScope, HtmlEncoder htmlEncoder, UrlEncoder urlEncoder); +- public HtmlHelper(IHtmlGenerator htmlGenerator, ICompositeViewEngine viewEngine, IModelMetadataProvider metadataProvider, IViewBufferScope bufferScope, HtmlEncoder htmlEncoder, UrlEncoder urlEncoder); + + } + public class HtmlHelper : HtmlHelper, IHtmlHelper, IHtmlHelper { ++ public HtmlHelper(IHtmlGenerator htmlGenerator, ICompositeViewEngine viewEngine, IModelMetadataProvider metadataProvider, IViewBufferScope bufferScope, HtmlEncoder htmlEncoder, UrlEncoder urlEncoder, ModelExpressionProvider modelExpressionProvider); +- public HtmlHelper(IHtmlGenerator htmlGenerator, ICompositeViewEngine viewEngine, IModelMetadataProvider metadataProvider, IViewBufferScope bufferScope, HtmlEncoder htmlEncoder, UrlEncoder urlEncoder, ExpressionTextCache expressionTextCache); + + } +- public class JsonHelper : IJsonHelper { + { +- public JsonHelper(JsonOutputFormatter jsonOutputFormatter, ArrayPool charPool); + +- public IHtmlContent Serialize(object value); + +- public IHtmlContent Serialize(object value, JsonSerializerSettings serializerSettings); + +- } + public class ModelExpressionProvider : IModelExpressionProvider { ++ public ModelExpressionProvider(IModelMetadataProvider modelMetadataProvider); +- public ModelExpressionProvider(IModelMetadataProvider modelMetadataProvider, ExpressionTextCache expressionTextCache); + ++ public ModelExpression CreateModelExpression(ViewDataDictionary viewData, string expression); ++ public string GetExpressionText(Expression> expression); + } + public class PartialViewResultExecutor : ViewExecutor, IActionResultExecutor { ++ public PartialViewResultExecutor(IOptions viewOptions, IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, ITempDataDictionaryFactory tempDataFactory, DiagnosticListener diagnosticListener, ILoggerFactory loggerFactory, IModelMetadataProvider modelMetadataProvider); +- public PartialViewResultExecutor(IOptions viewOptions, IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, ITempDataDictionaryFactory tempDataFactory, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory, IModelMetadataProvider modelMetadataProvider); + + } + public class SessionStateTempDataProvider : ITempDataProvider { +- public SessionStateTempDataProvider(); + ++ public SessionStateTempDataProvider(TempDataSerializer tempDataSerializer); + } + public class ViewComponentResultExecutor : IActionResultExecutor { ++ public ViewComponentResultExecutor(IOptions mvcHelperOptions, ILoggerFactory loggerFactory, HtmlEncoder htmlEncoder, IModelMetadataProvider modelMetadataProvider, ITempDataDictionaryFactory tempDataDictionaryFactory, IHttpResponseStreamWriterFactory writerFactory); + } +- public class ViewDataDictionaryControllerPropertyActivator : IControllerPropertyActivator ++ public class ViewDataDictionaryControllerPropertyActivator + public class ViewExecutor { ++ protected ViewExecutor(IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, DiagnosticListener diagnosticListener); +- protected ViewExecutor(IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, DiagnosticSource diagnosticSource); + ++ public ViewExecutor(IOptions viewOptions, IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, ITempDataDictionaryFactory tempDataFactory, DiagnosticListener diagnosticListener, IModelMetadataProvider modelMetadataProvider); +- public ViewExecutor(IOptions viewOptions, IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, ITempDataDictionaryFactory tempDataFactory, DiagnosticSource diagnosticSource, IModelMetadataProvider modelMetadataProvider); + ++ protected DiagnosticListener DiagnosticListener { get; } +- protected DiagnosticSource DiagnosticSource { get; } + + } + public class ViewResultExecutor : ViewExecutor, IActionResultExecutor { ++ public ViewResultExecutor(IOptions viewOptions, IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, ITempDataDictionaryFactory tempDataFactory, DiagnosticListener diagnosticListener, ILoggerFactory loggerFactory, IModelMetadataProvider modelMetadataProvider); +- public ViewResultExecutor(IOptions viewOptions, IHttpResponseStreamWriterFactory writerFactory, ICompositeViewEngine viewEngine, ITempDataDictionaryFactory tempDataFactory, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory, IModelMetadataProvider modelMetadataProvider); + + } + } ++ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers { ++ public interface IViewBufferScope { ++ TextWriter CreateWriter(TextWriter writer); ++ ViewBufferValue[] GetPage(int pageSize); ++ void ReturnSegment(ViewBufferValue[] segment); ++ } ++ public readonly struct ViewBufferValue { ++ public ViewBufferValue(IHtmlContent content); ++ public ViewBufferValue(string value); ++ public object Value { get; } ++ } ++ } ++ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure { ++ public abstract class TempDataSerializer { ++ protected TempDataSerializer(); ++ public virtual bool CanSerializeType(Type type); ++ public abstract IDictionary Deserialize(byte[] unprotectedData); ++ public abstract byte[] Serialize(IDictionary values); ++ } ++ } +- namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal { + { +- public class ArrayPoolBufferSource : ICharBufferSource { + { +- public ArrayPoolBufferSource(ArrayPool pool); + +- public char[] Rent(int bufferSize); + +- public void Return(char[] buffer); + +- } +- public class AutoValidateAntiforgeryTokenAuthorizationFilter : ValidateAntiforgeryTokenAuthorizationFilter { + { +- public AutoValidateAntiforgeryTokenAuthorizationFilter(IAntiforgery antiforgery, ILoggerFactory loggerFactory); + +- protected override bool ShouldValidate(AuthorizationFilterContext context); + +- } +- public class CharArrayBufferSource : ICharBufferSource { + { +- public static readonly CharArrayBufferSource Instance; + +- public CharArrayBufferSource(); + +- public char[] Rent(int bufferSize); + +- public void Return(char[] buffer); + +- } +- public static class DefaultDisplayTemplates { + { +- public static IHtmlContent BooleanTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent CollectionTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent DecimalTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent EmailAddressTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent HiddenInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent HtmlTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent ObjectTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent StringTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent UrlTemplate(IHtmlHelper htmlHelper); + +- } +- public static class DefaultEditorTemplates { + { +- public static IHtmlContent BooleanTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent CollectionTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent DateInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent DateTimeLocalInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent DateTimeOffsetTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent DecimalTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent EmailAddressInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent FileCollectionInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent FileInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent HiddenInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent MonthInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent MultilineTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent NumberInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent ObjectTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent PasswordTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent PhoneNumberInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent StringTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent TimeInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent UrlInputTemplate(IHtmlHelper htmlHelper); + +- public static IHtmlContent WeekInputTemplate(IHtmlHelper htmlHelper); + +- } +- public class DynamicViewData : DynamicObject { + { +- public DynamicViewData(Func viewDataFunc); + +- public override IEnumerable GetDynamicMemberNames(); + +- public override bool TryGetMember(GetMemberBinder binder, out object result); + +- public override bool TrySetMember(SetMemberBinder binder, object value); + +- } +- public static class ExpressionHelper { + { +- public static string GetExpressionText(LambdaExpression expression); + +- public static string GetExpressionText(LambdaExpression expression, ExpressionTextCache expressionTextCache); + +- public static string GetExpressionText(string expression); + +- public static bool IsSingleArgumentIndexer(Expression expression); + +- } +- public static class ExpressionMetadataProvider { + { +- public static ModelExplorer FromLambdaExpression(Expression> expression, ViewDataDictionary viewData, IModelMetadataProvider metadataProvider); + +- public static ModelExplorer FromStringExpression(string expression, ViewDataDictionary viewData, IModelMetadataProvider metadataProvider); + +- } +- public class ExpressionTextCache { + { +- public ExpressionTextCache(); + +- public ConcurrentDictionary Entries { get; } + +- } +- public class FormatWeekHelper { + { +- public FormatWeekHelper(); + +- public static string GetFormattedWeek(ModelExplorer modelExplorer); + +- } +- public interface ICharBufferSource { + { +- char[] Rent(int bufferSize); + +- void Return(char[] buffer); + +- } +- public interface ISaveTempDataCallback : IFilterMetadata { + { +- void OnTempDataSaving(ITempDataDictionary tempData); + +- } +- public interface IViewBufferScope { + { +- PagedBufferedTextWriter CreateWriter(TextWriter writer); + +- ViewBufferValue[] GetPage(int pageSize); + +- void ReturnSegment(ViewBufferValue[] segment); + +- } +- public interface IViewDataValuesProviderFeature { + { +- void ProvideViewDataValues(ViewDataDictionary viewData); + +- } +- public readonly struct LifecycleProperty { + { +- public LifecycleProperty(PropertyInfo propertyInfo, string key); + +- public string Key { get; } + +- public PropertyInfo PropertyInfo { get; } + +- public object GetValue(object instance); + +- public void SetValue(object instance, object value); + +- } +- public class MemoryPoolViewBufferScope : IDisposable, IViewBufferScope { + { +- public static readonly int MinimumSize; + +- public MemoryPoolViewBufferScope(ArrayPool viewBufferPool, ArrayPool charPool); + +- public PagedBufferedTextWriter CreateWriter(TextWriter writer); + +- public void Dispose(); + +- public ViewBufferValue[] GetPage(int pageSize); + +- public void ReturnSegment(ViewBufferValue[] segment); + +- } +- public class MvcViewOptionsSetup : IConfigureOptions { + { +- public MvcViewOptionsSetup(IOptions dataAnnotationLocalizationOptions, IValidationAttributeAdapterProvider validationAttributeAdapterProvider); + +- public MvcViewOptionsSetup(IOptions dataAnnotationOptions, IValidationAttributeAdapterProvider validationAttributeAdapterProvider, IStringLocalizerFactory stringLocalizerFactory); + +- public void Configure(MvcViewOptions options); + +- } +- public static class NameAndIdProvider { + { +- public static string CreateSanitizedId(ViewContext viewContext, string fullName, string invalidCharReplacement); + +- public static void GenerateId(ViewContext viewContext, TagBuilder tagBuilder, string fullName, string invalidCharReplacement); + +- public static string GetFullHtmlFieldName(ViewContext viewContext, string expression); + +- } +- public class NullView : IView { + { +- public static readonly NullView Instance; + +- public NullView(); + +- public string Path { get; } + +- public Task RenderAsync(ViewContext context); + +- } +- public class PagedBufferedTextWriter : TextWriter { + { +- public PagedBufferedTextWriter(ArrayPool pool, TextWriter inner); + +- public override Encoding Encoding { get; } + +- protected override void Dispose(bool disposing); + +- public override void Flush(); + +- public override Task FlushAsync(); + +- public override void Write(char value); + +- public override void Write(char[] buffer); + +- public override void Write(char[] buffer, int index, int count); + +- public override void Write(string value); + +- public override Task WriteAsync(char value); + +- public override Task WriteAsync(char[] buffer, int index, int count); + +- public override Task WriteAsync(string value); + +- } +- public class PagedCharBuffer : IDisposable { + { +- public const int PageSize = 1024; + +- public PagedCharBuffer(ICharBufferSource bufferSource); + +- public ICharBufferSource BufferSource { get; } + +- public int Length { get; } + +- public List Pages { get; } + +- public void Append(char value); + +- public void Append(char[] buffer, int index, int count); + +- public void Append(string value); + +- public void Clear(); + +- public void Dispose(); + +- } +- public class SaveTempDataFilter : IFilterMetadata, IResourceFilter, IResultFilter { + { +- public SaveTempDataFilter(ITempDataDictionaryFactory factory); + +- public void OnResourceExecuted(ResourceExecutedContext context); + +- public void OnResourceExecuting(ResourceExecutingContext context); + +- public void OnResultExecuted(ResultExecutedContext context); + +- public void OnResultExecuting(ResultExecutingContext context); + +- } +- public abstract class SaveTempDataPropertyFilterBase : IFilterMetadata, ISaveTempDataCallback { + { +- protected readonly ITempDataDictionaryFactory _tempDataFactory; + +- public SaveTempDataPropertyFilterBase(ITempDataDictionaryFactory tempDataFactory); + +- public IDictionary OriginalValues { get; } + +- public IReadOnlyList Properties { get; set; } + +- public object Subject { get; set; } + +- public static IReadOnlyList GetTempDataProperties(Type type, MvcViewOptions viewOptions); + +- public void OnTempDataSaving(ITempDataDictionary tempData); + +- protected void SetPropertyValues(ITempDataDictionary tempData); + +- } +- public class TempDataMvcOptionsSetup : IConfigureOptions { + { +- public TempDataMvcOptionsSetup(); + +- public void Configure(MvcOptions options); + +- } +- public class TempDataSerializer { + { +- public TempDataSerializer(); + +- public static bool CanSerializeType(Type typeToSerialize, out string errorMessage); + +- public IDictionary Deserialize(byte[] value); + +- public void EnsureObjectCanBeSerialized(object item); + +- public byte[] Serialize(IDictionary values); + +- } +- public class TemplateBuilder { + { +- public TemplateBuilder(IViewEngine viewEngine, IViewBufferScope bufferScope, ViewContext viewContext, ViewDataDictionary viewData, ModelExplorer modelExplorer, string htmlFieldName, string templateName, bool readOnly, object additionalViewData); + +- public IHtmlContent Build(); + +- } +- public class TemplateRenderer { + { +- public const string IEnumerableOfIFormFileName = "IEnumerable`IFormFile"; + +- public TemplateRenderer(IViewEngine viewEngine, IViewBufferScope bufferScope, ViewContext viewContext, ViewDataDictionary viewData, string templateName, bool readOnly); + +- public static IEnumerable GetTypeNames(ModelMetadata modelMetadata, Type fieldType); + +- public IHtmlContent Render(); + +- } +- public class ValidateAntiforgeryTokenAuthorizationFilter : IAntiforgeryPolicy, IAsyncAuthorizationFilter, IFilterMetadata { + { +- public ValidateAntiforgeryTokenAuthorizationFilter(IAntiforgery antiforgery, ILoggerFactory loggerFactory); + +- public Task OnAuthorizationAsync(AuthorizationFilterContext context); + +- protected virtual bool ShouldValidate(AuthorizationFilterContext context); + +- } +- public static class ValidationHelpers { + { +- public static string GetModelErrorMessageOrDefault(ModelError modelError); + +- public static string GetModelErrorMessageOrDefault(ModelError modelError, ModelStateEntry containingEntry, ModelExplorer modelExplorer); + +- public static IList GetModelStateList(ViewDataDictionary viewData, bool excludePropertyErrors); + +- } +- public class ViewBuffer : IHtmlContent, IHtmlContentBuilder, IHtmlContentContainer { + { +- public static readonly int PartialViewPageSize; + +- public static readonly int TagHelperPageSize; + +- public static readonly int ViewComponentPageSize; + +- public static readonly int ViewPageSize; + +- public ViewBuffer(IViewBufferScope bufferScope, string name, int pageSize); + +- public int Count { get; } + +- public ViewBufferPage this[int index] { get; } + +- public IHtmlContentBuilder Append(string unencoded); + +- public IHtmlContentBuilder AppendHtml(IHtmlContent content); + +- public IHtmlContentBuilder AppendHtml(string encoded); + +- public IHtmlContentBuilder Clear(); + +- public void CopyTo(IHtmlContentBuilder destination); + +- public void MoveTo(IHtmlContentBuilder destination); + +- public void WriteTo(TextWriter writer, HtmlEncoder encoder); + +- public Task WriteToAsync(TextWriter writer, HtmlEncoder encoder); + +- } +- public class ViewBufferPage { + { +- public ViewBufferPage(ViewBufferValue[] buffer); + +- public ViewBufferValue[] Buffer { get; } + +- public int Capacity { get; } + +- public int Count { get; set; } + +- public bool IsFull { get; } + +- public void Append(ViewBufferValue value); + +- } +- public class ViewBufferTextWriter : TextWriter { + { +- public ViewBufferTextWriter(ViewBuffer buffer, Encoding encoding); + +- public ViewBufferTextWriter(ViewBuffer buffer, Encoding encoding, HtmlEncoder htmlEncoder, TextWriter inner); + +- public ViewBuffer Buffer { get; } + +- public override Encoding Encoding { get; } + +- public bool IsBuffering { get; private set; } + +- public override void Flush(); + +- public override Task FlushAsync(); + +- public void Write(IHtmlContent value); + +- public void Write(IHtmlContentContainer value); + +- public override void Write(char value); + +- public override void Write(char[] buffer, int index, int count); + +- public override void Write(object value); + +- public override void Write(string value); + +- public override Task WriteAsync(char value); + +- public override Task WriteAsync(char[] buffer, int index, int count); + +- public override Task WriteAsync(string value); + +- public override void WriteLine(); + +- public override void WriteLine(object value); + +- public override void WriteLine(string value); + +- public override Task WriteLineAsync(); + +- public override Task WriteLineAsync(char value); + +- public override Task WriteLineAsync(char[] value, int start, int offset); + +- public override Task WriteLineAsync(string value); + +- } +- public readonly struct ViewBufferValue { + { +- public ViewBufferValue(IHtmlContent content); + +- public ViewBufferValue(string value); + +- public object Value { get; } + +- } +- public class ViewComponentInvokerCache { + { +- public ViewComponentInvokerCache(IViewComponentDescriptorCollectionProvider collectionProvider); + +- } +- public static class ViewDataAttributePropertyProvider { + { +- public static IReadOnlyList GetViewDataProperties(Type type); + +- } +- public static class ViewDataDictionaryFactory { + { +- public static Func CreateFactory(TypeInfo modelType); + +- public static Func CreateNestedFactory(TypeInfo modelType); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.WebApiCompatShim.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.WebApiCompatShim.md new file mode 100644 index 00000000..d3e292bb --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.WebApiCompatShim.md @@ -0,0 +1,423 @@ +# Microsoft.AspNetCore.Mvc.WebApiCompatShim + +``` diff + { + { +- namespace Microsoft.AspNetCore.Builder { + { +- public static class WebApiCompatShimRouteBuilderExtensions { + { +- public static IRouteBuilder MapWebApiRoute(this IRouteBuilder routeCollectionBuilder, string name, string template); + +- public static IRouteBuilder MapWebApiRoute(this IRouteBuilder routeCollectionBuilder, string name, string template, object defaults); + +- public static IRouteBuilder MapWebApiRoute(this IRouteBuilder routeCollectionBuilder, string name, string template, object defaults, object constraints); + +- public static IRouteBuilder MapWebApiRoute(this IRouteBuilder routeCollectionBuilder, string name, string template, object defaults, object constraints, object dataTokens); + +- } +- } +- namespace Microsoft.AspNetCore.Mvc.ModelBinding { + { +- public interface IOptionalBinderMetadata { + { +- bool IsOptional { get; } + +- } +- } +- namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim { + { +- public static class FormDataCollectionExtensions { + { +- public static IEnumerable> GetJQueryNameValuePairs(this FormDataCollection formData); + +- public static string NormalizeJQueryToMvc(string key); + +- } +- public class HttpRequestMessageFeature : IHttpRequestMessageFeature { + { +- public HttpRequestMessageFeature(HttpContext httpContext); + +- public HttpRequestMessage HttpRequestMessage { get; set; } + +- } +- public static class HttpRequestMessageHttpContextExtensions { + { +- public static HttpRequestMessage GetHttpRequestMessage(this HttpContext httpContext); + +- } +- public class HttpRequestMessageModelBinder : IModelBinder { + { +- public HttpRequestMessageModelBinder(); + +- public Task BindModelAsync(ModelBindingContext bindingContext); + +- } +- public class HttpRequestMessageModelBinderProvider : IModelBinderProvider { + { +- public HttpRequestMessageModelBinderProvider(); + +- public IModelBinder GetBinder(ModelBinderProviderContext context); + +- } +- public class HttpResponseExceptionActionFilter : IActionFilter, IFilterMetadata, IOrderedFilter { + { +- public HttpResponseExceptionActionFilter(); + +- public int Order { get; set; } + +- public void OnActionExecuted(ActionExecutedContext context); + +- public void OnActionExecuting(ActionExecutingContext context); + +- } +- public class HttpResponseMessageOutputFormatter : IOutputFormatter { + { +- public HttpResponseMessageOutputFormatter(); + +- public bool CanWriteResult(OutputFormatterCanWriteContext context); + +- public Task WriteAsync(OutputFormatterWriteContext context); + +- } +- public interface IHttpRequestMessageFeature { + { +- HttpRequestMessage HttpRequestMessage { get; set; } + +- } +- public interface IUseWebApiActionConventions + +- public interface IUseWebApiOverloading + +- public interface IUseWebApiParameterConventions + +- public interface IUseWebApiRoutes + +- public class OverloadActionConstraint : IActionConstraint, IActionConstraintMetadata { + { +- public OverloadActionConstraint(); + +- public int Order { get; } + +- public bool Accept(ActionConstraintContext context); + +- } +- public class UseWebApiActionConventionsAttribute : Attribute, IUseWebApiActionConventions { + { +- public UseWebApiActionConventionsAttribute(); + +- } +- public class UseWebApiOverloadingAttribute : Attribute, IUseWebApiOverloading { + { +- public UseWebApiOverloadingAttribute(); + +- } +- public class UseWebApiParameterConventionsAttribute : Attribute, IUseWebApiParameterConventions { + { +- public UseWebApiParameterConventionsAttribute(); + +- } +- public class UseWebApiRoutesAttribute : Attribute, IUseWebApiRoutes { + { +- public UseWebApiRoutesAttribute(); + +- } +- public class WebApiActionConventionsApplicationModelConvention : IControllerModelConvention { + { +- public WebApiActionConventionsApplicationModelConvention(); + +- public void Apply(ControllerModel controller); + +- } +- public class WebApiCompatShimOptions { + { +- public WebApiCompatShimOptions(); + +- public MediaTypeFormatterCollection Formatters { get; set; } + +- } +- public class WebApiCompatShimOptionsSetup : IConfigureOptions, IConfigureOptions { + { +- public static readonly string DefaultAreaName; + +- public WebApiCompatShimOptionsSetup(); + +- public string Name { get; set; } + +- public void Configure(MvcOptions options); + +- public void Configure(WebApiCompatShimOptions options); + +- } +- public class WebApiOverloadingApplicationModelConvention : IActionModelConvention { + { +- public WebApiOverloadingApplicationModelConvention(); + +- public void Apply(ActionModel action); + +- } +- public class WebApiParameterConventionsApplicationModelConvention : IActionModelConvention { + { +- public WebApiParameterConventionsApplicationModelConvention(); + +- public void Apply(ActionModel action); + +- } +- public class WebApiRoutesApplicationModelConvention : IControllerModelConvention { + { +- public WebApiRoutesApplicationModelConvention(string area); + +- public void Apply(ControllerModel controller); + +- } +- } +- namespace Microsoft.Extensions.DependencyInjection { + { +- public static class WebApiCompatShimMvcBuilderExtensions { + { +- public static IMvcBuilder AddWebApiConventions(this IMvcBuilder builder); + +- } +- } +- namespace System.Net.Http { + { +- public static class HttpRequestMessageExtensions { + { +- public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, ModelStateDictionary modelState); + +- public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, Exception exception); + +- public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, string message); + +- public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, string message, Exception exception); + +- public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, HttpError error); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value, IEnumerable formatters); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value, MediaTypeFormatter formatter); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value, MediaTypeFormatter formatter, MediaTypeHeaderValue mediaType); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value, MediaTypeFormatter formatter, string mediaType); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value, MediaTypeHeaderValue mediaType); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, HttpStatusCode statusCode, T value, string mediaType); + +- public static HttpResponseMessage CreateResponse(this HttpRequestMessage request, T value); + +- } +- } +- namespace System.Web.Http { + { +- public abstract class ApiController : IDisposable { + { +- protected ApiController(); + +- public ActionContext ActionContext { get; } + +- public HttpContext Context { get; } + +- public ControllerContext ControllerContext { get; set; } + +- public IModelMetadataProvider MetadataProvider { get; set; } + +- public ModelStateDictionary ModelState { get; } + +- public IObjectModelValidator ObjectValidator { get; set; } + +- public HttpRequestMessage Request { get; set; } + +- public IUrlHelper Url { get; set; } + +- public IPrincipal User { get; } + +- public virtual BadRequestResult BadRequest(); + +- public virtual InvalidModelStateResult BadRequest(ModelStateDictionary modelState); + +- public virtual BadRequestErrorMessageResult BadRequest(string message); + +- public virtual ConflictResult Conflict(); + +- public virtual NegotiatedContentResult Content(HttpStatusCode statusCode, T value); + +- public virtual CreatedResult Created(string location, object content); + +- public virtual CreatedResult Created(Uri uri, object content); + +- public virtual CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, object content); + +- public void Dispose(); + +- protected virtual void Dispose(bool disposing); + +- public virtual InternalServerErrorResult InternalServerError(); + +- public virtual ExceptionResult InternalServerError(Exception exception); + +- public virtual JsonResult Json(T content); + +- public virtual JsonResult Json(T content, JsonSerializerSettings serializerSettings); + +- public virtual JsonResult Json(T content, JsonSerializerSettings serializerSettings, Encoding encoding); + +- public virtual NotFoundResult NotFound(); + +- public virtual OkResult Ok(); + +- public virtual OkObjectResult Ok(T content); + +- public virtual RedirectResult Redirect(string location); + +- public virtual RedirectResult Redirect(Uri location); + +- public virtual RedirectToRouteResult RedirectToRoute(string routeName, object routeValues); + +- public virtual ResponseMessageResult ResponseMessage(HttpResponseMessage response); + +- public virtual StatusCodeResult StatusCode(HttpStatusCode status); + +- public void Validate(TEntity entity); + +- public void Validate(TEntity entity, string keyPrefix); + +- } +- public class BadRequestErrorMessageResult : ObjectResult { + { +- public BadRequestErrorMessageResult(string message); + +- public string Message { get; private set; } + +- public override Task ExecuteResultAsync(ActionContext context); + +- } +- public class ConflictResult : StatusCodeResult { + { +- public ConflictResult(); + +- } +- public class ExceptionResult : ObjectResult { + { +- public ExceptionResult(Exception exception, bool includeErrorDetail); + +- public Exception Exception { get; private set; } + +- public bool IncludeErrorDetail { get; private set; } + +- public override Task ExecuteResultAsync(ActionContext context); + +- } +- public class FromUriAttribute : Attribute, IBindingSourceMetadata, IModelNameProvider, IOptionalBinderMetadata { + { +- public FromUriAttribute(); + +- public BindingSource BindingSource { get; } + +- public bool IsOptional { get; set; } + +- public string Name { get; set; } + +- } +- public sealed class HttpError : Dictionary, IXmlSerializable { + { +- public HttpError(); + +- public HttpError(ModelStateDictionary modelState, bool includeErrorDetail); + +- public HttpError(Exception exception, bool includeErrorDetail); + +- public HttpError(string message); + +- public string ExceptionMessage { get; set; } + +- public string ExceptionType { get; set; } + +- public HttpError InnerException { get; } + +- public string Message { get; set; } + +- public string MessageDetail { get; set; } + +- public HttpError ModelState { get; } + +- public string StackTrace { get; set; } + +- public TValue GetPropertyValue(string key); + +- XmlSchema System.Xml.Serialization.IXmlSerializable.GetSchema(); + +- void System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader); + +- void System.Xml.Serialization.IXmlSerializable.WriteXml(XmlWriter writer); + +- } +- public static class HttpErrorKeys { + { +- public static readonly string ErrorCodeKey; + +- public static readonly string ExceptionMessageKey; + +- public static readonly string ExceptionTypeKey; + +- public static readonly string InnerExceptionKey; + +- public static readonly string MessageDetailKey; + +- public static readonly string MessageKey; + +- public static readonly string MessageLanguageKey; + +- public static readonly string ModelStateKey; + +- public static readonly string StackTraceKey; + +- } +- public class HttpResponseException : Exception { + { +- public HttpResponseException(HttpResponseMessage response); + +- public HttpResponseException(HttpStatusCode statusCode); + +- public HttpResponseMessage Response { get; private set; } + +- } +- public class InternalServerErrorResult : StatusCodeResult { + { +- public InternalServerErrorResult(); + +- } +- public class InvalidModelStateResult : ObjectResult { + { +- public InvalidModelStateResult(ModelStateDictionary modelState, bool includeErrorDetail); + +- public bool IncludeErrorDetail { get; private set; } + +- public ModelStateDictionary ModelState { get; private set; } + +- public override Task ExecuteResultAsync(ActionContext context); + +- } +- public class NegotiatedContentResult : ObjectResult { + { +- public NegotiatedContentResult(HttpStatusCode statusCode, T content); + +- public T Content { get; private set; } + +- public override Task ExecuteResultAsync(ActionContext context); + +- } +- public class ResponseMessageResult : ObjectResult { + { +- public ResponseMessageResult(HttpResponseMessage response); + +- public HttpResponseMessage Response { get; private set; } + +- } +- } +-} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.md new file mode 100644 index 00000000..f481ab2b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Mvc.md @@ -0,0 +1,17 @@ +# Microsoft.AspNetCore.Mvc + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection { + public static class MvcServiceCollectionExtensions { ++ public static IMvcBuilder AddControllers(this IServiceCollection services); ++ public static IMvcBuilder AddControllers(this IServiceCollection services, Action configure); ++ public static IMvcBuilder AddControllersWithViews(this IServiceCollection services); ++ public static IMvcBuilder AddControllersWithViews(this IServiceCollection services, Action configure); ++ public static IMvcBuilder AddRazorPages(this IServiceCollection services); ++ public static IMvcBuilder AddRazorPages(this IServiceCollection services, Action configure); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Owin.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Owin.md new file mode 100644 index 00000000..36dd3a97 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Owin.md @@ -0,0 +1,22 @@ +# Microsoft.AspNetCore.Owin + +``` diff + { + namespace Microsoft.AspNetCore.Owin { +- public class OwinFeatureCollection : IEnumerable, IEnumerable>, IFeatureCollection, IHttpAuthenticationFeature, IHttpConnectionFeature, IHttpRequestFeature, IHttpRequestIdentifierFeature, IHttpRequestLifetimeFeature, IHttpResponseFeature, IHttpSendFileFeature, IHttpWebSocketFeature, IOwinEnvironmentFeature, ITlsConnectionFeature { ++ public class OwinFeatureCollection : IEnumerable, IEnumerable>, IFeatureCollection, IHttpAuthenticationFeature, IHttpConnectionFeature, IHttpRequestFeature, IHttpRequestIdentifierFeature, IHttpRequestLifetimeFeature, IHttpResponseBodyFeature, IHttpResponseFeature, IHttpWebSocketFeature, IOwinEnvironmentFeature, ITlsConnectionFeature { +- IAuthenticationHandler Microsoft.AspNetCore.Http.Features.Authentication.IHttpAuthenticationFeature.Handler { get; set; } + ++ Stream Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature.Stream { get; } ++ PipeWriter Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature.Writer { get; } ++ Task Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature.CompleteAsync(); ++ void Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature.DisableBuffering(); ++ Task Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature.SendFileAsync(string path, long offset, long? length, CancellationToken cancellation); ++ Task Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature.StartAsync(CancellationToken cancellationToken); +- Task Microsoft.AspNetCore.Http.Features.IHttpSendFileFeature.SendFileAsync(string path, long offset, long? length, CancellationToken cancellation); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Razor.Language.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Razor.Language.md new file mode 100644 index 00000000..fdff47fa --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Razor.Language.md @@ -0,0 +1,426 @@ +# Microsoft.AspNetCore.Razor.Language + +``` diff + { + namespace Microsoft.AspNetCore.Razor.Language { + public abstract class BoundAttributeDescriptor : IEquatable { ++ public virtual IReadOnlyList BoundAttributeParameters { get; protected set; } ++ public bool CaseSensitive { get; protected set; } + } + public abstract class BoundAttributeDescriptorBuilder { ++ public virtual IReadOnlyList BoundAttributeParameters { get; } ++ public virtual void BindAttributeParameter(Action configure); + } + public static class BoundAttributeDescriptorBuilderExtensions { ++ public static string GetPropertyName(this BoundAttributeParameterDescriptorBuilder builder); ++ public static bool IsDirectiveAttribute(this BoundAttributeDescriptorBuilder builder); ++ public static void SetPropertyName(this BoundAttributeParameterDescriptorBuilder builder, string propertyName); + } + public static class BoundAttributeDescriptorExtensions { ++ public static string GetPropertyName(this BoundAttributeParameterDescriptor parameter); ++ public static bool IsDefaultKind(this BoundAttributeParameterDescriptor parameter); ++ public static bool IsDirectiveAttribute(this BoundAttributeDescriptor attribute); + } ++ public abstract class BoundAttributeParameterDescriptor : IEquatable { ++ protected BoundAttributeParameterDescriptor(string kind); ++ public bool CaseSensitive { get; protected set; } ++ public IReadOnlyList Diagnostics { get; protected set; } ++ public string DisplayName { get; protected set; } ++ public string Documentation { get; protected set; } ++ public bool HasErrors { get; } ++ public bool IsBooleanProperty { get; protected set; } ++ public bool IsEnum { get; protected set; } ++ public bool IsStringProperty { get; protected set; } ++ public string Kind { get; } ++ public IReadOnlyDictionary Metadata { get; protected set; } ++ public string Name { get; protected set; } ++ public string TypeName { get; protected set; } ++ public bool Equals(BoundAttributeParameterDescriptor other); ++ public override bool Equals(object obj); ++ public override int GetHashCode(); ++ public override string ToString(); ++ } ++ public abstract class BoundAttributeParameterDescriptorBuilder { ++ protected BoundAttributeParameterDescriptorBuilder(); ++ public abstract RazorDiagnosticCollection Diagnostics { get; } ++ public abstract string DisplayName { get; set; } ++ public abstract string Documentation { get; set; } ++ public abstract bool IsEnum { get; set; } ++ public abstract IDictionary Metadata { get; } ++ public abstract string Name { get; set; } ++ public abstract string TypeName { get; set; } ++ } + public static class DirectiveDescriptorBuilderExtensions { ++ public static IDirectiveDescriptorBuilder AddAttributeToken(this IDirectiveDescriptorBuilder builder); ++ public static IDirectiveDescriptorBuilder AddAttributeToken(this IDirectiveDescriptorBuilder builder, string name, string description); ++ public static IDirectiveDescriptorBuilder AddOptionalAttributeToken(this IDirectiveDescriptorBuilder builder); ++ public static IDirectiveDescriptorBuilder AddOptionalAttributeToken(this IDirectiveDescriptorBuilder builder, string name, string description); + } + public enum DirectiveTokenKind { ++ Attribute = 4, + } + public abstract class DocumentClassifierPassBase : IntermediateNodePassBase, IRazorDocumentClassifierPass, IRazorEngineFeature, IRazorFeature { ++ protected IReadOnlyList TargetExtensions { get; private set; } ++ protected virtual CodeTarget CreateTarget(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options); + } ++ public static class FileKinds { ++ public static readonly string Component; ++ public static readonly string ComponentImport; ++ public static readonly string Legacy; ++ public static string GetComponentFileKindFromFilePath(string filePath); ++ public static string GetFileKindFromFilePath(string filePath); ++ public static bool IsComponent(string fileKind); ++ public static bool IsComponentImport(string fileKind); ++ } +- public sealed class ItemCollection : ICollection>, IEnumerable, IEnumerable> { ++ public sealed class ItemCollection : ICollection, ICollection>, IEnumerable, IEnumerable> { +- int System.Collections.Generic.ICollection>.Count { get; } + +- bool System.Collections.Generic.ICollection>.IsReadOnly { get; } + ++ bool System.Collections.ICollection.IsSynchronized { get; } ++ object System.Collections.ICollection.SyncRoot { get; } ++ void System.Collections.ICollection.CopyTo(Array array, int index); + } + public static class RazorCodeDocumentExtensions { ++ public static string GetFileKind(this RazorCodeDocument document); ++ public static void SetFileKind(this RazorCodeDocument document, string fileKind); ++ public static bool TryComputeNamespace(this RazorCodeDocument document, bool fallbackToRootNamespace, out string @namespace); + } + public abstract class RazorCodeGenerationOptions { ++ public virtual string RootNamespace { get; } ++ public virtual bool SuppressNullabilityEnforcement { get; } ++ public virtual bool SuppressPrimaryMethodBody { get; protected set; } + } + public abstract class RazorCodeGenerationOptionsBuilder { ++ public virtual string FileKind { get; } ++ public virtual string RootNamespace { get; set; } ++ public virtual bool SuppressNullabilityEnforcement { get; set; } ++ public virtual bool SuppressPrimaryMethodBody { get; set; } + } + public abstract class RazorCSharpDocument { +- public static RazorCSharpDocument Create(string generatedCode, RazorCodeGenerationOptions options, IEnumerable diagnostics, IEnumerable sourceMappings); + ++ public static RazorCSharpDocument Create(string generatedCode, RazorCodeGenerationOptions options, IEnumerable diagnostics, IEnumerable sourceMappings, IEnumerable linePragmas); + } + public sealed class RazorDiagnosticCollection : ICollection, IEnumerable, IEnumerable, IList { ++ public void AddRange(RazorDiagnosticCollection items); ++ public void AddRange(IEnumerable items); + } + public enum RazorDiagnosticSeverity { ++ Warning = 2, + } + public sealed class RazorLanguageVersion : IComparable, IEquatable { ++ public static readonly RazorLanguageVersion Version_3_0; + } + public abstract class RazorParserOptions { ++ public static RazorParserOptions Create(Action configure, string fileKind); ++ public static RazorParserOptions CreateDesignTime(Action configure, string fileKind); + } + public abstract class RazorParserOptionsBuilder { ++ public virtual string FileKind { get; } + } + public abstract class RazorProject { +- public static RazorProject Create(string rootDirectoryPath); + ++ public abstract RazorProjectItem GetItem(string path, string fileKind); + } + public abstract class RazorProjectEngine { ++ public virtual RazorCodeDocument Process(RazorSourceDocument source, string fileKind, IReadOnlyList importSources, IReadOnlyList tagHelpers); ++ public virtual RazorCodeDocument ProcessDeclarationOnly(RazorProjectItem projectItem); ++ public virtual RazorCodeDocument ProcessDeclarationOnly(RazorSourceDocument source, string fileKind, IReadOnlyList importSources, IReadOnlyList tagHelpers); ++ public virtual RazorCodeDocument ProcessDesignTime(RazorSourceDocument source, string fileKind, IReadOnlyList importSources, IReadOnlyList tagHelpers); + } + public static class RazorProjectEngineBuilderExtensions { ++ public static RazorProjectEngineBuilder AddDirective(this RazorProjectEngineBuilder builder, DirectiveDescriptor directive, params string[] fileKinds); ++ public static RazorProjectEngineBuilder SetRootNamespace(this RazorProjectEngineBuilder builder, string rootNamespace); + } + public abstract class RazorProjectFileSystem : RazorProject { +- public static new RazorProjectFileSystem Create(string rootDirectoryPath); ++ public static RazorProjectFileSystem Create(string rootDirectoryPath); + } + public abstract class RazorProjectItem { ++ public virtual string FileKind { get; } + } +- public class RazorTemplateEngine { + { +- public RazorTemplateEngine(RazorEngine engine, RazorProject project); + +- public RazorEngine Engine { get; } + +- public RazorTemplateEngineOptions Options { get; set; } + +- public RazorProject Project { get; } + +- public virtual RazorCodeDocument CreateCodeDocument(RazorProjectItem projectItem); + +- public virtual RazorCodeDocument CreateCodeDocument(string path); + +- public virtual RazorCSharpDocument GenerateCode(RazorCodeDocument codeDocument); + +- public RazorCSharpDocument GenerateCode(RazorProjectItem projectItem); + +- public RazorCSharpDocument GenerateCode(string path); + +- public virtual IEnumerable GetImportItems(RazorProjectItem projectItem); + +- public IEnumerable GetImportItems(string path); + +- public virtual IEnumerable GetImports(RazorProjectItem projectItem); + +- public IEnumerable GetImports(string path); + +- } +- public sealed class RazorTemplateEngineOptions { + { +- public RazorTemplateEngineOptions(); + +- public RazorSourceDocument DefaultImports { get; set; } + +- public string ImportsFileName { get; set; } + +- } + public abstract class RequiredAttributeDescriptor : IEquatable { ++ public bool CaseSensitive { get; protected set; } ++ public IReadOnlyDictionary Metadata { get; protected set; } + } + public abstract class RequiredAttributeDescriptorBuilder { ++ public virtual IDictionary Metadata { get; } + } ++ public static class RequiredAttributeDescriptorBuilderExtensions ++ public static class RequiredAttributeDescriptorExtensions { ++ public static bool IsDirectiveAttribute(this RequiredAttributeDescriptor descriptor); ++ } + public sealed class TagHelperBinding { ++ public bool IsAttributeMatch { get; } ++ public IReadOnlyDictionary> Mappings { get; } + } + public static class TagHelperConventions { ++ public static readonly string ComponentKind; + } + public abstract class TagHelperDescriptor : IEquatable { ++ public bool CaseSensitive { get; protected set; } + } + public abstract class TagHelperDescriptorBuilder { ++ public virtual bool CaseSensitive { get; set; } + } + public static class TagHelperDescriptorExtensions { ++ public static bool IsComponentOrChildContentTagHelper(this TagHelperDescriptor tagHelper); + } + public static class TagHelperMetadata { + public static class Common { ++ public static readonly string ClassifyAttributesOnly; + } + } + public abstract class TagMatchingRuleDescriptor : IEquatable { ++ public bool CaseSensitive { get; protected set; } + } + } + namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { + public abstract class CodeRenderingContext { ++ public virtual void AddLinePragma(LinePragma linePragma); + } + public abstract class DocumentWriter { +- public DocumentWriter Create(CodeTarget codeTarget, RazorCodeGenerationOptions options); + + } + public abstract class IntermediateNodeWriter { ++ public virtual void WriteComponent(CodeRenderingContext context, ComponentIntermediateNode node); ++ public virtual void WriteComponentAttribute(CodeRenderingContext context, ComponentAttributeIntermediateNode node); ++ public virtual void WriteComponentChildContent(CodeRenderingContext context, ComponentChildContentIntermediateNode node); ++ public virtual void WriteComponentTypeArgument(CodeRenderingContext context, ComponentTypeArgumentIntermediateNode node); ++ public virtual void WriteComponentTypeInferenceMethod(CodeRenderingContext context, ComponentTypeInferenceMethodIntermediateNode node); ++ public virtual void WriteMarkupBlock(CodeRenderingContext context, MarkupBlockIntermediateNode node); ++ public virtual void WriteMarkupElement(CodeRenderingContext context, MarkupElementIntermediateNode node); ++ public virtual void WriteReferenceCapture(CodeRenderingContext context, ReferenceCaptureIntermediateNode node); ++ public virtual void WriteSetKey(CodeRenderingContext context, SetKeyIntermediateNode node); ++ public virtual void WriteSplat(CodeRenderingContext context, SplatIntermediateNode node); + } ++ public readonly struct LinePragma : IEquatable { ++ public LinePragma(int startLineIndex, int lineCount, string filePath); ++ public int EndLineIndex { get; } ++ public string FilePath { get; } ++ public int LineCount { get; } ++ public int StartLineIndex { get; } ++ public bool Equals(LinePragma other); ++ public override bool Equals(object obj); ++ public override int GetHashCode(); ++ public override string ToString(); ++ } + } ++ namespace Microsoft.AspNetCore.Razor.Language.Components { ++ public static class ComponentCodeDirective { ++ public static readonly DirectiveDescriptor Directive; ++ public static void Register(RazorProjectEngineBuilder builder); ++ } ++ } + namespace Microsoft.AspNetCore.Razor.Language.Extensions { ++ public static class NamespaceDirective { ++ public static readonly DirectiveDescriptor Directive; ++ public static RazorProjectEngineBuilder Register(RazorProjectEngineBuilder builder); ++ } + } + namespace Microsoft.AspNetCore.Razor.Language.Intermediate { ++ public sealed class ComponentAttributeIntermediateNode : IntermediateNode { ++ public ComponentAttributeIntermediateNode(); ++ public ComponentAttributeIntermediateNode(TagHelperDirectiveAttributeIntermediateNode directiveAttributeNode); ++ public ComponentAttributeIntermediateNode(TagHelperHtmlAttributeIntermediateNode attributeNode); ++ public ComponentAttributeIntermediateNode(TagHelperPropertyIntermediateNode propertyNode); ++ public string AttributeName { get; set; } ++ public AttributeStructure AttributeStructure { get; set; } ++ public BoundAttributeDescriptor BoundAttribute { get; set; } ++ public override IntermediateNodeCollection Children { get; } ++ public string GloballyQualifiedTypeName { get; set; } ++ public string PropertyName { get; set; } ++ public TagHelperDescriptor TagHelper { get; set; } ++ public string TypeName { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ public bool TryParseEventCallbackTypeArgument(out string argument); ++ } ++ public sealed class ComponentChildContentIntermediateNode : IntermediateNode { ++ public ComponentChildContentIntermediateNode(); ++ public string AttributeName { get; } ++ public BoundAttributeDescriptor BoundAttribute { get; set; } ++ public override IntermediateNodeCollection Children { get; } ++ public bool IsParameterized { get; } ++ public string ParameterName { get; set; } ++ public string TypeName { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class ComponentIntermediateNode : IntermediateNode { ++ public ComponentIntermediateNode(); ++ public IEnumerable Attributes { get; } ++ public IEnumerable Captures { get; } ++ public string ChildContentParameterName { get; set; } ++ public IEnumerable ChildContents { get; } ++ public override IntermediateNodeCollection Children { get; } ++ public TagHelperDescriptor Component { get; set; } ++ public IEnumerable SetKeys { get; } ++ public IEnumerable Splats { get; } ++ public string TagName { get; set; } ++ public IEnumerable TypeArguments { get; } ++ public ComponentTypeInferenceMethodIntermediateNode TypeInferenceNode { get; set; } ++ public string TypeName { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class ComponentTypeArgumentIntermediateNode : IntermediateNode { ++ public ComponentTypeArgumentIntermediateNode(TagHelperPropertyIntermediateNode propertyNode); ++ public BoundAttributeDescriptor BoundAttribute { get; set; } ++ public override IntermediateNodeCollection Children { get; } ++ public TagHelperDescriptor TagHelper { get; set; } ++ public string TypeParameterName { get; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class ComponentTypeInferenceMethodIntermediateNode : IntermediateNode { ++ public ComponentTypeInferenceMethodIntermediateNode(); ++ public override IntermediateNodeCollection Children { get; } ++ public ComponentIntermediateNode Component { get; set; } ++ public string FullTypeName { get; internal set; } ++ public string MethodName { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } + public static class DocumentIntermediateNodeExtensions { ++ public static IReadOnlyList FindDescendantReferences(this DocumentIntermediateNode document) where TNode : IntermediateNode; + } + public sealed class FieldDeclarationIntermediateNode : MemberDeclarationIntermediateNode { ++ public IList SuppressWarnings { get; } + } + public sealed class HtmlAttributeIntermediateNode : IntermediateNode { ++ public string EventUpdatesAttributeName { get; set; } + } + public sealed class IntermediateNodeCollection : ICollection, IEnumerable, IEnumerable, IList { ++ public void AddRange(IntermediateNodeCollection items); ++ public void AddRange(IEnumerable items); + } + public abstract class IntermediateNodeVisitor { ++ public virtual void VisitComponent(ComponentIntermediateNode node); ++ public virtual void VisitComponentAttribute(ComponentAttributeIntermediateNode node); ++ public virtual void VisitComponentChildContent(ComponentChildContentIntermediateNode node); ++ public virtual void VisitComponentTypeArgument(ComponentTypeArgumentIntermediateNode node); ++ public virtual void VisitComponentTypeInferenceMethod(ComponentTypeInferenceMethodIntermediateNode node); ++ public virtual void VisitMarkupBlock(MarkupBlockIntermediateNode node); ++ public virtual void VisitMarkupElement(MarkupElementIntermediateNode node); ++ public virtual void VisitReferenceCapture(ReferenceCaptureIntermediateNode node); ++ public virtual void VisitSetKey(SetKeyIntermediateNode node); ++ public virtual void VisitSplat(SplatIntermediateNode node); ++ public virtual void VisitTagHelperDirectiveAttribute(TagHelperDirectiveAttributeIntermediateNode node); ++ public virtual void VisitTagHelperDirectiveAttributeParameter(TagHelperDirectiveAttributeParameterIntermediateNode node); + } ++ public sealed class MarkupBlockIntermediateNode : IntermediateNode { ++ public MarkupBlockIntermediateNode(); ++ public override IntermediateNodeCollection Children { get; } ++ public string Content { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class MarkupElementIntermediateNode : IntermediateNode { ++ public MarkupElementIntermediateNode(); ++ public IEnumerable Attributes { get; } ++ public IEnumerable Body { get; } ++ public IEnumerable Captures { get; } ++ public override IntermediateNodeCollection Children { get; } ++ public IEnumerable SetKeys { get; } ++ public string TagName { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class ReferenceCaptureIntermediateNode : IntermediateNode { ++ public ReferenceCaptureIntermediateNode(IntermediateToken identifierToken); ++ public ReferenceCaptureIntermediateNode(IntermediateToken identifierToken, string componentCaptureTypeName); ++ public override IntermediateNodeCollection Children { get; } ++ public string ComponentCaptureTypeName { get; set; } ++ public string FieldTypeName { get; } ++ public IntermediateToken IdentifierToken { get; } ++ public bool IsComponentCapture { get; } ++ public string TypeName { get; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class SetKeyIntermediateNode : IntermediateNode { ++ public SetKeyIntermediateNode(IntermediateToken keyValueToken); ++ public override IntermediateNodeCollection Children { get; } ++ public IntermediateToken KeyValueToken { get; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class SplatIntermediateNode : IntermediateNode { ++ public SplatIntermediateNode(); ++ public override IntermediateNodeCollection Children { get; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class TagHelperDirectiveAttributeIntermediateNode : IntermediateNode { ++ public TagHelperDirectiveAttributeIntermediateNode(); ++ public string AttributeName { get; set; } ++ public AttributeStructure AttributeStructure { get; set; } ++ public BoundAttributeDescriptor BoundAttribute { get; set; } ++ public override IntermediateNodeCollection Children { get; } ++ public bool IsIndexerNameMatch { get; set; } ++ public string OriginalAttributeName { get; set; } ++ public TagHelperDescriptor TagHelper { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } ++ public sealed class TagHelperDirectiveAttributeParameterIntermediateNode : IntermediateNode { ++ public TagHelperDirectiveAttributeParameterIntermediateNode(); ++ public string AttributeName { get; set; } ++ public string AttributeNameWithoutParameter { get; set; } ++ public AttributeStructure AttributeStructure { get; set; } ++ public BoundAttributeDescriptor BoundAttribute { get; set; } ++ public BoundAttributeParameterDescriptor BoundAttributeParameter { get; set; } ++ public override IntermediateNodeCollection Children { get; } ++ public bool IsIndexerNameMatch { get; set; } ++ public string OriginalAttributeName { get; set; } ++ public TagHelperDescriptor TagHelper { get; set; } ++ public override void Accept(IntermediateNodeVisitor visitor); ++ public override void FormatNode(IntermediateNodeFormatter formatter); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Razor.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Razor.md new file mode 100644 index 00000000..9f7b7711 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Razor.md @@ -0,0 +1,16 @@ +# Microsoft.AspNetCore.Razor + +``` diff + { + namespace Microsoft.AspNetCore.Razor.TagHelpers { +- public class NullHtmlEncoder : HtmlEncoder { ++ public sealed class NullHtmlEncoder : HtmlEncoder { +- protected NullHtmlEncoder(); + + } +- public class RestrictChildrenAttribute : Attribute ++ public sealed class RestrictChildrenAttribute : Attribute + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ResponseCaching.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ResponseCaching.md new file mode 100644 index 00000000..35b9bb1e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.ResponseCaching.md @@ -0,0 +1,126 @@ +# Microsoft.AspNetCore.ResponseCaching + +``` diff + { + namespace Microsoft.AspNetCore.ResponseCaching { + public class ResponseCachingMiddleware { +- public ResponseCachingMiddleware(RequestDelegate next, IOptions options, ILoggerFactory loggerFactory, IResponseCachingPolicyProvider policyProvider, IResponseCachingKeyProvider keyProvider); + ++ public ResponseCachingMiddleware(RequestDelegate next, IOptions options, ILoggerFactory loggerFactory, ObjectPoolProvider poolProvider); + } + } +- namespace Microsoft.AspNetCore.ResponseCaching.Internal { + { +- public class CachedResponse : IResponseCacheEntry { + { +- public CachedResponse(); + +- public Stream Body { get; set; } + +- public DateTimeOffset Created { get; set; } + +- public IHeaderDictionary Headers { get; set; } + +- public int StatusCode { get; set; } + +- } +- public class CachedVaryByRules : IResponseCacheEntry { + { +- public CachedVaryByRules(); + +- public StringValues Headers { get; set; } + +- public StringValues QueryKeys { get; set; } + +- public string VaryByKeyPrefix { get; set; } + +- } +- public interface IResponseCache { + { +- IResponseCacheEntry Get(string key); + +- Task GetAsync(string key); + +- void Set(string key, IResponseCacheEntry entry, TimeSpan validFor); + +- Task SetAsync(string key, IResponseCacheEntry entry, TimeSpan validFor); + +- } +- public interface IResponseCacheEntry + +- public interface IResponseCachingKeyProvider { + { +- string CreateBaseKey(ResponseCachingContext context); + +- IEnumerable CreateLookupVaryByKeys(ResponseCachingContext context); + +- string CreateStorageVaryByKey(ResponseCachingContext context); + +- } +- public interface IResponseCachingPolicyProvider { + { +- bool AllowCacheLookup(ResponseCachingContext context); + +- bool AllowCacheStorage(ResponseCachingContext context); + +- bool AttemptResponseCaching(ResponseCachingContext context); + +- bool IsCachedEntryFresh(ResponseCachingContext context); + +- bool IsResponseCacheable(ResponseCachingContext context); + +- } +- public class MemoryResponseCache : IResponseCache { + { +- public MemoryResponseCache(IMemoryCache cache); + +- public IResponseCacheEntry Get(string key); + +- public Task GetAsync(string key); + +- public void Set(string key, IResponseCacheEntry entry, TimeSpan validFor); + +- public Task SetAsync(string key, IResponseCacheEntry entry, TimeSpan validFor); + +- } +- public class ResponseCachingContext { + { +- public TimeSpan? CachedEntryAge { get; internal set; } + +- public CachedVaryByRules CachedVaryByRules { get; internal set; } + +- public HttpContext HttpContext { get; } + +- public DateTimeOffset? ResponseTime { get; internal set; } + +- } +- public class ResponseCachingKeyProvider : IResponseCachingKeyProvider { + { +- public ResponseCachingKeyProvider(ObjectPoolProvider poolProvider, IOptions options); + +- public string CreateBaseKey(ResponseCachingContext context); + +- public IEnumerable CreateLookupVaryByKeys(ResponseCachingContext context); + +- public string CreateStorageVaryByKey(ResponseCachingContext context); + +- } +- public class ResponseCachingPolicyProvider : IResponseCachingPolicyProvider { + { +- public ResponseCachingPolicyProvider(); + +- public virtual bool AllowCacheLookup(ResponseCachingContext context); + +- public virtual bool AllowCacheStorage(ResponseCachingContext context); + +- public virtual bool AttemptResponseCaching(ResponseCachingContext context); + +- public virtual bool IsCachedEntryFresh(ResponseCachingContext context); + +- public virtual bool IsResponseCacheable(ResponseCachingContext context); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Rewrite.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Rewrite.md new file mode 100644 index 00000000..1002e900 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Rewrite.md @@ -0,0 +1,1019 @@ +# Microsoft.AspNetCore.Rewrite + +``` diff + { + namespace Microsoft.AspNetCore.Rewrite { + public static class IISUrlRewriteOptionsExtensions { +- public static RewriteOptions AddIISUrlRewrite(this RewriteOptions options, IFileProvider fileProvider, string filePath); + ++ public static RewriteOptions AddIISUrlRewrite(this RewriteOptions options, IFileProvider fileProvider, string filePath, bool alwaysUseManagedServerVariables = false); +- public static RewriteOptions AddIISUrlRewrite(this RewriteOptions options, TextReader reader); + ++ public static RewriteOptions AddIISUrlRewrite(this RewriteOptions options, TextReader reader, bool alwaysUseManagedServerVariables = false); + } + public class RewriteMiddleware { +- public RewriteMiddleware(RequestDelegate next, IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory, IOptions options); + ++ public RewriteMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnvironment, ILoggerFactory loggerFactory, IOptions options); + } + public static class RewriteOptionsExtensions { ++ public static RewriteOptions AddRedirectToWww(this RewriteOptions options, int statusCode, params string[] domains); ++ public static RewriteOptions AddRedirectToWww(this RewriteOptions options, params string[] domains); ++ public static RewriteOptions AddRedirectToWwwPermanent(this RewriteOptions options, params string[] domains); + } + } +- namespace Microsoft.AspNetCore.Rewrite.Internal { + { +- public class BackReferenceCollection { + { +- public BackReferenceCollection(string reference); + +- public BackReferenceCollection(GroupCollection references); + +- public string this[int index] { get; } + +- public void Add(BackReferenceCollection references); + +- } +- public class DelegateRule : IRule { + { +- public DelegateRule(Action onApplyRule); + +- public void ApplyRule(RewriteContext context); + +- } +- public class MatchResults { + { +- public static readonly MatchResults EmptyFailure; + +- public static readonly MatchResults EmptySuccess; + +- public MatchResults(); + +- public BackReferenceCollection BackReferences { get; set; } + +- public bool Success { get; set; } + +- } +- public class ParserContext { + { +- public readonly string Template; + +- public ParserContext(string condition); + +- public char Current { get; } + +- public int Index { get; set; } + +- public bool Back(); + +- public string Capture(); + +- public int GetIndex(); + +- public bool HasNext(); + +- public void Mark(); + +- public bool Next(); + +- } +- public class Pattern { + { +- public Pattern(IList patternSegments); + +- public IList PatternSegments { get; } + +- public string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public abstract class PatternSegment { + { +- protected PatternSegment(); + +- public abstract string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RedirectRule : IRule { + { +- public RedirectRule(string regex, string replacement, int statusCode); + +- public Regex InitialMatch { get; } + +- public string Replacement { get; } + +- public int StatusCode { get; } + +- public virtual void ApplyRule(RewriteContext context); + +- } +- public class RedirectToHttpsRule : IRule { + { +- public RedirectToHttpsRule(); + +- public int? SSLPort { get; set; } + +- public int StatusCode { get; set; } + +- public virtual void ApplyRule(RewriteContext context); + +- } +- public class RedirectToWwwRule : IRule { + { +- public readonly int _statusCode; + +- public RedirectToWwwRule(int statusCode); + +- public virtual void ApplyRule(RewriteContext context); + +- } +- public class RewriteRule : IRule { + { +- public RewriteRule(string regex, string replacement, bool stopProcessing); + +- public Regex InitialMatch { get; } + +- public string Replacement { get; } + +- public bool StopProcessing { get; } + +- public virtual void ApplyRule(RewriteContext context); + +- } +- public abstract class UrlAction { + { +- protected UrlAction(); + +- protected Pattern Url { get; set; } + +- public abstract void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public abstract class UrlMatch { + { +- protected UrlMatch(); + +- protected bool Negate { get; set; } + +- public abstract MatchResults Evaluate(string input, RewriteContext context); + +- } +- } +- namespace Microsoft.AspNetCore.Rewrite.Internal.ApacheModRewrite { + { +- public class ApacheModRewriteRule : IRule { + { +- public ApacheModRewriteRule(UrlMatch initialMatch, IList conditions, IList urlActions); + +- public IList Actions { get; } + +- public IList Conditions { get; } + +- public UrlMatch InitialMatch { get; } + +- public virtual void ApplyRule(RewriteContext context); + +- } +- public class Condition { + { +- public Condition(); + +- public Pattern Input { get; set; } + +- public UrlMatch Match { get; set; } + +- public bool OrNext { get; set; } + +- public MatchResults Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public static class ConditionEvaluator { + { +- public static MatchResults Evaluate(IEnumerable conditions, RewriteContext context, BackReferenceCollection backReferences); + +- public static MatchResults Evaluate(IEnumerable conditions, RewriteContext context, BackReferenceCollection backReferences, bool trackAllCaptures); + +- } +- public class ConditionPatternParser { + { +- public ConditionPatternParser(); + +- public ParsedModRewriteInput ParseActionCondition(string condition); + +- } +- public enum ConditionType { + { +- IntComp = 3, + +- PropertyTest = 1, + +- Regex = 0, + +- StringComp = 2, + +- } +- public class CookieActionFactory { + { +- public CookieActionFactory(); + +- public ChangeCookieAction Create(string flagValue); + +- } +- public class FileParser { + { +- public FileParser(); + +- public IList Parse(TextReader input); + +- } +- public class FlagParser { + { +- public FlagParser(); + +- public Flags Parse(string flagString); + +- } +- public class Flags { + { +- public Flags(); + +- public Flags(IDictionary flags); + +- public IDictionary FlagDictionary { get; } + +- public string this[FlagType flag] { get; set; } + +- public bool GetValue(FlagType flag, out string value); + +- public bool HasFlag(FlagType flag); + +- public void SetFlag(FlagType flag, string value); + +- } +- public enum FlagType { + { +- Chain = 1, + +- Cookie = 2, + +- DiscardPath = 3, + +- End = 5, + +- Env = 4, + +- EscapeBackreference = 0, + +- Forbidden = 6, + +- Gone = 7, + +- Handler = 8, + +- Last = 9, + +- Next = 10, + +- NoCase = 11, + +- NoEscape = 12, + +- NoSubReq = 13, + +- NoVary = 14, + +- Or = 15, + +- PassThrough = 17, + +- Proxy = 16, + +- QSAppend = 18, + +- QSDiscard = 19, + +- QSLast = 20, + +- Redirect = 21, + +- Skip = 22, + +- Type = 23, + +- } +- public enum OperationType { + { +- Directory = 7, + +- Equal = 1, + +- Executable = 13, + +- ExistingFile = 9, + +- ExistingUrl = 12, + +- Greater = 2, + +- GreaterEqual = 3, + +- Less = 4, + +- LessEqual = 5, + +- None = 0, + +- NotEqual = 6, + +- RegularFile = 8, + +- Size = 11, + +- SymbolicLink = 10, + +- } +- public class ParsedModRewriteInput { + { +- public ParsedModRewriteInput(); + +- public ParsedModRewriteInput(bool invert, ConditionType conditionType, OperationType operationType, string operand); + +- public ConditionType ConditionType { get; set; } + +- public bool Invert { get; set; } + +- public string Operand { get; set; } + +- public OperationType OperationType { get; set; } + +- } +- public class RuleBuilder { + { +- public RuleBuilder(); + +- public void AddAction(Pattern pattern, Flags flags); + +- public void AddConditionFromParts(Pattern pattern, ParsedModRewriteInput input, Flags flags); + +- public void AddMatch(ParsedModRewriteInput input, Flags flags); + +- public void AddRule(string rule); + +- public ApacheModRewriteRule Build(); + +- } +- public class RuleRegexParser { + { +- public RuleRegexParser(); + +- public ParsedModRewriteInput ParseRuleRegex(string regex); + +- } +- public enum SegmentType { + { +- ConditionParameter = 2, + +- Literal = 0, + +- RuleParameter = 3, + +- ServerParameter = 1, + +- } +- public static class ServerVariables { + { +- public static PatternSegment FindServerVariable(string serverVariable, ParserContext context); + +- } +- public class TestStringParser { + { +- public TestStringParser(); + +- public Pattern Parse(string testString); + +- } +- public class Tokenizer { + { +- public Tokenizer(); + +- public IList Tokenize(string rule); + +- } +- } +- namespace Microsoft.AspNetCore.Rewrite.Internal.IISUrlRewrite { + { +- public enum ActionType { + { +- AbortRequest = 4, + +- CustomResponse = 3, + +- None = 0, + +- Redirect = 2, + +- Rewrite = 1, + +- } +- public class Condition { + { +- public Condition(); + +- public Pattern Input { get; set; } + +- public UrlMatch Match { get; set; } + +- public MatchResults Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class ConditionCollection : IEnumerable, IEnumerable { + { +- public ConditionCollection(); + +- public ConditionCollection(LogicalGrouping grouping, bool trackAllCaptures); + +- public int Count { get; } + +- public LogicalGrouping Grouping { get; } + +- public Condition this[int index] { get; } + +- public bool TrackAllCaptures { get; } + +- public void Add(Condition condition); + +- public void AddConditions(IEnumerable conditions); + +- public IEnumerator GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- } +- public static class ConditionEvaluator { + { +- public static MatchResults Evaluate(ConditionCollection conditions, RewriteContext context, BackReferenceCollection backReferences); + +- } +- public class IISRewriteMap { + { +- public IISRewriteMap(string name); + +- public string Name { get; } + +- public string this[string key] { get; set; } + +- } +- public class IISRewriteMapCollection : IEnumerable, IEnumerable { + { +- public IISRewriteMapCollection(); + +- public int Count { get; } + +- public IISRewriteMap this[string key] { get; } + +- public void Add(IISRewriteMap rewriteMap); + +- public IEnumerator GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- } +- public class IISUrlRewriteRule : IRule { + { +- public IISUrlRewriteRule(string name, UrlMatch initialMatch, ConditionCollection conditions, UrlAction action); + +- public IISUrlRewriteRule(string name, UrlMatch initialMatch, ConditionCollection conditions, UrlAction action, bool global); + +- public UrlAction Action { get; } + +- public ConditionCollection Conditions { get; } + +- public bool Global { get; } + +- public UrlMatch InitialMatch { get; } + +- public string Name { get; } + +- public virtual void ApplyRule(RewriteContext context); + +- } +- public class InputParser { + { +- public InputParser(); + +- public InputParser(IISRewriteMapCollection rewriteMaps); + +- public Pattern ParseInputString(string testString); + +- public Pattern ParseInputString(string testString, UriMatchPart uriMatchPart); + +- } +- public class InvalidUrlRewriteFormatException : FormatException { + { +- public InvalidUrlRewriteFormatException(XElement element, string message); + +- public InvalidUrlRewriteFormatException(XElement element, string message, Exception innerException); + +- public int LineNumber { get; } + +- public int LinePosition { get; } + +- } +- public enum LogicalGrouping { + { +- MatchAll = 0, + +- MatchAny = 1, + +- } +- public enum MatchType { + { +- IsDirectory = 2, + +- IsFile = 1, + +- Pattern = 0, + +- } +- public enum PatternSyntax { + { +- ECMAScript = 0, + +- ExactMatch = 2, + +- Wildcard = 1, + +- } +- public enum RedirectType { + { +- Found = 302, + +- Permanent = 301, + +- SeeOther = 303, + +- Temporary = 307, + +- } +- public static class RewriteMapParser { + { +- public static IISRewriteMapCollection Parse(XElement xmlRoot); + +- } +- public static class RewriteTags { + { +- public const string Action = "action"; + +- public const string Add = "add"; + +- public const string AppendQueryString = "appendQueryString"; + +- public const string Conditions = "conditions"; + +- public const string Enabled = "enabled"; + +- public const string GlobalRules = "globalRules"; + +- public const string IgnoreCase = "ignoreCase"; + +- public const string Input = "input"; + +- public const string Key = "key"; + +- public const string LogicalGrouping = "logicalGrouping"; + +- public const string LogRewrittenUrl = "logRewrittenUrl"; + +- public const string Match = "match"; + +- public const string MatchPattern = "matchPattern"; + +- public const string MatchType = "matchType"; + +- public const string Name = "name"; + +- public const string Negate = "negate"; + +- public const string Pattern = "pattern"; + +- public const string PatternSyntax = "patternSyntax"; + +- public const string RedirectType = "redirectType"; + +- public const string Rewrite = "rewrite"; + +- public const string RewriteMap = "rewriteMap"; + +- public const string RewriteMaps = "rewriteMaps"; + +- public const string Rule = "rule"; + +- public const string Rules = "rules"; + +- public const string StatusCode = "statusCode"; + +- public const string StatusDescription = "statusDescription"; + +- public const string StatusReason = "statusReason"; + +- public const string StopProcessing = "stopProcessing"; + +- public const string SubStatusCode = "subStatusCode"; + +- public const string TrackAllCaptures = "trackAllCaptures"; + +- public const string Type = "type"; + +- public const string Url = "url"; + +- public const string Value = "value"; + +- } +- public static class ServerVariables { + { +- public static PatternSegment FindServerVariable(string serverVariable, ParserContext context, UriMatchPart uriMatchPart); + +- } +- public class UriMatchCondition : Condition { + { +- public UriMatchCondition(InputParser inputParser, string input, string pattern, UriMatchPart uriMatchPart, bool ignoreCase, bool negate); + +- } +- public enum UriMatchPart { + { +- Full = 0, + +- Path = 1, + +- } +- public class UrlRewriteFileParser { + { +- public UrlRewriteFileParser(); + +- public IList Parse(TextReader reader); + +- } +- public class UrlRewriteRuleBuilder { + { +- public UrlRewriteRuleBuilder(); + +- public bool Enabled { get; set; } + +- public bool Global { get; set; } + +- public string Name { get; set; } + +- public UriMatchPart UriMatchPart { get; } + +- public void AddUrlAction(UrlAction action); + +- public void AddUrlCondition(Condition condition); + +- public void AddUrlConditions(IEnumerable conditions); + +- public void AddUrlMatch(string input, bool ignoreCase = true, bool negate = false, PatternSyntax patternSyntax = PatternSyntax.ECMAScript); + +- public IISUrlRewriteRule Build(); + +- public void ConfigureConditionBehavior(LogicalGrouping logicalGrouping, bool trackAllCaptures); + +- } +- } +- namespace Microsoft.AspNetCore.Rewrite.Internal.PatternSegments { + { +- public class ConditionMatchSegment : PatternSegment { + { +- public ConditionMatchSegment(int index); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class DateTimeSegment : PatternSegment { + { +- public DateTimeSegment(string segment); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReference); + +- } +- public class HeaderSegment : PatternSegment { + { +- public HeaderSegment(string header); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class IsHttpsModSegment : PatternSegment { + { +- public IsHttpsModSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class IsHttpsUrlSegment : PatternSegment { + { +- public IsHttpsUrlSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class IsIPV6Segment : PatternSegment { + { +- public IsIPV6Segment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class LiteralSegment : PatternSegment { + { +- public LiteralSegment(string literal); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class LocalAddressSegment : PatternSegment { + { +- public LocalAddressSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class LocalPortSegment : PatternSegment { + { +- public LocalPortSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class QueryStringSegment : PatternSegment { + { +- public QueryStringSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackRefernces, BackReferenceCollection conditionBackReferences); + +- } +- public class RemoteAddressSegment : PatternSegment { + { +- public RemoteAddressSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RemotePortSegment : PatternSegment { + { +- public RemotePortSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RequestFileNameSegment : PatternSegment { + { +- public RequestFileNameSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RequestMethodSegment : PatternSegment { + { +- public RequestMethodSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RewriteMapSegment : PatternSegment { + { +- public RewriteMapSegment(IISRewriteMap rewriteMap, Pattern pattern); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RuleMatchSegment : PatternSegment { + { +- public RuleMatchSegment(int index); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class SchemeSegment : PatternSegment { + { +- public SchemeSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class ServerProtocolSegment : PatternSegment { + { +- public ServerProtocolSegment(); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class ToLowerSegment : PatternSegment { + { +- public ToLowerSegment(Pattern pattern); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class UrlEncodeSegment : PatternSegment { + { +- public UrlEncodeSegment(Pattern pattern); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class UrlSegment : PatternSegment { + { +- public UrlSegment(); + +- public UrlSegment(UriMatchPart uriMatchPart); + +- public override string Evaluate(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- } +- namespace Microsoft.AspNetCore.Rewrite.Internal.UrlActions { + { +- public class AbortAction : UrlAction { + { +- public AbortAction(); + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class ChangeCookieAction : UrlAction { + { +- public ChangeCookieAction(string name); + +- public string Domain { get; set; } + +- public bool HttpOnly { get; set; } + +- public TimeSpan Lifetime { get; set; } + +- public string Name { get; } + +- public string Path { get; set; } + +- public bool Secure { get; set; } + +- public string Value { get; set; } + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class CustomResponseAction : UrlAction { + { +- public CustomResponseAction(int statusCode); + +- public int StatusCode { get; } + +- public string StatusDescription { get; set; } + +- public string StatusReason { get; set; } + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class ForbiddenAction : UrlAction { + { +- public ForbiddenAction(); + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class GoneAction : UrlAction { + { +- public GoneAction(); + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class NoneAction : UrlAction { + { +- public NoneAction(RuleResult result); + +- public RuleResult Result { get; } + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RedirectAction : UrlAction { + { +- public RedirectAction(int statusCode, Pattern pattern, bool queryStringAppend); + +- public RedirectAction(int statusCode, Pattern pattern, bool queryStringAppend, bool queryStringDelete, bool escapeBackReferences); + +- public bool EscapeBackReferences { get; } + +- public bool QueryStringAppend { get; } + +- public bool QueryStringDelete { get; } + +- public int StatusCode { get; } + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- public class RewriteAction : UrlAction { + { +- public RewriteAction(RuleResult result, Pattern pattern, bool queryStringAppend); + +- public RewriteAction(RuleResult result, Pattern pattern, bool queryStringAppend, bool queryStringDelete, bool escapeBackReferences); + +- public bool EscapeBackReferences { get; } + +- public bool QueryStringAppend { get; } + +- public bool QueryStringDelete { get; } + +- public RuleResult Result { get; } + +- public override void ApplyAction(RewriteContext context, BackReferenceCollection ruleBackReferences, BackReferenceCollection conditionBackReferences); + +- } +- } +- namespace Microsoft.AspNetCore.Rewrite.Internal.UrlMatches { + { +- public class ExactMatch : UrlMatch { + { +- public ExactMatch(bool ignoreCase, string input, bool negate); + +- public override MatchResults Evaluate(string pattern, RewriteContext context); + +- } +- public class FileSizeMatch : UrlMatch { + { +- public FileSizeMatch(bool negate); + +- public override MatchResults Evaluate(string input, RewriteContext context); + +- } +- public class IntegerMatch : UrlMatch { + { +- public IntegerMatch(int value, IntegerOperationType operation); + +- public IntegerMatch(string value, IntegerOperationType operation); + +- public override MatchResults Evaluate(string input, RewriteContext context); + +- } +- public enum IntegerOperationType { + { +- Equal = 0, + +- Greater = 1, + +- GreaterEqual = 2, + +- Less = 3, + +- LessEqual = 4, + +- NotEqual = 5, + +- } +- public class IsDirectoryMatch : UrlMatch { + { +- public IsDirectoryMatch(bool negate); + +- public override MatchResults Evaluate(string pattern, RewriteContext context); + +- } +- public class IsFileMatch : UrlMatch { + { +- public IsFileMatch(bool negate); + +- public override MatchResults Evaluate(string pattern, RewriteContext context); + +- } +- public class RegexMatch : UrlMatch { + { +- public RegexMatch(Regex match, bool negate); + +- public override MatchResults Evaluate(string pattern, RewriteContext context); + +- } +- public class StringMatch : UrlMatch { + { +- public StringMatch(string value, StringOperationType operation, bool ignoreCase); + +- public override MatchResults Evaluate(string input, RewriteContext context); + +- } +- public enum StringOperationType { + { +- Equal = 0, + +- Greater = 1, + +- GreaterEqual = 2, + +- Less = 3, + +- LessEqual = 4, + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Routing.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Routing.Abstractions.md new file mode 100644 index 00000000..1807401c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Routing.Abstractions.md @@ -0,0 +1,144 @@ +# Microsoft.AspNetCore.Routing.Abstractions + +``` diff + { +- namespace Microsoft.AspNetCore.Http { + { +- public class Endpoint { + { +- public Endpoint(RequestDelegate requestDelegate, EndpointMetadataCollection metadata, string displayName); + +- public string DisplayName { get; } + +- public EndpointMetadataCollection Metadata { get; } + +- public RequestDelegate RequestDelegate { get; } + +- public override string ToString(); + +- } +- public sealed class EndpointMetadataCollection : IEnumerable, IEnumerable, IReadOnlyCollection, IReadOnlyList { + { +- public static readonly EndpointMetadataCollection Empty; + +- public EndpointMetadataCollection(IEnumerable items); + +- public EndpointMetadataCollection(params object[] items); + +- public int Count { get; } + +- public object this[int index] { get; } + +- public EndpointMetadataCollection.Enumerator GetEnumerator(); + +- public T GetMetadata() where T : class; + +- public IEnumerable GetOrderedMetadata() where T : class; + +- IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator { + { +- public object Current { get; private set; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } +- } +- namespace Microsoft.AspNetCore.Http.Features { + { +- public interface IEndpointFeature { + { +- Endpoint Endpoint { get; set; } + +- } +- public interface IRouteValuesFeature { + { +- RouteValueDictionary RouteValues { get; set; } + +- } +- } + namespace Microsoft.AspNetCore.Routing { + public class RouteData { +- public struct RouteDataSnapshot ++ public readonly struct RouteDataSnapshot + } +- public class RouteValueDictionary : ICollection>, IDictionary, IEnumerable, IEnumerable>, IReadOnlyCollection>, IReadOnlyDictionary { + { +- public RouteValueDictionary(); + +- public RouteValueDictionary(object values); + +- public IEqualityComparer Comparer { get; } + +- public int Count { get; } + +- public ICollection Keys { get; } + +- bool System.Collections.Generic.ICollection>.IsReadOnly { get; } + +- IEnumerable System.Collections.Generic.IReadOnlyDictionary.Keys { get; } + +- IEnumerable System.Collections.Generic.IReadOnlyDictionary.Values { get; } + +- public object this[string key] { get; set; } + +- public ICollection Values { get; } + +- public void Add(string key, object value); + +- public void Clear(); + +- public bool ContainsKey(string key); + +- public static RouteValueDictionary FromArray(KeyValuePair[] items); + +- public RouteValueDictionary.Enumerator GetEnumerator(); + +- public bool Remove(string key); + +- public bool Remove(string key, out object value); + +- void System.Collections.Generic.ICollection>.Add(KeyValuePair item); + +- bool System.Collections.Generic.ICollection>.Contains(KeyValuePair item); + +- void System.Collections.Generic.ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex); + +- bool System.Collections.Generic.ICollection>.Remove(KeyValuePair item); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public bool TryAdd(string key, object value); + +- public bool TryGetValue(string key, out object value); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { + { +- public Enumerator(RouteValueDictionary dictionary); + +- public KeyValuePair Current { get; private set; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Routing.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Routing.md new file mode 100644 index 00000000..ad7d4fa1 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Routing.md @@ -0,0 +1,324 @@ +# Microsoft.AspNetCore.Routing + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public static class EndpointRouteBuilderExtensions { ++ public static IEndpointConventionBuilder Map(this IEndpointRouteBuilder endpoints, RoutePattern pattern, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder Map(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder MapDelete(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder MapGet(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder MapMethods(this IEndpointRouteBuilder endpoints, string pattern, IEnumerable httpMethods, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder MapPost(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder MapPut(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate); ++ } ++ public static class EndpointRoutingApplicationBuilderExtensions { ++ public static IApplicationBuilder UseEndpoints(this IApplicationBuilder builder, Action configure); ++ public static IApplicationBuilder UseRouting(this IApplicationBuilder builder); ++ } ++ public static class FallbackEndpointRouteBuilderExtensions { ++ public static readonly string DefaultPattern; ++ public static IEndpointConventionBuilder MapFallback(this IEndpointRouteBuilder endpoints, RequestDelegate requestDelegate); ++ public static IEndpointConventionBuilder MapFallback(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate); ++ } ++ public static class RoutingEndpointConventionBuilderExtensions { ++ public static TBuilder RequireHost(this TBuilder builder, params string[] hosts) where TBuilder : IEndpointConventionBuilder; ++ public static TBuilder WithDisplayName(this TBuilder builder, Func func) where TBuilder : IEndpointConventionBuilder; ++ public static TBuilder WithDisplayName(this TBuilder builder, string displayName) where TBuilder : IEndpointConventionBuilder; ++ public static TBuilder WithMetadata(this TBuilder builder, params object[] items) where TBuilder : IEndpointConventionBuilder; ++ } + } +- namespace Microsoft.AspNetCore.Internal { + { +- public static class EndpointRoutingApplicationBuilderExtensions { + { +- public static IApplicationBuilder UseEndpoint(this IApplicationBuilder builder); + +- public static IApplicationBuilder UseEndpointRouting(this IApplicationBuilder builder); + +- } +- } + namespace Microsoft.AspNetCore.Routing { + public sealed class CompositeEndpointDataSource : EndpointDataSource { ++ public CompositeEndpointDataSource(IEnumerable endpointDataSources); ++ public IEnumerable DataSources { get; } + } + public class DefaultInlineConstraintResolver : IInlineConstraintResolver { +- public DefaultInlineConstraintResolver(IOptions routeOptions); + + } +- public sealed class EndpointSelectorContext : IEndpointFeature, IRouteValuesFeature, IRoutingFeature { + { +- public EndpointSelectorContext(); + +- public Endpoint Endpoint { get; set; } + +- RouteData Microsoft.AspNetCore.Routing.IRoutingFeature.RouteData { get; set; } + +- public RouteValueDictionary RouteValues { get; set; } + +- } ++ public sealed class HostAttribute : Attribute, IHostMetadata { ++ public HostAttribute(string host); ++ public HostAttribute(params string[] hosts); ++ public IReadOnlyList Hosts { get; } ++ } ++ public interface IDynamicEndpointMetadata { ++ bool IsDynamic { get; } ++ } ++ public interface IEndpointRouteBuilder { ++ ICollection DataSources { get; } ++ IServiceProvider ServiceProvider { get; } ++ IApplicationBuilder CreateApplicationBuilder(); ++ } ++ public interface IHostMetadata { ++ IReadOnlyList Hosts { get; } ++ } ++ public interface IRouteNameMetadata { ++ string RouteName { get; } ++ } +- public interface IRouteValuesAddressMetadata { + { +- IReadOnlyDictionary RequiredValues { get; } + +- string RouteName { get; } + +- } ++ public abstract class LinkParser { ++ protected LinkParser(); ++ public abstract RouteValueDictionary ParsePathByAddress(TAddress address, PathString path); ++ } ++ public static class LinkParserEndpointNameAddressExtensions { ++ public static RouteValueDictionary ParsePathByEndpointName(this LinkParser parser, string endpointName, PathString path); ++ } + public abstract class MatcherPolicy { ++ protected static bool ContainsDynamicEndpoints(IReadOnlyList endpoints); + } ++ public sealed class RouteEndpointBuilder : EndpointBuilder { ++ public RouteEndpointBuilder(RequestDelegate requestDelegate, RoutePattern routePattern, int order); ++ public int Order { get; set; } ++ public RoutePattern RoutePattern { get; set; } ++ public override Endpoint Build(); ++ } ++ public sealed class RouteNameMetadata : IRouteNameMetadata { ++ public RouteNameMetadata(string routeName); ++ public string RouteName { get; } ++ } + public class RouteOptions { ++ public bool SuppressCheckForUnhandledSecurityMetadata { get; set; } + } + public class RouteValueEqualityComparer : IEqualityComparer { ++ public static readonly RouteValueEqualityComparer Default; + } +- public sealed class RouteValuesAddressMetadata : IRouteValuesAddressMetadata { + { +- public RouteValuesAddressMetadata(IReadOnlyDictionary requiredValues); + +- public RouteValuesAddressMetadata(string routeName); + +- public RouteValuesAddressMetadata(string routeName, IReadOnlyDictionary requiredValues); + +- public IReadOnlyDictionary RequiredValues { get; } + +- public string RouteName { get; } + +- } + } + namespace Microsoft.AspNetCore.Routing.Constraints { ++ public class FileNameRouteConstraint : IParameterPolicy, IRouteConstraint { ++ public FileNameRouteConstraint(); ++ public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection); ++ } ++ public class NonFileNameRouteConstraint : IParameterPolicy, IRouteConstraint { ++ public NonFileNameRouteConstraint(); ++ public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection); ++ } + } + namespace Microsoft.AspNetCore.Routing.Internal { +- public struct BufferValue { + { +- public BufferValue(string value, bool requiresEncoding); + +- public bool RequiresEncoding { get; } + +- public string Value { get; } + +- } +- public class LinkGenerationDecisionTree { + { +- public LinkGenerationDecisionTree(IReadOnlyList entries); + +- public IList GetMatches(RouteValueDictionary values, RouteValueDictionary ambientValues); + +- } +- public struct OutboundMatchResult { + { +- public OutboundMatchResult(OutboundMatch match, bool isFallbackMatch); + +- public bool IsFallbackMatch { get; } + +- public OutboundMatch Match { get; } + +- } +- public struct PathTokenizer : IEnumerable, IEnumerable, IReadOnlyCollection, IReadOnlyList { + { +- public PathTokenizer(PathString path); + +- public int Count { get; } + +- public StringSegment this[int index] { get; } + +- public PathTokenizer.Enumerator GetEnumerator(); + +- IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator { + { +- public Enumerator(PathTokenizer tokenizer); + +- public StringSegment Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } +- public enum SegmentState { + { +- Beginning = 0, + +- Inside = 1, + +- } +- public class UriBuilderContextPooledObjectPolicy : IPooledObjectPolicy { + { +- public UriBuilderContextPooledObjectPolicy(); + +- public UriBuildingContext Create(); + +- public bool Return(UriBuildingContext obj); + +- } +- public class UriBuildingContext { + { +- public UriBuildingContext(UrlEncoder urlEncoder); + +- public bool AppendTrailingSlash { get; set; } + +- public SegmentState BufferState { get; private set; } + +- public bool LowercaseQueryStrings { get; set; } + +- public bool LowercaseUrls { get; set; } + +- public TextWriter PathWriter { get; } + +- public TextWriter QueryWriter { get; } + +- public SegmentState UriState { get; private set; } + +- public bool Accept(string value); + +- public bool Accept(string value, bool encodeSlashes); + +- public bool Buffer(string value); + +- public void Clear(); + +- public void EndSegment(); + +- public void Remove(string literal); + +- public PathString ToPathString(); + +- public QueryString ToQueryString(); + +- public override string ToString(); + +- } + } + namespace Microsoft.AspNetCore.Routing.Matching { + public sealed class CandidateSet { ++ public void ExpandEndpoint(int index, IReadOnlyList endpoints, IComparer comparer); ++ public void ReplaceEndpoint(int index, Endpoint endpoint, RouteValueDictionary values); + } ++ public sealed class EndpointMetadataComparer : IComparer { ++ int System.Collections.Generic.IComparer.Compare(Endpoint x, Endpoint y); ++ } + public abstract class EndpointSelector { +- public abstract Task SelectAsync(HttpContext httpContext, EndpointSelectorContext context, CandidateSet candidates); + ++ public abstract Task SelectAsync(HttpContext httpContext, CandidateSet candidates); + } ++ public sealed class HostMatcherPolicy : MatcherPolicy, IEndpointComparerPolicy, IEndpointSelectorPolicy, INodeBuilderPolicy { ++ public HostMatcherPolicy(); ++ public IComparer Comparer { get; } ++ public override int Order { get; } ++ public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates); ++ public PolicyJumpTable BuildJumpTable(int exitDestination, IReadOnlyList edges); ++ public IReadOnlyList GetEdges(IReadOnlyList endpoints); ++ bool Microsoft.AspNetCore.Routing.Matching.IEndpointSelectorPolicy.AppliesToEndpoints(IReadOnlyList endpoints); ++ bool Microsoft.AspNetCore.Routing.Matching.INodeBuilderPolicy.AppliesToEndpoints(IReadOnlyList endpoints); ++ } +- public sealed class HttpMethodMatcherPolicy : MatcherPolicy, IEndpointComparerPolicy, INodeBuilderPolicy { ++ public sealed class HttpMethodMatcherPolicy : MatcherPolicy, IEndpointComparerPolicy, IEndpointSelectorPolicy, INodeBuilderPolicy { +- public bool AppliesToEndpoints(IReadOnlyList endpoints); + ++ public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates); ++ bool Microsoft.AspNetCore.Routing.Matching.IEndpointSelectorPolicy.AppliesToEndpoints(IReadOnlyList endpoints); ++ bool Microsoft.AspNetCore.Routing.Matching.INodeBuilderPolicy.AppliesToEndpoints(IReadOnlyList endpoints); + } + public interface IEndpointSelectorPolicy { +- Task ApplyAsync(HttpContext httpContext, EndpointSelectorContext context, CandidateSet candidates); + ++ Task ApplyAsync(HttpContext httpContext, CandidateSet candidates); + } + } + namespace Microsoft.AspNetCore.Routing.Patterns { + public sealed class RoutePattern { ++ public static readonly object RequiredValueAny; ++ public IReadOnlyDictionary RequiredValues { get; } + } + public static class RoutePatternFactory { ++ public static RoutePattern Parse(string pattern, object defaults, object parameterPolicies, object requiredValues); + } ++ public abstract class RoutePatternTransformer { ++ protected RoutePatternTransformer(); ++ public abstract RoutePattern SubstituteRequiredValues(RoutePattern original, object requiredValues); ++ } + } + namespace Microsoft.AspNetCore.Routing.Template { + public class TemplateBinder { +- public TemplateBinder(UrlEncoder urlEncoder, ObjectPool pool, RoutePattern pattern, RouteValueDictionary defaults, IEnumerable requiredKeys, IEnumerable> parameterPolicies); + +- public TemplateBinder(UrlEncoder urlEncoder, ObjectPool pool, RouteTemplate template, RouteValueDictionary defaults); + + } ++ public abstract class TemplateBinderFactory { ++ protected TemplateBinderFactory(); ++ public abstract TemplateBinder Create(RoutePattern pattern); ++ public abstract TemplateBinder Create(RouteTemplate template, RouteValueDictionary defaults); ++ } + } + namespace Microsoft.AspNetCore.Routing.Tree { + public class TreeRouteBuilder { +- public TreeRouteBuilder(ILoggerFactory loggerFactory, ObjectPool objectPool, IInlineConstraintResolver constraintResolver); + +- public TreeRouteBuilder(ILoggerFactory loggerFactory, UrlEncoder urlEncoder, ObjectPool objectPool, IInlineConstraintResolver constraintResolver); + + } + public class TreeRouter : IRouter { +- public TreeRouter(UrlMatchingTree[] trees, IEnumerable linkGenerationEntries, UrlEncoder urlEncoder, ObjectPool objectPool, ILogger routeLogger, ILogger constraintLogger, int version); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.HttpSys.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.HttpSys.md new file mode 100644 index 00000000..a963244e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.HttpSys.md @@ -0,0 +1,13 @@ +# Microsoft.AspNetCore.Server.HttpSys + +``` diff + { + namespace Microsoft.AspNetCore.Server.HttpSys { + public static class HttpSysDefaults { +- public static readonly string AuthenticationScheme; ++ public const string AuthenticationScheme = "Windows"; + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.IIS.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.IIS.md new file mode 100644 index 00000000..dd1edb6b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.IIS.md @@ -0,0 +1,26 @@ +# Microsoft.AspNetCore.Server.IIS + +``` diff + { + namespace Microsoft.AspNetCore.Builder { + public class IISServerOptions { ++ public bool AllowSynchronousIO { get; set; } ++ public long? MaxRequestBodySize { get; set; } + } + } +- namespace Microsoft.AspNetCore.Http.Features { + { +- public interface IServerVariablesFeature { + { +- string this[string variableName] { get; set; } + +- } +- } + namespace Microsoft.AspNetCore.Server.IIS { ++ public sealed class BadHttpRequestException : IOException { ++ public int StatusCode { get; } ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.IISIntegration.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.IISIntegration.md new file mode 100644 index 00000000..7d155676 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.IISIntegration.md @@ -0,0 +1,21 @@ +# Microsoft.AspNetCore.Server.IISIntegration + +``` diff + { + namespace Microsoft.AspNetCore.Server.IISIntegration { + public class IISDefaults { +- public static readonly string AuthenticationScheme; ++ public const string AuthenticationScheme = "Windows"; + } + public class IISMiddleware { +- public IISMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options, string pairingToken, IAuthenticationSchemeProvider authentication, IApplicationLifetime applicationLifetime); + ++ public IISMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options, string pairingToken, IAuthenticationSchemeProvider authentication, IHostApplicationLifetime applicationLifetime); +- public IISMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options, string pairingToken, bool isWebsocketsSupported, IAuthenticationSchemeProvider authentication, IApplicationLifetime applicationLifetime); + ++ public IISMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions options, string pairingToken, bool isWebsocketsSupported, IAuthenticationSchemeProvider authentication, IHostApplicationLifetime applicationLifetime); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Core.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Core.md new file mode 100644 index 00000000..1ca87087 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Core.md @@ -0,0 +1,2442 @@ +# Microsoft.AspNetCore.Server.Kestrel.Core + +``` diff + { + namespace Microsoft.AspNetCore.Server.Kestrel.Core { + public sealed class BadHttpRequestException : IOException { +- public static void Throw(RequestRejectionReason reason, HttpMethod method); + + } + public class KestrelServer : IDisposable, IServer { ++ public KestrelServer(IOptions options, IConnectionListenerFactory transportFactory, ILoggerFactory loggerFactory); +- public KestrelServer(IOptions options, ITransportFactory transportFactory, ILoggerFactory loggerFactory); + + } + public class KestrelServerOptions { +- public SchedulingMode ApplicationSchedulingMode { get; set; } + ++ public bool DisableStringReuse { get; set; } + } +- public class ListenOptions : IConnectionBuilder, IEndPointInformation { ++ public class ListenOptions : IConnectionBuilder { +- public List ConnectionAdapters { get; } + +- public FileHandleType HandleType { get; set; } + +- public IPEndPoint IPEndPoint { get; set; } ++ public IPEndPoint IPEndPoint { get; } +- public bool NoDelay { get; set; } + +- public ListenType Type { get; } + + } +- public class ServerAddress { + { +- public ServerAddress(); + +- public string Host { get; private set; } + +- public bool IsUnixPipe { get; } + +- public string PathBase { get; private set; } + +- public int Port { get; internal set; } + +- public string Scheme { get; private set; } + +- public string UnixPipePath { get; } + +- public override bool Equals(object obj); + +- public static ServerAddress FromUrl(string url); + +- public override int GetHashCode(); + +- public override string ToString(); + +- } + } +- namespace Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal { + { +- public class AdaptedPipeline : IDuplexPipe { + { +- public AdaptedPipeline(IDuplexPipe transport, Pipe inputPipe, Pipe outputPipe, IKestrelTrace log); + +- public Pipe Input { get; } + +- public IKestrelTrace Log { get; } + +- public Pipe Output { get; } + +- PipeReader System.IO.Pipelines.IDuplexPipe.Input { get; } + +- PipeWriter System.IO.Pipelines.IDuplexPipe.Output { get; } + +- public Task RunAsync(Stream stream); + +- } +- public class ConnectionAdapterContext { + { +- public Stream ConnectionStream { get; } + +- public IFeatureCollection Features { get; } + +- } +- public interface IAdaptedConnection : IDisposable { + { +- Stream ConnectionStream { get; } + +- } +- public interface IConnectionAdapter { + { +- bool IsHttps { get; } + +- Task OnConnectionAsync(ConnectionAdapterContext context); + +- } +- public class LoggingConnectionAdapter : IConnectionAdapter { + { +- public LoggingConnectionAdapter(ILogger logger); + +- public bool IsHttps { get; } + +- public Task OnConnectionAsync(ConnectionAdapterContext context); + +- } +- public class RawStream : Stream { + { +- public RawStream(PipeReader input, PipeWriter output); + +- public override bool CanRead { get; } + +- public override bool CanSeek { get; } + +- public override bool CanWrite { get; } + +- public override long Length { get; } + +- public override long Position { get; set; } + +- public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state); + +- public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state); + +- public override int EndRead(IAsyncResult asyncResult); + +- public override void EndWrite(IAsyncResult asyncResult); + +- public override void Flush(); + +- public override Task FlushAsync(CancellationToken cancellationToken); + +- public override int Read(byte[] buffer, int offset, int count); + +- public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- public override ValueTask ReadAsync(Memory destination, CancellationToken cancellationToken = default(CancellationToken)); + +- public override long Seek(long offset, SeekOrigin origin); + +- public override void SetLength(long value); + +- public override void Write(byte[] buffer, int offset, int count); + +- public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- public override ValueTask WriteAsync(ReadOnlyMemory source, CancellationToken cancellationToken = default(CancellationToken)); + +- } +- } +- namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal { + { +- public class ConnectionDispatcher : IConnectionDispatcher { + { +- public ConnectionDispatcher(ServiceContext serviceContext, ConnectionDelegate connectionDelegate); + +- public Task OnConnection(TransportConnection connection); + +- } +- public class ConnectionLimitMiddleware { + { +- public ConnectionLimitMiddleware(ConnectionDelegate next, long connectionLimit, IKestrelTrace trace); + +- public Task OnConnectionAsync(ConnectionContext connection); + +- } +- public class ConnectionLogScope : IEnumerable, IEnumerable>, IReadOnlyCollection>, IReadOnlyList> { + { +- public ConnectionLogScope(string connectionId); + +- public int Count { get; } + +- public KeyValuePair this[int index] { get; } + +- public IEnumerator> GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public override string ToString(); + +- } +- public class HttpConnection : ITimeoutHandler { + { +- public HttpConnection(HttpConnectionContext context); + +- public string ConnectionId { get; } + +- public IPEndPoint LocalEndPoint { get; } + +- public IPEndPoint RemoteEndPoint { get; } + +- public void OnTimeout(TimeoutReason reason); + +- public Task ProcessRequestsAsync(IHttpApplication httpApplication); + +- } +- public static class HttpConnectionBuilderExtensions { + { +- public static IConnectionBuilder UseHttpServer(this IConnectionBuilder builder, ServiceContext serviceContext, IHttpApplication application, HttpProtocols protocols); + +- public static IConnectionBuilder UseHttpServer(this IConnectionBuilder builder, IList adapters, ServiceContext serviceContext, IHttpApplication application, HttpProtocols protocols); + +- } +- public class HttpConnectionContext { + { +- public HttpConnectionContext(); + +- public IList ConnectionAdapters { get; set; } + +- public ConnectionContext ConnectionContext { get; set; } + +- public IFeatureCollection ConnectionFeatures { get; set; } + +- public string ConnectionId { get; set; } + +- public IPEndPoint LocalEndPoint { get; set; } + +- public MemoryPool MemoryPool { get; set; } + +- public HttpProtocols Protocols { get; set; } + +- public IPEndPoint RemoteEndPoint { get; set; } + +- public ServiceContext ServiceContext { get; set; } + +- public ITimeoutControl TimeoutControl { get; set; } + +- public IDuplexPipe Transport { get; set; } + +- } +- public class HttpConnectionMiddleware { + { +- public HttpConnectionMiddleware(IList adapters, ServiceContext serviceContext, IHttpApplication application, HttpProtocols protocols); + +- public Task OnConnectionAsync(ConnectionContext connectionContext); + +- } +- public interface IRequestProcessor { + { +- void Abort(ConnectionAbortedException ex); + +- void HandleReadDataRateTimeout(); + +- void HandleRequestHeadersTimeout(); + +- void OnInputOrOutputCompleted(); + +- Task ProcessRequestsAsync(IHttpApplication application); + +- void StopProcessingNextRequest(); + +- void Tick(DateTimeOffset now); + +- } +- public class KestrelServerOptionsSetup : IConfigureOptions { + { +- public KestrelServerOptionsSetup(IServiceProvider services); + +- public void Configure(KestrelServerOptions options); + +- } +- public class KestrelTrace : IKestrelTrace, ILogger { + { +- protected readonly ILogger _logger; + +- public KestrelTrace(ILogger logger); + +- public virtual void ApplicationAbortedConnection(string connectionId, string traceIdentifier); + +- public virtual void ApplicationError(string connectionId, string traceIdentifier, Exception ex); + +- public virtual void ApplicationNeverCompleted(string connectionId); + +- public virtual IDisposable BeginScope(TState state); + +- public virtual void ConnectionBadRequest(string connectionId, BadHttpRequestException ex); + +- public virtual void ConnectionDisconnect(string connectionId); + +- public virtual void ConnectionHeadResponseBodyWrite(string connectionId, long count); + +- public virtual void ConnectionKeepAlive(string connectionId); + +- public virtual void ConnectionPause(string connectionId); + +- public virtual void ConnectionRejected(string connectionId); + +- public virtual void ConnectionResume(string connectionId); + +- public virtual void ConnectionStart(string connectionId); + +- public virtual void ConnectionStop(string connectionId); + +- public virtual void HeartbeatSlow(TimeSpan interval, DateTimeOffset now); + +- public virtual void HPackDecodingError(string connectionId, int streamId, HPackDecodingException ex); + +- public virtual void HPackEncodingError(string connectionId, int streamId, HPackEncodingException ex); + +- public virtual void Http2ConnectionClosed(string connectionId, int highestOpenedStreamId); + +- public virtual void Http2ConnectionClosing(string connectionId); + +- public virtual void Http2ConnectionError(string connectionId, Http2ConnectionErrorException ex); + +- public void Http2FrameReceived(string connectionId, Http2Frame frame); + +- public void Http2FrameSending(string connectionId, Http2Frame frame); + +- public virtual void Http2StreamError(string connectionId, Http2StreamErrorException ex); + +- public void Http2StreamResetAbort(string traceIdentifier, Http2ErrorCode error, ConnectionAbortedException abortReason); + +- public virtual bool IsEnabled(LogLevel logLevel); + +- public virtual void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- public virtual void NotAllConnectionsAborted(); + +- public virtual void NotAllConnectionsClosedGracefully(); + +- public virtual void RequestBodyDone(string connectionId, string traceIdentifier); + +- public virtual void RequestBodyDrainTimedOut(string connectionId, string traceIdentifier); + +- public virtual void RequestBodyMinimumDataRateNotSatisfied(string connectionId, string traceIdentifier, double rate); + +- public virtual void RequestBodyNotEntirelyRead(string connectionId, string traceIdentifier); + +- public virtual void RequestBodyStart(string connectionId, string traceIdentifier); + +- public virtual void RequestProcessingError(string connectionId, Exception ex); + +- public virtual void ResponseMinimumDataRateNotSatisfied(string connectionId, string traceIdentifier); + +- } +- public class ServiceContext { + { +- public ServiceContext(); + +- public ConnectionManager ConnectionManager { get; set; } + +- public DateHeaderValueManager DateHeaderValueManager { get; set; } + +- public Heartbeat Heartbeat { get; set; } + +- public IHttpParser HttpParser { get; set; } + +- public IKestrelTrace Log { get; set; } + +- public PipeScheduler Scheduler { get; set; } + +- public KestrelServerOptions ServerOptions { get; set; } + +- public ISystemClock SystemClock { get; set; } + +- } +- } + namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http { +- public enum ConnectionOptions { + { +- Close = 1, + +- KeepAlive = 2, + +- None = 0, + +- Upgrade = 4, + +- } +- public class DateHeaderValueManager : IHeartbeatHandler { + { +- public DateHeaderValueManager(); + +- public DateHeaderValueManager.DateHeaderValues GetDateHeaderValues(); + +- public void OnHeartbeat(DateTimeOffset now); + +- public class DateHeaderValues { + { +- public byte[] Bytes; + +- public string String; + +- public DateHeaderValues(); + +- } +- } +- public class Http1Connection : HttpProtocol, IHttpMinRequestBodyDataRateFeature, IHttpMinResponseDataRateFeature, IRequestProcessor { + { +- protected readonly long _keepAliveTicks; + +- public Http1Connection(HttpConnectionContext context); + +- public PipeReader Input { get; } + +- MinDataRate Microsoft.AspNetCore.Server.Kestrel.Core.Features.IHttpMinRequestBodyDataRateFeature.MinDataRate { get; set; } + +- MinDataRate Microsoft.AspNetCore.Server.Kestrel.Core.Features.IHttpMinResponseDataRateFeature.MinDataRate { get; set; } + +- public MinDataRate MinRequestBodyDataRate { get; set; } + +- public MinDataRate MinResponseDataRate { get; set; } + +- public bool RequestTimedOut { get; } + +- public void Abort(ConnectionAbortedException abortReason); + +- protected override void ApplicationAbort(); + +- protected override bool BeginRead(out ValueTask awaitable); + +- protected override void BeginRequestProcessing(); + +- protected override MessageBody CreateMessageBody(); + +- protected override string CreateRequestId(); + +- public void HandleReadDataRateTimeout(); + +- public void HandleRequestHeadersTimeout(); + +- void Microsoft.AspNetCore.Server.Kestrel.Core.Internal.IRequestProcessor.Tick(DateTimeOffset now); + +- public void OnInputOrOutputCompleted(); + +- protected override void OnRequestProcessingEnded(); + +- protected override void OnRequestProcessingEnding(); + +- protected override void OnReset(); + +- public void OnStartLine(HttpMethod method, HttpVersion version, Span target, Span path, Span query, Span customMethod, bool pathEncoded); + +- public void ParseRequest(ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined); + +- public void SendTimeoutResponse(); + +- public void StopProcessingNextRequest(); + +- public bool TakeMessageHeaders(ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined); + +- public bool TakeStartLine(ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined); + +- protected override bool TryParseRequest(ReadResult result, out bool endConnection); + +- } +- public abstract class Http1MessageBody : MessageBody { + { +- protected Http1MessageBody(Http1Connection context); + +- protected void Copy(ReadOnlySequence readableBuffer, PipeWriter writableBuffer); + +- public static MessageBody For(HttpVersion httpVersion, HttpRequestHeaders headers, Http1Connection context); + +- protected override Task OnConsumeAsync(); + +- protected override void OnReadStarted(); + +- protected override Task OnStopAsync(); + +- protected virtual bool Read(ReadOnlySequence readableBuffer, PipeWriter writableBuffer, out SequencePosition consumed, out SequencePosition examined); + +- } +- public class Http1OutputProducer : IDisposable, IHttpOutputAborter, IHttpOutputProducer { + { +- public Http1OutputProducer(PipeWriter pipeWriter, string connectionId, ConnectionContext connectionContext, IKestrelTrace log, ITimeoutControl timeoutControl, IHttpMinResponseDataRateFeature minResponseDataRateFeature); + +- public void Abort(ConnectionAbortedException error); + +- public void Dispose(); + +- public Task FlushAsync(CancellationToken cancellationToken = default(CancellationToken)); + +- public Task Write100ContinueAsync(); + +- public Task WriteAsync(Func callback, T state, CancellationToken cancellationToken); + +- public Task WriteDataAsync(ReadOnlySpan buffer, CancellationToken cancellationToken = default(CancellationToken)); + +- public void WriteResponseHeaders(int statusCode, string reasonPhrase, HttpResponseHeaders responseHeaders); + +- public Task WriteStreamSuffixAsync(); + +- } +- public struct Http1ParsingHandler : IHttpHeadersHandler, IHttpRequestLineHandler { + { +- public Http1Connection Connection; + +- public Http1ParsingHandler(Http1Connection connection); + +- public void OnHeader(Span name, Span value); + +- public void OnStartLine(HttpMethod method, HttpVersion version, Span target, Span path, Span query, Span customMethod, bool pathEncoded); + +- } +- public abstract class HttpHeaders : ICollection>, IDictionary, IEnumerable, IEnumerable>, IHeaderDictionary { + { +- protected bool _isReadOnly; + +- protected Dictionary MaybeUnknown; + +- protected long? _contentLength; + +- protected HttpHeaders(); + +- public long? ContentLength { get; set; } + +- public int Count { get; } + +- StringValues Microsoft.AspNetCore.Http.IHeaderDictionary.this[string key] { get; set; } + +- bool System.Collections.Generic.ICollection>.IsReadOnly { get; } + +- StringValues System.Collections.Generic.IDictionary.this[string key] { get; set; } + +- ICollection System.Collections.Generic.IDictionary.Keys { get; } + +- ICollection System.Collections.Generic.IDictionary.Values { get; } + +- protected Dictionary Unknown { get; } + +- protected virtual bool AddValueFast(string key, in StringValues value); + +- protected static StringValues AppendValue(in StringValues existing, string append); + +- protected static int BitCount(long value); + +- protected virtual void ClearFast(); + +- protected virtual bool CopyToFast(KeyValuePair[] array, int arrayIndex); + +- protected virtual int GetCountFast(); + +- protected virtual IEnumerator> GetEnumeratorFast(); + +- public static TransferCoding GetFinalTransferCoding(in StringValues transferEncoding); + +- public static ConnectionOptions ParseConnection(in StringValues connection); + +- protected virtual bool RemoveFast(string key); + +- public void Reset(); + +- public void SetReadOnly(); + +- protected virtual void SetValueFast(string key, in StringValues value); + +- void System.Collections.Generic.ICollection>.Add(KeyValuePair item); + +- void System.Collections.Generic.ICollection>.Clear(); + +- bool System.Collections.Generic.ICollection>.Contains(KeyValuePair item); + +- void System.Collections.Generic.ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex); + +- bool System.Collections.Generic.ICollection>.Remove(KeyValuePair item); + +- void System.Collections.Generic.IDictionary.Add(string key, StringValues value); + +- bool System.Collections.Generic.IDictionary.ContainsKey(string key); + +- bool System.Collections.Generic.IDictionary.Remove(string key); + +- bool System.Collections.Generic.IDictionary.TryGetValue(string key, out StringValues value); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- protected void ThrowArgumentException(); + +- protected void ThrowDuplicateKeyException(); + +- protected void ThrowHeadersReadOnlyException(); + +- protected void ThrowKeyNotFoundException(); + +- protected virtual bool TryGetValueFast(string key, out StringValues value); + +- public static void ValidateHeaderNameCharacters(string headerCharacters); + +- public static void ValidateHeaderValueCharacters(in StringValues headerValues); + +- public static void ValidateHeaderValueCharacters(string headerCharacters); + +- } + public class HttpParser : IHttpParser where TRequestHandler : IHttpHeadersHandler, IHttpRequestLineHandler { +- bool Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.IHttpParser.ParseHeaders(TRequestHandler handler, in ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined, out int consumedBytes); + +- public bool ParseHeaders(TRequestHandler handler, in ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined, out int consumedBytes); + ++ public bool ParseHeaders(TRequestHandler handler, ref SequenceReader reader); + } +- public abstract class HttpProtocol : IEnumerable, IEnumerable>, IFeatureCollection, IHttpBodyControlFeature, IHttpConnectionFeature, IHttpMaxRequestBodySizeFeature, IHttpRequestFeature, IHttpRequestIdentifierFeature, IHttpRequestLifetimeFeature, IHttpResponseControl, IHttpResponseFeature, IHttpUpgradeFeature { + { +- protected HttpVersion _httpVersion; + +- protected RequestProcessingStatus _requestProcessingStatus; + +- protected Streams _streams; + +- protected volatile bool _keepAlive; + +- protected string _methodText; + +- public HttpProtocol(HttpConnectionContext context); + +- public bool AllowSynchronousIO { get; set; } + +- public IFeatureCollection ConnectionFeatures { get; } + +- protected string ConnectionId { get; } + +- public string ConnectionIdFeature { get; set; } + +- public bool HasResponseStarted { get; } + +- public bool HasStartedConsumingRequestBody { get; set; } + +- protected HttpRequestHeaders HttpRequestHeaders { get; } + +- public IHttpResponseControl HttpResponseControl { get; set; } + +- protected HttpResponseHeaders HttpResponseHeaders { get; } + +- public string HttpVersion { get; set; } + +- public bool IsUpgradableRequest { get; private set; } + +- public bool IsUpgraded { get; set; } + +- public IPAddress LocalIpAddress { get; set; } + +- public int LocalPort { get; set; } + +- protected IKestrelTrace Log { get; } + +- public long? MaxRequestBodySize { get; set; } + +- public HttpMethod Method { get; set; } + +- bool Microsoft.AspNetCore.Http.Features.IFeatureCollection.IsReadOnly { get; } + +- object Microsoft.AspNetCore.Http.Features.IFeatureCollection.this[Type key] { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IFeatureCollection.Revision { get; } + +- bool Microsoft.AspNetCore.Http.Features.IHttpBodyControlFeature.AllowSynchronousIO { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.ConnectionId { get; set; } + +- IPAddress Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.LocalIpAddress { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.LocalPort { get; set; } + +- IPAddress Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.RemoteIpAddress { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.RemotePort { get; set; } + +- bool Microsoft.AspNetCore.Http.Features.IHttpMaxRequestBodySizeFeature.IsReadOnly { get; } + +- long? Microsoft.AspNetCore.Http.Features.IHttpMaxRequestBodySizeFeature.MaxRequestBodySize { get; set; } + +- Stream Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.Body { get; set; } + +- IHeaderDictionary Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.Headers { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.Method { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.Path { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.PathBase { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.Protocol { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.QueryString { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.RawTarget { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestFeature.Scheme { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpRequestIdentifierFeature.TraceIdentifier { get; set; } + +- CancellationToken Microsoft.AspNetCore.Http.Features.IHttpRequestLifetimeFeature.RequestAborted { get; set; } + +- Stream Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.Body { get; set; } + +- bool Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.HasStarted { get; } + +- IHeaderDictionary Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.Headers { get; set; } + +- string Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.ReasonPhrase { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.StatusCode { get; set; } + +- bool Microsoft.AspNetCore.Http.Features.IHttpUpgradeFeature.IsUpgradableRequest { get; } + +- public IHttpOutputProducer Output { get; protected set; } + +- public string Path { get; set; } + +- public string PathBase { get; set; } + +- public string QueryString { get; set; } + +- public string RawTarget { get; set; } + +- public string ReasonPhrase { get; set; } + +- public IPAddress RemoteIpAddress { get; set; } + +- public int RemotePort { get; set; } + +- public CancellationToken RequestAborted { get; set; } + +- public Stream RequestBody { get; set; } + +- public Pipe RequestBodyPipe { get; protected set; } + +- public IHeaderDictionary RequestHeaders { get; set; } + +- public Stream ResponseBody { get; set; } + +- public IHeaderDictionary ResponseHeaders { get; set; } + +- public string Scheme { get; set; } + +- protected KestrelServerOptions ServerOptions { get; } + +- public ServiceContext ServiceContext { get; } + +- public int StatusCode { get; set; } + +- public ITimeoutControl TimeoutControl { get; } + +- public string TraceIdentifier { get; set; } + +- protected void AbortRequest(); + +- protected abstract void ApplicationAbort(); + +- protected virtual bool BeginRead(out ValueTask awaitable); + +- protected virtual void BeginRequestProcessing(); + +- protected abstract MessageBody CreateMessageBody(); + +- protected abstract string CreateRequestId(); + +- protected Task FireOnCompleted(); + +- protected Task FireOnStarting(); + +- public Task FlushAsync(CancellationToken cancellationToken = default(CancellationToken)); + +- public void HandleNonBodyResponseWrite(); + +- public Task InitializeResponseAsync(int firstWriteByteCount); + +- public Task InitializeResponseAwaited(Task startingTask, int firstWriteByteCount); + +- public void InitializeStreams(MessageBody messageBody); + +- TFeature Microsoft.AspNetCore.Http.Features.IFeatureCollection.Get(); + +- void Microsoft.AspNetCore.Http.Features.IFeatureCollection.Set(TFeature feature); + +- void Microsoft.AspNetCore.Http.Features.IHttpRequestLifetimeFeature.Abort(); + +- void Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.OnCompleted(Func callback, object state); + +- void Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.OnStarting(Func callback, object state); + +- Task Microsoft.AspNetCore.Http.Features.IHttpUpgradeFeature.UpgradeAsync(); + +- public void OnCompleted(Func callback, object state); + +- protected virtual void OnErrorAfterResponseStarted(); + +- public void OnHeader(Span name, Span value); + +- protected virtual void OnRequestProcessingEnded(); + +- protected virtual void OnRequestProcessingEnding(); + +- protected abstract void OnReset(); + +- public void OnStarting(Func callback, object state); + +- protected void PoisonRequestBodyStream(Exception abortReason); + +- public Task ProcessRequestsAsync(IHttpApplication application); + +- public void ProduceContinue(); + +- protected Task ProduceEnd(); + +- protected void ReportApplicationError(Exception ex); + +- public void Reset(); + +- protected void ResetHttp1Features(); + +- protected void ResetHttp2Features(); + +- public void SetBadRequestState(BadHttpRequestException ex); + +- public bool StatusCanHaveBody(int statusCode); + +- public void StopStreams(); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public void ThrowRequestTargetRejected(Span target); + +- protected abstract bool TryParseRequest(ReadResult result, out bool endConnection); + +- protected Task TryProduceInvalidRequestResponse(); + +- protected void VerifyResponseContentLength(); + +- public Task WriteAsync(ReadOnlyMemory data, CancellationToken cancellationToken = default(CancellationToken)); + +- public Task WriteAsyncAwaited(Task initializeTask, ReadOnlyMemory data, CancellationToken cancellationToken); + +- } +- public class HttpRequestHeaders : HttpHeaders { + { +- public HttpRequestHeaders(); + +- public bool HasConnection { get; } + +- public bool HasTransferEncoding { get; } + +- public StringValues HeaderAccept { get; set; } + +- public StringValues HeaderAcceptCharset { get; set; } + +- public StringValues HeaderAcceptEncoding { get; set; } + +- public StringValues HeaderAcceptLanguage { get; set; } + +- public StringValues HeaderAccessControlRequestHeaders { get; set; } + +- public StringValues HeaderAccessControlRequestMethod { get; set; } + +- public StringValues HeaderAllow { get; set; } + +- public StringValues HeaderAuthorization { get; set; } + +- public StringValues HeaderCacheControl { get; set; } + +- public StringValues HeaderConnection { get; set; } + +- public StringValues HeaderContentEncoding { get; set; } + +- public StringValues HeaderContentLanguage { get; set; } + +- public StringValues HeaderContentLength { get; set; } + +- public StringValues HeaderContentLocation { get; set; } + +- public StringValues HeaderContentMD5 { get; set; } + +- public StringValues HeaderContentRange { get; set; } + +- public StringValues HeaderContentType { get; set; } + +- public StringValues HeaderCookie { get; set; } + +- public StringValues HeaderDate { get; set; } + +- public StringValues HeaderExpect { get; set; } + +- public StringValues HeaderExpires { get; set; } + +- public StringValues HeaderFrom { get; set; } + +- public StringValues HeaderHost { get; set; } + +- public StringValues HeaderIfMatch { get; set; } + +- public StringValues HeaderIfModifiedSince { get; set; } + +- public StringValues HeaderIfNoneMatch { get; set; } + +- public StringValues HeaderIfRange { get; set; } + +- public StringValues HeaderIfUnmodifiedSince { get; set; } + +- public StringValues HeaderKeepAlive { get; set; } + +- public StringValues HeaderLastModified { get; set; } + +- public StringValues HeaderMaxForwards { get; set; } + +- public StringValues HeaderOrigin { get; set; } + +- public StringValues HeaderPragma { get; set; } + +- public StringValues HeaderProxyAuthorization { get; set; } + +- public StringValues HeaderRange { get; set; } + +- public StringValues HeaderReferer { get; set; } + +- public StringValues HeaderTE { get; set; } + +- public StringValues HeaderTrailer { get; set; } + +- public StringValues HeaderTransferEncoding { get; set; } + +- public StringValues HeaderTranslate { get; set; } + +- public StringValues HeaderUpgrade { get; set; } + +- public StringValues HeaderUserAgent { get; set; } + +- public StringValues HeaderVia { get; set; } + +- public StringValues HeaderWarning { get; set; } + +- public int HostCount { get; } + +- protected override bool AddValueFast(string key, in StringValues value); + +- public unsafe void Append(byte* pKeyBytes, int keyLength, string value); + +- public void Append(Span name, string value); + +- protected override void ClearFast(); + +- protected override bool CopyToFast(KeyValuePair[] array, int arrayIndex); + +- protected override int GetCountFast(); + +- public HttpRequestHeaders.Enumerator GetEnumerator(); + +- protected override IEnumerator> GetEnumeratorFast(); + +- protected override bool RemoveFast(string key); + +- protected override void SetValueFast(string key, in StringValues value); + +- protected override bool TryGetValueFast(string key, out StringValues value); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { + { +- public KeyValuePair Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } +- public enum HttpRequestTarget { + { +- AbsoluteForm = 1, + +- AsteriskForm = 3, + +- AuthorityForm = 2, + +- OriginForm = 0, + +- Unknown = -1, + +- } +- public class HttpResponseHeaders : HttpHeaders { + { +- public HttpResponseHeaders(); + +- public bool HasConnection { get; } + +- public bool HasDate { get; } + +- public bool HasServer { get; } + +- public bool HasTransferEncoding { get; } + +- public StringValues HeaderAcceptRanges { get; set; } + +- public StringValues HeaderAccessControlAllowCredentials { get; set; } + +- public StringValues HeaderAccessControlAllowHeaders { get; set; } + +- public StringValues HeaderAccessControlAllowMethods { get; set; } + +- public StringValues HeaderAccessControlAllowOrigin { get; set; } + +- public StringValues HeaderAccessControlExposeHeaders { get; set; } + +- public StringValues HeaderAccessControlMaxAge { get; set; } + +- public StringValues HeaderAge { get; set; } + +- public StringValues HeaderAllow { get; set; } + +- public StringValues HeaderCacheControl { get; set; } + +- public StringValues HeaderConnection { get; set; } + +- public StringValues HeaderContentEncoding { get; set; } + +- public StringValues HeaderContentLanguage { get; set; } + +- public StringValues HeaderContentLength { get; set; } + +- public StringValues HeaderContentLocation { get; set; } + +- public StringValues HeaderContentMD5 { get; set; } + +- public StringValues HeaderContentRange { get; set; } + +- public StringValues HeaderContentType { get; set; } + +- public StringValues HeaderDate { get; set; } + +- public StringValues HeaderETag { get; set; } + +- public StringValues HeaderExpires { get; set; } + +- public StringValues HeaderKeepAlive { get; set; } + +- public StringValues HeaderLastModified { get; set; } + +- public StringValues HeaderLocation { get; set; } + +- public StringValues HeaderPragma { get; set; } + +- public StringValues HeaderProxyAuthenticate { get; set; } + +- public StringValues HeaderRetryAfter { get; set; } + +- public StringValues HeaderServer { get; set; } + +- public StringValues HeaderSetCookie { get; set; } + +- public StringValues HeaderTrailer { get; set; } + +- public StringValues HeaderTransferEncoding { get; set; } + +- public StringValues HeaderUpgrade { get; set; } + +- public StringValues HeaderVary { get; set; } + +- public StringValues HeaderVia { get; set; } + +- public StringValues HeaderWarning { get; set; } + +- public StringValues HeaderWWWAuthenticate { get; set; } + +- protected override bool AddValueFast(string key, in StringValues value); + +- protected override void ClearFast(); + +- protected override bool CopyToFast(KeyValuePair[] array, int arrayIndex); + +- protected override int GetCountFast(); + +- public HttpResponseHeaders.Enumerator GetEnumerator(); + +- protected override IEnumerator> GetEnumeratorFast(); + +- protected override bool RemoveFast(string key); + +- public void SetRawConnection(in StringValues value, byte[] raw); + +- public void SetRawDate(in StringValues value, byte[] raw); + +- public void SetRawServer(in StringValues value, byte[] raw); + +- public void SetRawTransferEncoding(in StringValues value, byte[] raw); + +- protected override void SetValueFast(string key, in StringValues value); + +- protected override bool TryGetValueFast(string key, out StringValues value); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { + { +- public KeyValuePair Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } +- public class HttpResponseTrailers : HttpHeaders { + { +- public HttpResponseTrailers(); + +- public StringValues HeaderETag { get; set; } + +- protected override bool AddValueFast(string key, in StringValues value); + +- protected override void ClearFast(); + +- protected override bool CopyToFast(KeyValuePair[] array, int arrayIndex); + +- protected override int GetCountFast(); + +- public HttpResponseTrailers.Enumerator GetEnumerator(); + +- protected override IEnumerator> GetEnumeratorFast(); + +- protected override bool RemoveFast(string key); + +- protected override void SetValueFast(string key, in StringValues value); + +- protected override bool TryGetValueFast(string key, out StringValues value); + +- public struct Enumerator : IDisposable, IEnumerator, IEnumerator> { + { +- public KeyValuePair Current { get; } + +- object System.Collections.IEnumerator.Current { get; } + +- public void Dispose(); + +- public bool MoveNext(); + +- public void Reset(); + +- } +- } + public interface IHttpHeadersHandler { ++ void OnHeadersComplete(); + } +- public interface IHttpOutputAborter { + { +- void Abort(ConnectionAbortedException abortReason); + +- } +- public interface IHttpOutputProducer { + { +- Task FlushAsync(CancellationToken cancellationToken); + +- Task Write100ContinueAsync(); + +- Task WriteAsync(Func callback, T state, CancellationToken cancellationToken); + +- Task WriteDataAsync(ReadOnlySpan data, CancellationToken cancellationToken); + +- void WriteResponseHeaders(int statusCode, string ReasonPhrase, HttpResponseHeaders responseHeaders); + +- Task WriteStreamSuffixAsync(); + +- } + public interface IHttpParser where TRequestHandler : IHttpHeadersHandler, IHttpRequestLineHandler { +- bool ParseHeaders(TRequestHandler handler, in ReadOnlySequence buffer, out SequencePosition consumed, out SequencePosition examined, out int consumedBytes); + ++ bool ParseHeaders(TRequestHandler handler, ref SequenceReader reader); + } +- public interface IHttpResponseControl { + { +- Task FlushAsync(CancellationToken cancellationToken); + +- void ProduceContinue(); + +- Task WriteAsync(ReadOnlyMemory data, CancellationToken cancellationToken); + +- } +- public abstract class MessageBody { + { +- protected MessageBody(HttpProtocol context, MinDataRate minRequestBodyDataRate); + +- public virtual bool IsEmpty { get; } + +- protected IKestrelTrace Log { get; } + +- public bool RequestKeepAlive { get; protected set; } + +- public bool RequestUpgrade { get; protected set; } + +- public static MessageBody ZeroContentLengthClose { get; } + +- public static MessageBody ZeroContentLengthKeepAlive { get; } + +- protected void AddAndCheckConsumedBytes(long consumedBytes); + +- public virtual Task ConsumeAsync(); + +- public virtual Task CopyToAsync(Stream destination, CancellationToken cancellationToken = default(CancellationToken)); + +- protected virtual Task OnConsumeAsync(); + +- protected virtual void OnDataRead(long bytesRead); + +- protected virtual void OnReadStarted(); + +- protected virtual void OnReadStarting(); + +- protected virtual Task OnStopAsync(); + +- public virtual ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default(CancellationToken)); + +- public virtual Task StopAsync(); + +- protected void TryProduceContinue(); + +- } +- public static class PathNormalizer { + { +- public unsafe static bool ContainsDotSegments(byte* start, byte* end); + +- public static string DecodePath(Span path, bool pathEncoded, string rawTarget, int queryLength); + +- public unsafe static int RemoveDotSegments(byte* start, byte* end); + +- public static int RemoveDotSegments(Span input); + +- } +- public static class PipelineExtensions { + { +- public static ArraySegment GetArray(this Memory buffer); + +- public static ArraySegment GetArray(this ReadOnlyMemory memory); + +- public static ReadOnlySpan ToSpan(this ReadOnlySequence buffer); + +- } +- public enum ProduceEndType { + { +- ConnectionKeepAlive = 2, + +- SocketDisconnect = 1, + +- SocketShutdown = 0, + +- } +- public static class ReasonPhrases { + { +- public static byte[] ToStatusBytes(int statusCode, string reasonPhrase = null); + +- } +- public enum RequestProcessingStatus { + { +- AppStarted = 3, + +- ParsingHeaders = 2, + +- ParsingRequestLine = 1, + +- RequestPending = 0, + +- ResponseStarted = 4, + +- } +- public enum RequestRejectionReason { + { +- BadChunkSizeData = 9, + +- BadChunkSuffix = 8, + +- ChunkedRequestIncomplete = 10, + +- ConnectMethodRequired = 23, + +- FinalTransferCodingNotChunked = 19, + +- HeadersExceedMaxTotalSize = 14, + +- InvalidCharactersInHeaderName = 12, + +- InvalidContentLength = 5, + +- InvalidHostHeader = 26, + +- InvalidRequestHeader = 2, + +- InvalidRequestHeadersNoCRLF = 3, + +- InvalidRequestLine = 1, + +- InvalidRequestTarget = 11, + +- LengthRequired = 20, + +- LengthRequiredHttp10 = 21, + +- MalformedRequestInvalidHeaders = 4, + +- MissingHostHeader = 24, + +- MultipleContentLengths = 6, + +- MultipleHostHeaders = 25, + +- OptionsMethodRequired = 22, + +- RequestBodyExceedsContentLength = 28, + +- RequestBodyTimeout = 18, + +- RequestBodyTooLarge = 16, + +- RequestHeadersTimeout = 17, + +- RequestLineTooLong = 13, + +- TooManyHeaders = 15, + +- UnexpectedEndOfRequestContent = 7, + +- UnrecognizedHTTPVersion = 0, + +- UpgradeRequestCannotHavePayload = 27, + +- } +- public enum TransferCoding { + { +- Chunked = 1, + +- None = 0, + +- Other = 2, + +- } + } +- namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2 { + { +- public class Http2Connection : IHttp2StreamLifetimeHandler, IHttpHeadersHandler, IRequestProcessor { + { +- public Http2Connection(HttpConnectionContext context); + +- public static byte[] ClientPreface { get; } + +- public IFeatureCollection ConnectionFeatures { get; } + +- public string ConnectionId { get; } + +- public PipeReader Input { get; } + +- public KestrelServerLimits Limits { get; } + +- public IKestrelTrace Log { get; } + +- public ITimeoutControl TimeoutControl { get; } + +- public void Abort(ConnectionAbortedException ex); + +- public void HandleReadDataRateTimeout(); + +- public void HandleRequestHeadersTimeout(); + +- void Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.IHttp2StreamLifetimeHandler.OnStreamCompleted(int streamId); + +- void Microsoft.AspNetCore.Server.Kestrel.Core.Internal.IRequestProcessor.Tick(DateTimeOffset now); + +- public void OnHeader(Span name, Span value); + +- public void OnInputOrOutputCompleted(); + +- public Task ProcessRequestsAsync(IHttpApplication application); + +- public void StopProcessingNextRequest(); + +- public void StopProcessingNextRequest(bool sendGracefulGoAway = false); + +- } +- public class Http2ConnectionErrorException : Exception { + { +- public Http2ConnectionErrorException(string message, Http2ErrorCode errorCode); + +- public Http2ErrorCode ErrorCode { get; } + +- } +- public enum Http2ConnectionState { + { +- Closed = 2, + +- Closing = 1, + +- Open = 0, + +- } +- public enum Http2ContinuationFrameFlags : byte { + { +- END_HEADERS = (byte)4, + +- NONE = (byte)0, + +- } +- public enum Http2DataFrameFlags : byte { + { +- END_STREAM = (byte)1, + +- NONE = (byte)0, + +- PADDED = (byte)8, + +- } +- public enum Http2ErrorCode : uint { + { +- CANCEL = (uint)8, + +- COMPRESSION_ERROR = (uint)9, + +- CONNECT_ERROR = (uint)10, + +- ENHANCE_YOUR_CALM = (uint)11, + +- FLOW_CONTROL_ERROR = (uint)3, + +- FRAME_SIZE_ERROR = (uint)6, + +- HTTP_1_1_REQUIRED = (uint)13, + +- INADEQUATE_SECURITY = (uint)12, + +- INTERNAL_ERROR = (uint)2, + +- NO_ERROR = (uint)0, + +- PROTOCOL_ERROR = (uint)1, + +- REFUSED_STREAM = (uint)7, + +- SETTINGS_TIMEOUT = (uint)4, + +- STREAM_CLOSED = (uint)5, + +- } +- public class Http2Frame { + { +- public Http2Frame(); + +- public bool ContinuationEndHeaders { get; } + +- public Http2ContinuationFrameFlags ContinuationFlags { get; set; } + +- public bool DataEndStream { get; } + +- public Http2DataFrameFlags DataFlags { get; set; } + +- public bool DataHasPadding { get; } + +- public byte DataPadLength { get; set; } + +- public int DataPayloadLength { get; } + +- public byte Flags { get; set; } + +- public Http2ErrorCode GoAwayErrorCode { get; set; } + +- public int GoAwayLastStreamId { get; set; } + +- public bool HeadersEndHeaders { get; } + +- public bool HeadersEndStream { get; } + +- public Http2HeadersFrameFlags HeadersFlags { get; set; } + +- public bool HeadersHasPadding { get; } + +- public bool HeadersHasPriority { get; } + +- public byte HeadersPadLength { get; set; } + +- public int HeadersPayloadLength { get; } + +- public byte HeadersPriorityWeight { get; set; } + +- public int HeadersStreamDependency { get; set; } + +- public int PayloadLength { get; set; } + +- public bool PingAck { get; } + +- public Http2PingFrameFlags PingFlags { get; set; } + +- public bool PriorityIsExclusive { get; set; } + +- public int PriorityStreamDependency { get; set; } + +- public byte PriorityWeight { get; set; } + +- public Http2ErrorCode RstStreamErrorCode { get; set; } + +- public bool SettingsAck { get; } + +- public Http2SettingsFrameFlags SettingsFlags { get; set; } + +- public int StreamId { get; set; } + +- public Http2FrameType Type { get; set; } + +- public int WindowUpdateSizeIncrement { get; set; } + +- public void PrepareContinuation(Http2ContinuationFrameFlags flags, int streamId); + +- public void PrepareData(int streamId, byte? padLength = default(byte?)); + +- public void PrepareGoAway(int lastStreamId, Http2ErrorCode errorCode); + +- public void PrepareHeaders(Http2HeadersFrameFlags flags, int streamId); + +- public void PreparePing(Http2PingFrameFlags flags); + +- public void PreparePriority(int streamId, int streamDependency, bool exclusive, byte weight); + +- public void PrepareRstStream(int streamId, Http2ErrorCode errorCode); + +- public void PrepareSettings(Http2SettingsFrameFlags flags); + +- public void PrepareWindowUpdate(int streamId, int sizeIncrement); + +- public override string ToString(); + +- } +- public static class Http2FrameReader { + { +- public const int HeaderLength = 9; + +- public const int SettingSize = 6; + +- public static int GetPayloadFieldsLength(Http2Frame frame); + +- public static bool ReadFrame(ReadOnlySequence readableBuffer, Http2Frame frame, uint maxFrameSize, out ReadOnlySequence framePayload); + +- public static IList ReadSettings(ReadOnlySequence payload); + +- } +- public enum Http2FrameType : byte { + { +- CONTINUATION = (byte)9, + +- DATA = (byte)0, + +- GOAWAY = (byte)7, + +- HEADERS = (byte)1, + +- PING = (byte)6, + +- PRIORITY = (byte)2, + +- PUSH_PROMISE = (byte)5, + +- RST_STREAM = (byte)3, + +- SETTINGS = (byte)4, + +- WINDOW_UPDATE = (byte)8, + +- } +- public class Http2FrameWriter { + { +- public Http2FrameWriter(PipeWriter outputPipeWriter, ConnectionContext connectionContext, Http2Connection http2Connection, OutputFlowControl connectionOutputFlowControl, ITimeoutControl timeoutControl, MinDataRate minResponseDataRate, string connectionId, IKestrelTrace log); + +- public void Abort(ConnectionAbortedException error); + +- public void AbortPendingStreamDataWrites(StreamOutputFlowControl flowControl); + +- public void Complete(); + +- public Task FlushAsync(IHttpOutputAborter outputAborter, CancellationToken cancellationToken); + +- public bool TryUpdateConnectionWindow(int bytes); + +- public bool TryUpdateStreamWindow(StreamOutputFlowControl flowControl, int bytes); + +- public void UpdateMaxFrameSize(uint maxFrameSize); + +- public Task Write100ContinueAsync(int streamId); + +- public Task WriteDataAsync(int streamId, StreamOutputFlowControl flowControl, ReadOnlySequence data, bool endStream); + +- public Task WriteGoAwayAsync(int lastStreamId, Http2ErrorCode errorCode); + +- public Task WritePingAsync(Http2PingFrameFlags flags, ReadOnlySequence payload); + +- public void WriteResponseHeaders(int streamId, int statusCode, IHeaderDictionary headers); + +- public Task WriteResponseTrailers(int streamId, HttpResponseTrailers headers); + +- public Task WriteRstStreamAsync(int streamId, Http2ErrorCode errorCode); + +- public Task WriteSettingsAckAsync(); + +- public Task WriteSettingsAsync(IList settings); + +- public Task WriteWindowUpdateAsync(int streamId, int sizeIncrement); + +- } +- public enum Http2HeadersFrameFlags : byte { + { +- END_HEADERS = (byte)4, + +- END_STREAM = (byte)1, + +- NONE = (byte)0, + +- PADDED = (byte)8, + +- PRIORITY = (byte)32, + +- } +- public class Http2MessageBody : MessageBody { + { +- public static MessageBody For(Http2Stream context, MinDataRate minRequestBodyDataRate); + +- protected override void OnDataRead(long bytesRead); + +- protected override void OnReadStarted(); + +- protected override void OnReadStarting(); + +- } +- public class Http2OutputProducer : IHttpOutputAborter, IHttpOutputProducer { + { +- public Http2OutputProducer(int streamId, Http2FrameWriter frameWriter, StreamOutputFlowControl flowControl, ITimeoutControl timeoutControl, MemoryPool pool, Http2Stream stream, IKestrelTrace log); + +- public void Dispose(); + +- public Task FlushAsync(CancellationToken cancellationToken); + +- void Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.IHttpOutputAborter.Abort(ConnectionAbortedException abortReason); + +- public Task Write100ContinueAsync(); + +- public Task WriteAsync(Func callback, T state, CancellationToken cancellationToken); + +- public Task WriteDataAsync(ReadOnlySpan data, CancellationToken cancellationToken); + +- public void WriteResponseHeaders(int statusCode, string ReasonPhrase, HttpResponseHeaders responseHeaders); + +- public Task WriteRstStreamAsync(Http2ErrorCode error); + +- public Task WriteStreamSuffixAsync(); + +- } +- public struct Http2PeerSetting { + { +- public Http2PeerSetting(Http2SettingsParameter parameter, uint value); + +- public Http2SettingsParameter Parameter { get; } + +- public uint Value { get; } + +- } +- public class Http2PeerSettings { + { +- public const bool DefaultEnablePush = true; + +- public const uint DefaultHeaderTableSize = (uint)4096; + +- public const uint DefaultInitialWindowSize = (uint)65535; + +- public const uint DefaultMaxConcurrentStreams = (uint)4294967295; + +- public const uint DefaultMaxFrameSize = (uint)16384; + +- public const uint DefaultMaxHeaderListSize = (uint)4294967295; + +- public const uint MaxWindowSize = (uint)2147483647; + +- public Http2PeerSettings(); + +- public bool EnablePush { get; set; } + +- public uint HeaderTableSize { get; set; } + +- public uint InitialWindowSize { get; set; } + +- public uint MaxConcurrentStreams { get; set; } + +- public uint MaxFrameSize { get; set; } + +- public uint MaxHeaderListSize { get; set; } + +- public void Update(IList settings); + +- } +- public enum Http2PingFrameFlags : byte { + { +- ACK = (byte)1, + +- NONE = (byte)0, + +- } +- public enum Http2SettingsFrameFlags : byte { + { +- ACK = (byte)1, + +- NONE = (byte)0, + +- } +- public enum Http2SettingsParameter : ushort { + { +- SETTINGS_ENABLE_PUSH = (ushort)2, + +- SETTINGS_HEADER_TABLE_SIZE = (ushort)1, + +- SETTINGS_INITIAL_WINDOW_SIZE = (ushort)4, + +- SETTINGS_MAX_CONCURRENT_STREAMS = (ushort)3, + +- SETTINGS_MAX_FRAME_SIZE = (ushort)5, + +- SETTINGS_MAX_HEADER_LIST_SIZE = (ushort)6, + +- } +- public class Http2SettingsParameterOutOfRangeException : Exception { + { +- public Http2SettingsParameterOutOfRangeException(Http2SettingsParameter parameter, long lowerBound, long upperBound); + +- public Http2SettingsParameter Parameter { get; } + +- } +- public class Http2Stream : HttpProtocol, IHttp2StreamIdFeature, IHttpResponseTrailersFeature { + { +- public Http2Stream(Http2StreamContext context); + +- public bool EndStreamReceived { get; } + +- public long? InputRemaining { get; internal set; } + +- IHeaderDictionary Microsoft.AspNetCore.Http.Features.IHttpResponseTrailersFeature.Trailers { get; set; } + +- int Microsoft.AspNetCore.Server.Kestrel.Core.Features.IHttp2StreamIdFeature.StreamId { get; } + +- public bool RequestBodyStarted { get; private set; } + +- public int StreamId { get; } + +- public void Abort(IOException abortReason); + +- public void AbortRstStreamReceived(); + +- protected override void ApplicationAbort(); + +- protected override MessageBody CreateMessageBody(); + +- protected override string CreateRequestId(); + +- public Task OnDataAsync(Http2Frame dataFrame, ReadOnlySequence payload); + +- public void OnDataRead(int bytesRead); + +- public void OnEndStreamReceived(); + +- protected override void OnErrorAfterResponseStarted(); + +- protected override void OnRequestProcessingEnded(); + +- protected override void OnReset(); + +- protected override bool TryParseRequest(ReadResult result, out bool endConnection); + +- public bool TryUpdateOutputWindow(int bytes); + +- } +- public class Http2StreamContext : HttpConnectionContext { + { +- public Http2StreamContext(); + +- public Http2PeerSettings ClientPeerSettings { get; set; } + +- public InputFlowControl ConnectionInputFlowControl { get; set; } + +- public OutputFlowControl ConnectionOutputFlowControl { get; set; } + +- public Http2FrameWriter FrameWriter { get; set; } + +- public Http2PeerSettings ServerPeerSettings { get; set; } + +- public int StreamId { get; set; } + +- public IHttp2StreamLifetimeHandler StreamLifetimeHandler { get; set; } + +- } +- public class Http2StreamErrorException : Exception { + { +- public Http2StreamErrorException(int streamId, string message, Http2ErrorCode errorCode); + +- public Http2ErrorCode ErrorCode { get; } + +- public int StreamId { get; } + +- } +- public interface IHttp2StreamLifetimeHandler { + { +- void OnStreamCompleted(int streamId); + +- } +- public class ThreadPoolAwaitable : ICriticalNotifyCompletion, INotifyCompletion { + { +- public static ThreadPoolAwaitable Instance; + +- public bool IsCompleted { get; } + +- public ThreadPoolAwaitable GetAwaiter(); + +- public void GetResult(); + +- public void OnCompleted(Action continuation); + +- public void UnsafeOnCompleted(Action continuation); + +- } +- } +- namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.FlowControl { + { +- public struct FlowControl { + { +- public FlowControl(uint initialWindowSize); + +- public int Available { get; private set; } + +- public bool IsAborted { get; private set; } + +- public void Abort(); + +- public void Advance(int bytes); + +- public bool TryUpdateWindow(int bytes); + +- } +- public class InputFlowControl { + { +- public InputFlowControl(uint initialWindowSize, uint minWindowSizeIncrement); + +- public bool IsAvailabilityLow { get; } + +- public int Abort(); + +- public void StopWindowUpdates(); + +- public bool TryAdvance(int bytes); + +- public bool TryUpdateWindow(int bytes, out int updateSize); + +- } +- public class OutputFlowControl { + { +- public OutputFlowControl(uint initialWindowSize); + +- public OutputFlowControlAwaitable AvailabilityAwaitable { get; } + +- public int Available { get; } + +- public bool IsAborted { get; } + +- public void Abort(); + +- public void Advance(int bytes); + +- public bool TryUpdateWindow(int bytes); + +- } +- public class OutputFlowControlAwaitable : ICriticalNotifyCompletion, INotifyCompletion { + { +- public OutputFlowControlAwaitable(); + +- public bool IsCompleted { get; } + +- public void Complete(); + +- public OutputFlowControlAwaitable GetAwaiter(); + +- public void GetResult(); + +- public void OnCompleted(Action continuation); + +- public void UnsafeOnCompleted(Action continuation); + +- } +- public class StreamInputFlowControl { + { +- public StreamInputFlowControl(int streamId, Http2FrameWriter frameWriter, InputFlowControl connectionLevelFlowControl, uint initialWindowSize, uint minWindowSizeIncrement); + +- public void Abort(); + +- public void Advance(int bytes); + +- public void StopWindowUpdates(); + +- public void UpdateWindows(int bytes); + +- } +- public class StreamOutputFlowControl { + { +- public StreamOutputFlowControl(OutputFlowControl connectionLevelFlowControl, uint initialWindowSize); + +- public int Available { get; } + +- public bool IsAborted { get; } + +- public void Abort(); + +- public void Advance(int bytes); + +- public int AdvanceUpToAndWait(long bytes, out OutputFlowControlAwaitable awaitable); + +- public bool TryUpdateWindow(int bytes); + +- } +- } +- namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2.HPack { + { +- public class DynamicTable { + { +- public DynamicTable(int maxSize); + +- public int Count { get; } + +- public int MaxSize { get; } + +- public int Size { get; } + +- public HeaderField this[int index] { get; } + +- public void Insert(Span name, Span value); + +- public void Resize(int maxSize); + +- } +- public struct HeaderField { + { +- public const int RfcOverhead = 32; + +- public HeaderField(Span name, Span value); + +- public int Length { get; } + +- public byte[] Name { get; } + +- public byte[] Value { get; } + +- public static int GetLength(int nameLength, int valueLength); + +- } +- public class HPackDecoder { + { +- public HPackDecoder(int maxDynamicTableSize, int maxRequestHeaderFieldSize); + +- public void Decode(ReadOnlySequence data, bool endHeaders, IHttpHeadersHandler handler); + +- } +- public class HPackDecodingException : Exception { + { +- public HPackDecodingException(string message); + +- public HPackDecodingException(string message, Exception innerException); + +- } +- public class HPackEncoder { + { +- public HPackEncoder(); + +- public bool BeginEncode(IEnumerable> headers, Span buffer, out int length); + +- public bool BeginEncode(int statusCode, IEnumerable> headers, Span buffer, out int length); + +- public bool Encode(Span buffer, out int length); + +- } +- public class HPackEncodingException : Exception { + { +- public HPackEncodingException(string message); + +- public HPackEncodingException(string message, Exception innerException); + +- } +- public class Huffman { + { +- public Huffman(); + +- public static int Decode(ReadOnlySpan src, Span dst); + +- public static (uint encoded, int bitLength) Encode(int data); + +- } +- public class HuffmanDecodingException : Exception { + { +- public HuffmanDecodingException(string message); + +- } +- public class IntegerDecoder { + { +- public IntegerDecoder(); + +- public bool BeginTryDecode(byte b, int prefixLength, out int result); + +- public static void ThrowIntegerTooBigException(); + +- public bool TryDecode(byte b, out int result); + +- } +- public static class IntegerEncoder { + { +- public static bool Encode(int i, int n, Span buffer, out int length); + +- } +- public class StaticTable { + { +- public int Count { get; } + +- public static StaticTable Instance { get; } + +- public IReadOnlyDictionary StatusIndex { get; } + +- public HeaderField this[int index] { get; } + +- } +- public static class StatusCodes { + { +- public static byte[] ToStatusBytes(int statusCode); + +- } +- } +- namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure { + { +- public class ConnectionManager { + { +- public ConnectionManager(IKestrelTrace trace, ResourceCounter upgradedConnections); + +- public ConnectionManager(IKestrelTrace trace, long? upgradedConnectionLimit); + +- public ResourceCounter UpgradedConnectionCount { get; } + +- public void AddConnection(long id, KestrelConnection connection); + +- public void RemoveConnection(long id); + +- public void Walk(Action callback); + +- } +- public static class ConnectionManagerShutdownExtensions { + { +- public static Task AbortAllConnectionsAsync(this ConnectionManager connectionManager); + +- public static Task CloseAllConnectionsAsync(this ConnectionManager connectionManager, CancellationToken token); + +- } +- public class ConnectionReference { + { +- public ConnectionReference(KestrelConnection connection); + +- public string ConnectionId { get; } + +- public bool TryGetConnection(out KestrelConnection connection); + +- } +- public class Disposable : IDisposable { + { +- public Disposable(Action dispose); + +- public void Dispose(); + +- protected virtual void Dispose(bool disposing); + +- } +- public class Heartbeat : IDisposable { + { +- public static readonly TimeSpan Interval; + +- public Heartbeat(IHeartbeatHandler[] callbacks, ISystemClock systemClock, IDebugger debugger, IKestrelTrace trace); + +- public void Dispose(); + +- public void Start(); + +- } +- public class HeartbeatManager : IHeartbeatHandler, ISystemClock { + { +- public HeartbeatManager(ConnectionManager connectionManager); + +- public DateTimeOffset UtcNow { get; } + +- public void OnHeartbeat(DateTimeOffset now); + +- } +- public static class HttpUtilities { + { +- public const string Http10Version = "HTTP/1.0"; + +- public const string Http11Version = "HTTP/1.1"; + +- public const string Http2Version = "HTTP/2"; + +- public const string HttpsUriScheme = "https://"; + +- public const string HttpUriScheme = "http://"; + +- public static string GetAsciiOrUTF8StringNonNullCharacters(this Span span); + +- public static string GetAsciiStringEscaped(this Span span, int maxChars); + +- public static string GetAsciiStringNonNullCharacters(this Span span); + +- public static bool GetKnownHttpScheme(this Span span, out HttpScheme knownScheme); + +- public static bool GetKnownMethod(this Span span, out HttpMethod method, out int length); + +- public static HttpMethod GetKnownMethod(string value); + +- public static bool GetKnownVersion(this Span span, out HttpVersion knownVersion, out byte length); + +- public static bool IsHostHeaderValid(string hostText); + +- public static string MethodToString(HttpMethod method); + +- public static string SchemeToString(HttpScheme scheme); + +- public static string VersionToString(HttpVersion httpVersion); + +- } +- public interface IDebugger { + { +- bool IsAttached { get; } + +- } +- public interface IHeartbeatHandler { + { +- void OnHeartbeat(DateTimeOffset now); + +- } +- public interface IKestrelTrace : ILogger { + { +- void ApplicationAbortedConnection(string connectionId, string traceIdentifier); + +- void ApplicationError(string connectionId, string traceIdentifier, Exception ex); + +- void ApplicationNeverCompleted(string connectionId); + +- void ConnectionBadRequest(string connectionId, BadHttpRequestException ex); + +- void ConnectionDisconnect(string connectionId); + +- void ConnectionHeadResponseBodyWrite(string connectionId, long count); + +- void ConnectionKeepAlive(string connectionId); + +- void ConnectionPause(string connectionId); + +- void ConnectionRejected(string connectionId); + +- void ConnectionResume(string connectionId); + +- void ConnectionStart(string connectionId); + +- void ConnectionStop(string connectionId); + +- void HeartbeatSlow(TimeSpan interval, DateTimeOffset now); + +- void HPackDecodingError(string connectionId, int streamId, HPackDecodingException ex); + +- void HPackEncodingError(string connectionId, int streamId, HPackEncodingException ex); + +- void Http2ConnectionClosed(string connectionId, int highestOpenedStreamId); + +- void Http2ConnectionClosing(string connectionId); + +- void Http2ConnectionError(string connectionId, Http2ConnectionErrorException ex); + +- void Http2FrameReceived(string connectionId, Http2Frame frame); + +- void Http2FrameSending(string connectionId, Http2Frame frame); + +- void Http2StreamError(string connectionId, Http2StreamErrorException ex); + +- void Http2StreamResetAbort(string traceIdentifier, Http2ErrorCode error, ConnectionAbortedException abortReason); + +- void NotAllConnectionsAborted(); + +- void NotAllConnectionsClosedGracefully(); + +- void RequestBodyDone(string connectionId, string traceIdentifier); + +- void RequestBodyDrainTimedOut(string connectionId, string traceIdentifier); + +- void RequestBodyMinimumDataRateNotSatisfied(string connectionId, string traceIdentifier, double rate); + +- void RequestBodyNotEntirelyRead(string connectionId, string traceIdentifier); + +- void RequestBodyStart(string connectionId, string traceIdentifier); + +- void RequestProcessingError(string connectionId, Exception ex); + +- void ResponseMinimumDataRateNotSatisfied(string connectionId, string traceIdentifier); + +- } +- public interface ISystemClock { + { +- DateTimeOffset UtcNow { get; } + +- } +- public interface ITimeoutControl { + { +- TimeoutReason TimerReason { get; } + +- void BytesRead(long count); + +- void BytesWrittenToBuffer(MinDataRate minRate, long count); + +- void CancelTimeout(); + +- void InitializeHttp2(InputFlowControl connectionInputFlowControl); + +- void ResetTimeout(long ticks, TimeoutReason timeoutReason); + +- void SetTimeout(long ticks, TimeoutReason timeoutReason); + +- void StartRequestBody(MinDataRate minRate); + +- void StartTimingRead(); + +- void StartTimingWrite(); + +- void StopRequestBody(); + +- void StopTimingRead(); + +- void StopTimingWrite(); + +- } +- public interface ITimeoutHandler { + { +- void OnTimeout(TimeoutReason reason); + +- } +- public class KestrelConnection { + { +- public KestrelConnection(TransportConnection transportConnection); + +- public Task ExecutionTask { get; } + +- public TransportConnection TransportConnection { get; } + +- } +- public sealed class KestrelEventSource : EventSource { + { +- public static readonly KestrelEventSource Log; + +- public void ConnectionRejected(string connectionId); + +- public void ConnectionStart(TransportConnection connection); + +- public void ConnectionStop(TransportConnection connection); + +- public void RequestStart(HttpProtocol httpProtocol); + +- public void RequestStop(HttpProtocol httpProtocol); + +- } +- public abstract class ReadOnlyStream : Stream { + { +- protected ReadOnlyStream(); + +- public override bool CanRead { get; } + +- public override bool CanWrite { get; } + +- public override int WriteTimeout { get; set; } + +- public override void Write(byte[] buffer, int offset, int count); + +- public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- } +- public abstract class ResourceCounter { + { +- protected ResourceCounter(); + +- public static ResourceCounter Unlimited { get; } + +- public static ResourceCounter Quota(long amount); + +- public abstract void ReleaseOne(); + +- public abstract bool TryLockOne(); + +- } +- public class Streams { + { +- public Streams(IHttpBodyControlFeature bodyControl, IHttpResponseControl httpResponseControl); + +- public void Abort(Exception error); + +- public (Stream request, Stream response) Start(MessageBody body); + +- public void Stop(); + +- public Stream Upgrade(); + +- } +- public class ThrowingWasUpgradedWriteOnlyStream : WriteOnlyStream { + { +- public ThrowingWasUpgradedWriteOnlyStream(); + +- public override bool CanSeek { get; } + +- public override long Length { get; } + +- public override long Position { get; set; } + +- public override void Flush(); + +- public override long Seek(long offset, SeekOrigin origin); + +- public override void SetLength(long value); + +- public override void Write(byte[] buffer, int offset, int count); + +- public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- } +- public class TimeoutControl : IConnectionTimeoutFeature, ITimeoutControl { + { +- public TimeoutControl(ITimeoutHandler timeoutHandler); + +- public TimeoutReason TimerReason { get; private set; } + +- public void BytesRead(long count); + +- public void BytesWrittenToBuffer(MinDataRate minRate, long count); + +- public void CancelTimeout(); + +- public void Initialize(DateTimeOffset now); + +- public void InitializeHttp2(InputFlowControl connectionInputFlowControl); + +- void Microsoft.AspNetCore.Server.Kestrel.Core.Features.IConnectionTimeoutFeature.ResetTimeout(TimeSpan timeSpan); + +- void Microsoft.AspNetCore.Server.Kestrel.Core.Features.IConnectionTimeoutFeature.SetTimeout(TimeSpan timeSpan); + +- public void ResetTimeout(long ticks, TimeoutReason timeoutReason); + +- public void SetTimeout(long ticks, TimeoutReason timeoutReason); + +- public void StartRequestBody(MinDataRate minRate); + +- public void StartTimingRead(); + +- public void StartTimingWrite(); + +- public void StopRequestBody(); + +- public void StopTimingRead(); + +- public void StopTimingWrite(); + +- public void Tick(DateTimeOffset now); + +- } +- public static class TimeoutControlExtensions { + { +- public static void StartDrainTimeout(this ITimeoutControl timeoutControl, MinDataRate minDataRate, long? maxResponseBufferSize); + +- } +- public enum TimeoutReason { + { +- KeepAlive = 1, + +- None = 0, + +- ReadDataRate = 3, + +- RequestBodyDrain = 5, + +- RequestHeaders = 2, + +- TimeoutFeature = 6, + +- WriteDataRate = 4, + +- } +- public class TimingPipeFlusher { + { +- public TimingPipeFlusher(PipeWriter writer, ITimeoutControl timeoutControl, IKestrelTrace log); + +- public Task FlushAsync(); + +- public Task FlushAsync(IHttpOutputAborter outputAborter, CancellationToken cancellationToken); + +- public Task FlushAsync(MinDataRate minRate, long count); + +- public Task FlushAsync(MinDataRate minRate, long count, IHttpOutputAborter outputAborter, CancellationToken cancellationToken); + +- } +- public abstract class WriteOnlyStream : Stream { + { +- protected WriteOnlyStream(); + +- public override bool CanRead { get; } + +- public override bool CanWrite { get; } + +- public override int ReadTimeout { get; set; } + +- public override int Read(byte[] buffer, int offset, int count); + +- public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); + +- } +- } + namespace Microsoft.AspNetCore.Server.Kestrel.Https { ++ public static class CertificateLoader { ++ public static X509Certificate2 LoadFromStoreCert(string subject, string storeName, StoreLocation storeLocation, bool allowInvalid); ++ } + public class HttpsConnectionAdapterOptions { ++ public Action OnAuthenticate { get; set; } ++ public void AllowAnyClientCertificate(); + } + } +- namespace Microsoft.AspNetCore.Server.Kestrel.Https.Internal { + { +- public static class CertificateLoader { + { +- public static X509Certificate2 LoadFromStoreCert(string subject, string storeName, StoreLocation storeLocation, bool allowInvalid); + +- } +- public class HttpsConnectionAdapter : IConnectionAdapter { + { +- public HttpsConnectionAdapter(HttpsConnectionAdapterOptions options); + +- public HttpsConnectionAdapter(HttpsConnectionAdapterOptions options, ILoggerFactory loggerFactory); + +- public bool IsHttps { get; } + +- public Task OnConnectionAsync(ConnectionAdapterContext context); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.md new file mode 100644 index 00000000..45b035c8 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.md @@ -0,0 +1,186 @@ +# Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions + +``` diff + { + { +- namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal { + { +- public enum FileHandleType { + { +- Auto = 0, + +- Pipe = 2, + +- Tcp = 1, + +- } +- public interface IApplicationTransportFeature { + { +- IDuplexPipe Application { get; set; } + +- } +- public interface IConnectionDispatcher { + { +- Task OnConnection(TransportConnection connection); + +- } +- public interface IEndPointInformation { + { +- ulong FileHandle { get; } + +- FileHandleType HandleType { get; set; } + +- IPEndPoint IPEndPoint { get; set; } + +- bool NoDelay { get; } + +- string SocketPath { get; } + +- ListenType Type { get; } + +- } +- public interface ITransport { + { +- Task BindAsync(); + +- Task StopAsync(); + +- Task UnbindAsync(); + +- } +- public interface ITransportFactory { + { +- ITransport Create(IEndPointInformation endPointInformation, IConnectionDispatcher dispatcher); + +- } +- public interface ITransportSchedulerFeature { + { +- PipeScheduler InputWriterScheduler { get; } + +- PipeScheduler OutputReaderScheduler { get; } + +- } +- public static class KestrelMemoryPool { + { +- public static readonly int MinimumSegmentSize; + +- public static MemoryPool Create(); + +- public static MemoryPool CreateSlabMemoryPool(); + +- } +- public enum ListenType { + { +- FileHandle = 2, + +- IPEndPoint = 0, + +- SocketPath = 1, + +- } +- public enum SchedulingMode { + { +- Default = 0, + +- Inline = 2, + +- ThreadPool = 1, + +- } +- public abstract class TransportConnection : ConnectionContext, IApplicationTransportFeature, IConnectionHeartbeatFeature, IConnectionIdFeature, IConnectionItemsFeature, IConnectionLifetimeFeature, IConnectionLifetimeNotificationFeature, IConnectionTransportFeature, IEnumerable, IEnumerable>, IFeatureCollection, IHttpConnectionFeature, IMemoryPoolFeature, ITransportSchedulerFeature { + { +- protected readonly CancellationTokenSource _connectionClosingCts; + +- public TransportConnection(); + +- public IDuplexPipe Application { get; set; } + +- public CancellationToken ConnectionClosed { get; set; } + +- public CancellationToken ConnectionClosedRequested { get; set; } + +- public override string ConnectionId { get; set; } + +- public override IFeatureCollection Features { get; } + +- public PipeWriter Input { get; } + +- public virtual PipeScheduler InputWriterScheduler { get; } + +- public override IDictionary Items { get; set; } + +- public IPAddress LocalAddress { get; set; } + +- public int LocalPort { get; set; } + +- public virtual MemoryPool MemoryPool { get; } + +- IDictionary Microsoft.AspNetCore.Connections.Features.IConnectionItemsFeature.Items { get; set; } + +- CancellationToken Microsoft.AspNetCore.Connections.Features.IConnectionLifetimeFeature.ConnectionClosed { get; set; } + +- CancellationToken Microsoft.AspNetCore.Connections.Features.IConnectionLifetimeNotificationFeature.ConnectionClosedRequested { get; set; } + +- IDuplexPipe Microsoft.AspNetCore.Connections.Features.IConnectionTransportFeature.Transport { get; set; } + +- MemoryPool Microsoft.AspNetCore.Connections.Features.IMemoryPoolFeature.MemoryPool { get; } + +- bool Microsoft.AspNetCore.Http.Features.IFeatureCollection.IsReadOnly { get; } + +- object Microsoft.AspNetCore.Http.Features.IFeatureCollection.this[Type key] { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IFeatureCollection.Revision { get; } + +- string Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.ConnectionId { get; set; } + +- IPAddress Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.LocalIpAddress { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.LocalPort { get; set; } + +- IPAddress Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.RemoteIpAddress { get; set; } + +- int Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature.RemotePort { get; set; } + +- IDuplexPipe Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.IApplicationTransportFeature.Application { get; set; } + +- PipeScheduler Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.ITransportSchedulerFeature.InputWriterScheduler { get; } + +- PipeScheduler Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.ITransportSchedulerFeature.OutputReaderScheduler { get; } + +- public PipeReader Output { get; } + +- public virtual PipeScheduler OutputReaderScheduler { get; } + +- public IPAddress RemoteAddress { get; set; } + +- public int RemotePort { get; set; } + +- public override IDuplexPipe Transport { get; set; } + +- public override void Abort(ConnectionAbortedException abortReason); + +- void Microsoft.AspNetCore.Connections.Features.IConnectionHeartbeatFeature.OnHeartbeat(Action action, object state); + +- void Microsoft.AspNetCore.Connections.Features.IConnectionLifetimeFeature.Abort(); + +- void Microsoft.AspNetCore.Connections.Features.IConnectionLifetimeNotificationFeature.RequestClose(); + +- TFeature Microsoft.AspNetCore.Http.Features.IFeatureCollection.Get(); + +- void Microsoft.AspNetCore.Http.Features.IFeatureCollection.Set(TFeature feature); + +- public void OnHeartbeat(Action action, object state); + +- public void RequestClose(); + +- IEnumerator> System.Collections.Generic.IEnumerable>.GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public void TickHeartbeat(); + +- } +- } +-} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.md new file mode 100644 index 00000000..1cba0375 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.md @@ -0,0 +1,727 @@ +# Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv + +``` diff + { + namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv { + public class LibuvTransportOptions { ++ public long? MaxReadBufferSize { get; set; } ++ public long? MaxWriteBufferSize { get; set; } ++ public bool NoDelay { get; set; } + } + } +- namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal { + { +- public interface ILibuvTrace : ILogger { + { +- void ConnectionError(string connectionId, Exception ex); + +- void ConnectionPause(string connectionId); + +- void ConnectionRead(string connectionId, int count); + +- void ConnectionReadFin(string connectionId); + +- void ConnectionReset(string connectionId); + +- void ConnectionResume(string connectionId); + +- void ConnectionWrite(string connectionId, int count); + +- void ConnectionWriteCallback(string connectionId, int status); + +- void ConnectionWriteFin(string connectionId, string reason); + +- } +- public class LibuvAwaitable : ICriticalNotifyCompletion, INotifyCompletion where TRequest : UvRequest { + { +- public static readonly Action Callback; + +- public LibuvAwaitable(); + +- public bool IsCompleted { get; } + +- public LibuvAwaitable GetAwaiter(); + +- public UvWriteResult GetResult(); + +- public void OnCompleted(Action continuation); + +- public void UnsafeOnCompleted(Action continuation); + +- } +- public class LibuvConnection : TransportConnection, IDisposable { + { +- public LibuvConnection(UvStreamHandle socket, ILibuvTrace log, LibuvThread thread, IPEndPoint remoteEndPoint, IPEndPoint localEndPoint); + +- public override PipeScheduler InputWriterScheduler { get; } + +- public override MemoryPool MemoryPool { get; } + +- public LibuvOutputConsumer OutputConsumer { get; set; } + +- public override PipeScheduler OutputReaderScheduler { get; } + +- public override void Abort(ConnectionAbortedException abortReason); + +- public void Dispose(); + +- public Task Start(); + +- } +- public class LibuvOutputConsumer { + { +- public LibuvOutputConsumer(PipeReader pipe, LibuvThread thread, UvStreamHandle socket, string connectionId, ILibuvTrace log); + +- public Task WriteOutputAsync(); + +- } +- public class LibuvThread : PipeScheduler { + { +- public LibuvThread(LibuvTransport transport); + +- public LibuvThread(LibuvTransport transport, int maxLoops); + +- public Exception FatalError { get; } + +- public UvLoopHandle Loop { get; } + +- public MemoryPool MemoryPool { get; } + +- public Action, IntPtr> QueueCloseHandle { get; } + +- public WriteReqPool WriteReqPool { get; } + +- public void Post(Action callback, T state); + +- public Task PostAsync(Action callback, T state); + +- public override void Schedule(Action action, object state); + +- public Task StartAsync(); + +- public Task StopAsync(TimeSpan timeout); + +- public void Walk(Action callback); + +- } +- public class LibuvTrace : ILibuvTrace, ILogger { + { +- public LibuvTrace(ILogger logger); + +- public IDisposable BeginScope(TState state); + +- public void ConnectionError(string connectionId, Exception ex); + +- public void ConnectionPause(string connectionId); + +- public void ConnectionRead(string connectionId, int count); + +- public void ConnectionReadFin(string connectionId); + +- public void ConnectionReset(string connectionId); + +- public void ConnectionResume(string connectionId); + +- public void ConnectionWrite(string connectionId, int count); + +- public void ConnectionWriteCallback(string connectionId, int status); + +- public void ConnectionWriteFin(string connectionId, string reason); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- } +- public class LibuvTransport : ITransport { + { +- public LibuvTransport(LibuvTransportContext context, IEndPointInformation endPointInformation); + +- public LibuvTransport(LibuvFunctions uv, LibuvTransportContext context, IEndPointInformation endPointInformation); + +- public IApplicationLifetime AppLifetime { get; } + +- public LibuvFunctions Libuv { get; } + +- public ILibuvTrace Log { get; } + +- public List Threads { get; } + +- public LibuvTransportContext TransportContext { get; } + +- public LibuvTransportOptions TransportOptions { get; } + +- public Task BindAsync(); + +- public Task StopAsync(); + +- public Task UnbindAsync(); + +- } +- public class LibuvTransportContext { + { +- public LibuvTransportContext(); + +- public IApplicationLifetime AppLifetime { get; set; } + +- public IConnectionDispatcher ConnectionDispatcher { get; set; } + +- public ILibuvTrace Log { get; set; } + +- public LibuvTransportOptions Options { get; set; } + +- } +- public class LibuvTransportFactory : ITransportFactory { + { +- public LibuvTransportFactory(IOptions options, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory); + +- public ITransport Create(IEndPointInformation endPointInformation, IConnectionDispatcher dispatcher); + +- } +- public class Listener : ListenerContext, IAsyncDisposable { + { +- public Listener(LibuvTransportContext transportContext); + +- protected UvStreamHandle ListenSocket { get; private set; } + +- public ILibuvTrace Log { get; } + +- protected virtual void DispatchConnection(UvStreamHandle socket); + +- public virtual Task DisposeAsync(); + +- public Task StartAsync(IEndPointInformation endPointInformation, LibuvThread thread); + +- } +- public class ListenerContext { + { +- public ListenerContext(LibuvTransportContext transportContext); + +- public IEndPointInformation EndPointInformation { get; set; } + +- public LibuvThread Thread { get; set; } + +- public LibuvTransportContext TransportContext { get; set; } + +- protected UvStreamHandle CreateAcceptSocket(); + +- protected Task HandleConnectionAsync(UvStreamHandle socket); + +- } +- public class ListenerPrimary : Listener { + { +- public ListenerPrimary(LibuvTransportContext transportContext); + +- public int UvPipeCount { get; } + +- protected override void DispatchConnection(UvStreamHandle socket); + +- public override Task DisposeAsync(); + +- public Task StartAsync(string pipeName, byte[] pipeMessage, IEndPointInformation endPointInformation, LibuvThread thread); + +- } +- public class ListenerSecondary : ListenerContext, IAsyncDisposable { + { +- public ListenerSecondary(LibuvTransportContext transportContext); + +- public ILibuvTrace Log { get; } + +- public Task DisposeAsync(); + +- public Task StartAsync(string pipeName, byte[] pipeMessage, IEndPointInformation endPointInformation, LibuvThread thread); + +- } +- public struct UvWriteResult { + { +- public UvWriteResult(int status, UvException error); + +- public UvException Error { get; } + +- public int Status { get; } + +- } +- public class WriteReqPool { + { +- public WriteReqPool(LibuvThread thread, ILibuvTrace log); + +- public UvWriteReq Allocate(); + +- public void Dispose(); + +- public void Return(UvWriteReq req); + +- } +- } +- namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking { + { +- public class LibuvFunctions { + { +- protected Action _uv_pipe_connect; + +- protected Action _uv_ref; + +- protected Action _uv_unref; + +- protected Action _uv_stop; + +- protected Action _uv_close; + +- public readonly bool IsWindows; + +- protected Func _uv_handle_size; + +- protected Func _uv_async_send; + +- protected Func _uv_async_init; + +- protected Func _uv_pipe_init; + +- protected Func _uv_tcp_init; + +- protected Func _uv_timer_init; + +- protected Func _uv_run; + +- protected Func _uv_loop_init; + +- protected Func _uv_now; + +- protected Func _uv_walk; + +- protected Func _uv_pipe_pending_count; + +- protected Func _uv_pipe_open; + +- protected Func _uv_pipe_bind; + +- protected Func _uv_accept; + +- protected Func _uv_listen; + +- protected Func _uv_read_stop; + +- protected Func _uv_read_start; + +- protected Func _uv_try_write; + +- protected Func _uv_tcp_nodelay; + +- protected Func _uv_tcp_open; + +- protected Func _uv_timer_stop; + +- protected Func _uv_timer_start; + +- protected Func _uv_req_size; + +- protected Func _uv_err_name; + +- protected Func _uv_strerror; + +- protected Func _uv_loop_size; + +- protected Func _uv_loop_close; + +- protected Func _uv_unsafe_async_send; + +- protected LibuvFunctions.uv_fileno_func _uv_fileno; + +- protected LibuvFunctions.uv_ip4_addr_func _uv_ip4_addr; + +- protected LibuvFunctions.uv_ip6_addr_func _uv_ip6_addr; + +- protected LibuvFunctions.uv_tcp_bind_func _uv_tcp_bind; + +- protected LibuvFunctions.uv_tcp_getpeername_func _uv_tcp_getpeername; + +- protected LibuvFunctions.uv_tcp_getsockname_func _uv_tcp_getsockname; + +- protected LibuvFunctions.uv_write2_func _uv_write2; + +- protected LibuvFunctions.uv_write_func _uv_write; + +- public LibuvFunctions(); + +- public LibuvFunctions(bool onlyForTesting); + +- public void accept(UvStreamHandle server, UvStreamHandle client); + +- public void async_init(UvLoopHandle loop, UvAsyncHandle handle, LibuvFunctions.uv_async_cb cb); + +- public void async_send(UvAsyncHandle handle); + +- public LibuvFunctions.uv_buf_t buf_init(IntPtr memory, int len); + +- public void Check(int statusCode, out UvException error); + +- public void close(UvHandle handle, LibuvFunctions.uv_close_cb close_cb); + +- public void close(IntPtr handle, LibuvFunctions.uv_close_cb close_cb); + +- public string err_name(int err); + +- public int handle_size(LibuvFunctions.HandleType handleType); + +- public void ip4_addr(string ip, int port, out SockAddr addr, out UvException error); + +- public void ip6_addr(string ip, int port, out SockAddr addr, out UvException error); + +- public void listen(UvStreamHandle handle, int backlog, LibuvFunctions.uv_connection_cb cb); + +- public void loop_close(UvLoopHandle handle); + +- public void loop_init(UvLoopHandle handle); + +- public int loop_size(); + +- public long now(UvLoopHandle loop); + +- public void pipe_bind(UvPipeHandle handle, string name); + +- public void pipe_connect(UvConnectRequest req, UvPipeHandle handle, string name, LibuvFunctions.uv_connect_cb cb); + +- public void pipe_init(UvLoopHandle loop, UvPipeHandle handle, bool ipc); + +- public void pipe_open(UvPipeHandle handle, IntPtr hSocket); + +- public int pipe_pending_count(UvPipeHandle handle); + +- public void read_start(UvStreamHandle handle, LibuvFunctions.uv_alloc_cb alloc_cb, LibuvFunctions.uv_read_cb read_cb); + +- public void read_stop(UvStreamHandle handle); + +- public void @ref(UvHandle handle); + +- public int req_size(LibuvFunctions.RequestType reqType); + +- public void run(UvLoopHandle handle, int mode); + +- public void stop(UvLoopHandle handle); + +- public string strerror(int err); + +- public void tcp_bind(UvTcpHandle handle, ref SockAddr addr, int flags); + +- public void tcp_getpeername(UvTcpHandle handle, out SockAddr addr, ref int namelen); + +- public void tcp_getsockname(UvTcpHandle handle, out SockAddr addr, ref int namelen); + +- public void tcp_init(UvLoopHandle loop, UvTcpHandle handle); + +- public void tcp_nodelay(UvTcpHandle handle, bool enable); + +- public void tcp_open(UvTcpHandle handle, IntPtr hSocket); + +- public void ThrowIfErrored(int statusCode); + +- public void timer_init(UvLoopHandle loop, UvTimerHandle handle); + +- public void timer_start(UvTimerHandle handle, LibuvFunctions.uv_timer_cb cb, long timeout, long repeat); + +- public void timer_stop(UvTimerHandle handle); + +- public int try_write(UvStreamHandle handle, LibuvFunctions.uv_buf_t[] bufs, int nbufs); + +- public void unref(UvHandle handle); + +- public void unsafe_async_send(IntPtr handle); + +- public void uv_fileno(UvHandle handle, ref IntPtr socket); + +- public void walk(UvLoopHandle loop, LibuvFunctions.uv_walk_cb walk_cb, IntPtr arg); + +- public unsafe void write(UvRequest req, UvStreamHandle handle, LibuvFunctions.uv_buf_t* bufs, int nbufs, LibuvFunctions.uv_write_cb cb); + +- public unsafe void write2(UvRequest req, UvStreamHandle handle, LibuvFunctions.uv_buf_t* bufs, int nbufs, UvStreamHandle sendHandle, LibuvFunctions.uv_write_cb cb); + +- public enum HandleType { + { +- ASYNC = 1, + +- CHECK = 2, + +- FS_EVENT = 3, + +- FS_POLL = 4, + +- HANDLE = 5, + +- IDLE = 6, + +- NAMED_PIPE = 7, + +- POLL = 8, + +- PREPARE = 9, + +- PROCESS = 10, + +- SIGNAL = 16, + +- STREAM = 11, + +- TCP = 12, + +- TIMER = 13, + +- TTY = 14, + +- UDP = 15, + +- Unknown = 0, + +- } +- public enum RequestType { + { +- CONNECT = 2, + +- FS = 6, + +- GETADDRINFO = 8, + +- GETNAMEINFO = 9, + +- REQ = 1, + +- SHUTDOWN = 4, + +- UDP_SEND = 5, + +- Unknown = 0, + +- WORK = 7, + +- WRITE = 3, + +- } +- public delegate void uv_alloc_cb(IntPtr server, int suggested_size, out LibuvFunctions.uv_buf_t buf); + +- public delegate void uv_async_cb(IntPtr handle); + +- public struct uv_buf_t { + { +- public uv_buf_t(IntPtr memory, int len, bool IsWindows); + +- } +- public delegate void uv_close_cb(IntPtr handle); + +- public delegate void uv_connect_cb(IntPtr req, int status); + +- public delegate void uv_connection_cb(IntPtr server, int status); + +- protected delegate int uv_fileno_func(UvHandle handle, ref IntPtr socket); + +- protected delegate int uv_ip4_addr_func(string ip, int port, out SockAddr addr); + +- protected delegate int uv_ip6_addr_func(string ip, int port, out SockAddr addr); + +- public delegate void uv_read_cb(IntPtr server, int nread, ref LibuvFunctions.uv_buf_t buf); + +- protected delegate int uv_tcp_bind_func(UvTcpHandle handle, ref SockAddr addr, int flags); + +- public delegate int uv_tcp_getpeername_func(UvTcpHandle handle, out SockAddr addr, ref int namelen); + +- public delegate int uv_tcp_getsockname_func(UvTcpHandle handle, out SockAddr addr, ref int namelen); + +- public delegate void uv_timer_cb(IntPtr handle); + +- public delegate void uv_walk_cb(IntPtr handle, IntPtr arg); + +- public delegate void uv_write_cb(IntPtr req, int status); + +- protected unsafe delegate int uv_write_func(UvRequest req, UvStreamHandle handle, LibuvFunctions.uv_buf_t* bufs, int nbufs, LibuvFunctions.uv_write_cb cb); + +- protected unsafe delegate int uv_write2_func(UvRequest req, UvStreamHandle handle, LibuvFunctions.uv_buf_t* bufs, int nbufs, UvStreamHandle sendHandle, LibuvFunctions.uv_write_cb cb); + +- } +- public static class PlatformApis { + { +- public static bool IsDarwin { get; } + +- public static bool IsWindows { get; } + +- public static long VolatileRead(ref long value); + +- } +- public struct SockAddr { + { +- public SockAddr(long ignored); + +- public uint ScopeId { get; set; } + +- public IPEndPoint GetIPEndPoint(); + +- } +- public class UvAsyncHandle : UvHandle { + { +- public UvAsyncHandle(ILibuvTrace logger); + +- public void Init(UvLoopHandle loop, Action callback, Action, IntPtr> queueCloseHandle); + +- protected override bool ReleaseHandle(); + +- public void Send(); + +- } +- public class UvConnectRequest : UvRequest { + { +- public UvConnectRequest(ILibuvTrace logger); + +- public void Connect(UvPipeHandle pipe, string name, Action callback, object state); + +- public void DangerousInit(UvLoopHandle loop); + +- public override void Init(LibuvThread thread); + +- } +- public class UvException : Exception { + { +- public UvException(string message, int statusCode); + +- public int StatusCode { get; } + +- } +- public abstract class UvHandle : UvMemory { + { +- protected UvHandle(ILibuvTrace logger); + +- protected void CreateHandle(LibuvFunctions uv, int threadId, int size, Action, IntPtr> queueCloseHandle); + +- public void Reference(); + +- protected override bool ReleaseHandle(); + +- public void Unreference(); + +- } +- public class UvLoopHandle : UvMemory { + { +- public UvLoopHandle(ILibuvTrace logger); + +- public void Init(LibuvFunctions uv); + +- public long Now(); + +- protected override bool ReleaseHandle(); + +- public void Run(int mode = 0); + +- public void Stop(); + +- } +- public abstract class UvMemory : SafeHandle { + { +- protected readonly ILibuvTrace _log; + +- protected LibuvFunctions _uv; + +- protected int _threadId; + +- protected UvMemory(ILibuvTrace logger, GCHandleType handleType = GCHandleType.Weak); + +- public override bool IsInvalid { get; } + +- public LibuvFunctions Libuv { get; } + +- public int ThreadId { get; private set; } + +- protected void CreateMemory(LibuvFunctions uv, int threadId, int size); + +- protected static void DestroyMemory(IntPtr memory); + +- protected static void DestroyMemory(IntPtr memory, IntPtr gcHandlePtr); + +- public static THandle FromIntPtr(IntPtr handle); + +- public IntPtr InternalGetHandle(); + +- public void Validate(bool closed = false); + +- } +- public class UvPipeHandle : UvStreamHandle { + { +- public UvPipeHandle(ILibuvTrace logger); + +- public void Bind(string name); + +- public void Init(UvLoopHandle loop, Action, IntPtr> queueCloseHandle, bool ipc = false); + +- public void Open(IntPtr fileDescriptor); + +- public int PendingCount(); + +- } +- public class UvRequest : UvMemory { + { +- protected UvRequest(ILibuvTrace logger); + +- public virtual void Init(LibuvThread thread); + +- protected override bool ReleaseHandle(); + +- } +- public abstract class UvStreamHandle : UvHandle { + { +- protected UvStreamHandle(ILibuvTrace logger); + +- public void Accept(UvStreamHandle handle); + +- public void Listen(int backlog, Action callback, object state); + +- public void ReadStart(Func allocCallback, Action readCallback, object state); + +- public void ReadStop(); + +- protected override bool ReleaseHandle(); + +- public int TryWrite(LibuvFunctions.uv_buf_t buf); + +- } +- public class UvTcpHandle : UvStreamHandle { + { +- public UvTcpHandle(ILibuvTrace logger); + +- public void Bind(IPEndPoint endPoint); + +- public IPEndPoint GetPeerIPEndPoint(); + +- public IPEndPoint GetSockIPEndPoint(); + +- public void Init(UvLoopHandle loop, Action, IntPtr> queueCloseHandle); + +- public void NoDelay(bool enable); + +- public void Open(IntPtr fileDescriptor); + +- } +- public class UvTimerHandle : UvHandle { + { +- public UvTimerHandle(ILibuvTrace logger); + +- public void Init(UvLoopHandle loop, Action, IntPtr> queueCloseHandle); + +- public void Start(Action callback, long timeout, long repeat); + +- public void Stop(); + +- } +- public class UvWriteReq : UvRequest { + { +- public UvWriteReq(ILibuvTrace logger); + +- public void DangerousInit(UvLoopHandle loop); + +- public override void Init(LibuvThread thread); + +- public void Write2(UvStreamHandle handle, ArraySegment> bufs, UvStreamHandle sendHandle, Action callback, object state); + +- public LibuvAwaitable WriteAsync(UvStreamHandle handle, ArraySegment> bufs); + +- public LibuvAwaitable WriteAsync(UvStreamHandle handle, ReadOnlySequence buffer); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.md new file mode 100644 index 00000000..179523b1 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.md @@ -0,0 +1,130 @@ +# Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets + +``` diff + { + namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets { +- public sealed class SocketTransportFactory : ITransportFactory { ++ public sealed class SocketTransportFactory : IConnectionListenerFactory { +- public SocketTransportFactory(IOptions options, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory); + ++ public SocketTransportFactory(IOptions options, ILoggerFactory loggerFactory); ++ public ValueTask BindAsync(EndPoint endpoint, CancellationToken cancellationToken = default(CancellationToken)); +- public ITransport Create(IEndPointInformation endPointInformation, IConnectionDispatcher dispatcher); + + } + public class SocketTransportOptions { ++ public long? MaxReadBufferSize { get; set; } ++ public long? MaxWriteBufferSize { get; set; } ++ public bool NoDelay { get; set; } + } + } +- namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal { + { +- public static class BufferExtensions { + { +- public static ArraySegment GetArray(this Memory memory); + +- public static ArraySegment GetArray(this ReadOnlyMemory memory); + +- } +- public class IOQueue : PipeScheduler { + { +- public IOQueue(); + +- public override void Schedule(Action action, object state); + +- } +- public interface ISocketsTrace : ILogger { + { +- void ConnectionError(string connectionId, Exception ex); + +- void ConnectionPause(string connectionId); + +- void ConnectionReadFin(string connectionId); + +- void ConnectionReset(string connectionId); + +- void ConnectionResume(string connectionId); + +- void ConnectionWriteFin(string connectionId, string reason); + +- } +- public class SocketAwaitableEventArgs : SocketAsyncEventArgs, ICriticalNotifyCompletion, INotifyCompletion { + { +- public SocketAwaitableEventArgs(PipeScheduler ioScheduler); + +- public bool IsCompleted { get; } + +- public void Complete(); + +- public SocketAwaitableEventArgs GetAwaiter(); + +- public int GetResult(); + +- public void OnCompleted(Action continuation); + +- protected override void OnCompleted(SocketAsyncEventArgs _); + +- public void UnsafeOnCompleted(Action continuation); + +- } +- public sealed class SocketReceiver : SocketSenderReceiverBase { + { +- public SocketReceiver(Socket socket, PipeScheduler scheduler); + +- public SocketAwaitableEventArgs ReceiveAsync(Memory buffer); + +- public SocketAwaitableEventArgs WaitForDataAsync(); + +- } +- public sealed class SocketSender : SocketSenderReceiverBase { + { +- public SocketSender(Socket socket, PipeScheduler scheduler); + +- public SocketAwaitableEventArgs SendAsync(ReadOnlySequence buffers); + +- } +- public abstract class SocketSenderReceiverBase : IDisposable { + { +- protected readonly SocketAwaitableEventArgs _awaitableEventArgs; + +- protected readonly Socket _socket; + +- protected SocketSenderReceiverBase(Socket socket, PipeScheduler scheduler); + +- public void Dispose(); + +- } +- public class SocketsTrace : ILogger, ISocketsTrace { + { +- public SocketsTrace(ILogger logger); + +- public IDisposable BeginScope(TState state); + +- public void ConnectionError(string connectionId, Exception ex); + +- public void ConnectionPause(string connectionId); + +- public void ConnectionRead(string connectionId, int count); + +- public void ConnectionReadFin(string connectionId); + +- public void ConnectionReset(string connectionId); + +- public void ConnectionResume(string connectionId); + +- public void ConnectionWrite(string connectionId, int count); + +- public void ConnectionWriteCallback(string connectionId, int status); + +- public void ConnectionWriteFin(string connectionId, string reason); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Session.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Session.md new file mode 100644 index 00000000..f7a74563 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.Session.md @@ -0,0 +1,21 @@ +# Microsoft.AspNetCore.Session + +``` diff + { + namespace Microsoft.AspNetCore.Builder { + public class SessionOptions { +- public string CookieDomain { get; set; } + +- public bool CookieHttpOnly { get; set; } + +- public string CookieName { get; set; } + +- public string CookiePath { get; set; } + +- public CookieSecurePolicy CookieSecure { get; set; } + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Client.Core.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Client.Core.md new file mode 100644 index 00000000..5140f0a8 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Client.Core.md @@ -0,0 +1,93 @@ +# Microsoft.AspNetCore.SignalR.Client.Core + +``` diff + { +- namespace Microsoft.AspNetCore.Internal { + { +- public static class AwaitableThreadPool { + { +- public static AwaitableThreadPool.Awaitable Yield(); + +- public readonly struct Awaitable : ICriticalNotifyCompletion, INotifyCompletion { + { +- public bool IsCompleted { get; } + +- public AwaitableThreadPool.Awaitable GetAwaiter(); + +- public void GetResult(); + +- public void OnCompleted(Action continuation); + +- public void UnsafeOnCompleted(Action continuation); + +- } +- } +- } + namespace Microsoft.AspNetCore.SignalR.Client { + public class HubConnection { ++ public HubConnection(IConnectionFactory connectionFactory, IHubProtocol protocol, EndPoint endPoint, IServiceProvider serviceProvider, ILoggerFactory loggerFactory); ++ public HubConnection(IConnectionFactory connectionFactory, IHubProtocol protocol, EndPoint endPoint, IServiceProvider serviceProvider, ILoggerFactory loggerFactory, IRetryPolicy reconnectPolicy); +- public HubConnection(IConnectionFactory connectionFactory, IHubProtocol protocol, ILoggerFactory loggerFactory); + +- public HubConnection(IConnectionFactory connectionFactory, IHubProtocol protocol, IServiceProvider serviceProvider, ILoggerFactory loggerFactory); + ++ public string ConnectionId { get; } ++ public event Func Reconnected; ++ public event Func Reconnecting; +- public void ResetSendPing(); + +- public void ResetTimeout(); + ++ public IAsyncEnumerable StreamAsyncCore(string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + } + public static class HubConnectionBuilderExtensions { ++ public static IHubConnectionBuilder WithAutomaticReconnect(this IHubConnectionBuilder hubConnectionBuilder); ++ public static IHubConnectionBuilder WithAutomaticReconnect(this IHubConnectionBuilder hubConnectionBuilder, IRetryPolicy retryPolicy); ++ public static IHubConnectionBuilder WithAutomaticReconnect(this IHubConnectionBuilder hubConnectionBuilder, TimeSpan[] reconnectDelays); + } + public static class HubConnectionExtensions { ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IDisposable On(this HubConnection hubConnection, string methodName, Func handler); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7, object arg8, object arg9, object arg10, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7, object arg8, object arg9, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7, object arg8, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, object arg5, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, object arg4, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, object arg3, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, object arg2, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, object arg1, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IAsyncEnumerable StreamAsync(this HubConnection hubConnection, string methodName, CancellationToken cancellationToken = default(CancellationToken)); + } + public enum HubConnectionState { ++ Connecting = 2, ++ Reconnecting = 3, + } +- public interface IConnectionFactory { + { +- Task ConnectAsync(TransferFormat transferFormat, CancellationToken cancellationToken = default(CancellationToken)); + +- Task DisposeAsync(ConnectionContext connection); + +- } ++ public interface IRetryPolicy { ++ TimeSpan? NextRetryDelay(RetryContext retryContext); ++ } ++ public sealed class RetryContext { ++ public RetryContext(); ++ public TimeSpan ElapsedTime { get; set; } ++ public long PreviousRetryCount { get; set; } ++ public Exception RetryReason { get; set; } ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Client.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Client.md new file mode 100644 index 00000000..62a6308b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Client.md @@ -0,0 +1,18 @@ +# Microsoft.AspNetCore.SignalR.Client + +``` diff + { + namespace Microsoft.AspNetCore.SignalR.Client { +- public class HttpConnectionFactory : IConnectionFactory { + { +- public HttpConnectionFactory(IOptions options, ILoggerFactory loggerFactory); + +- public Task ConnectAsync(TransferFormat transferFormat, CancellationToken cancellationToken = default(CancellationToken)); + +- public Task DisposeAsync(ConnectionContext connection); + +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Common.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Common.md new file mode 100644 index 00000000..1ff7041c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Common.md @@ -0,0 +1,34 @@ +# Microsoft.AspNetCore.SignalR.Common + +``` diff + { + namespace Microsoft.AspNetCore.SignalR { + public interface IInvocationBinder { ++ Type GetStreamItemType(string streamId); + } + } + namespace Microsoft.AspNetCore.SignalR.Protocol { + public static class HandshakeProtocol { +- public static ReadOnlyMemory SuccessHandshakeData; + ++ public static ReadOnlySpan GetSuccessfulHandshake(IHubProtocol protocol); + } + public abstract class HubMethodInvocationMessage : HubInvocationMessage { ++ protected HubMethodInvocationMessage(string invocationId, string target, object[] arguments, string[] streamIds); ++ public string[] StreamIds { get; } + } + public class InvocationMessage : HubMethodInvocationMessage { ++ public InvocationMessage(string invocationId, string target, object[] arguments, string[] streamIds); + } ++ public class StreamBindingFailureMessage : HubMessage { ++ public StreamBindingFailureMessage(string id, ExceptionDispatchInfo bindingFailure); ++ public ExceptionDispatchInfo BindingFailure { get; } ++ public string Id { get; } ++ } + public class StreamInvocationMessage : HubMethodInvocationMessage { ++ public StreamInvocationMessage(string invocationId, string target, object[] arguments, string[] streamIds); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Core.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Core.md new file mode 100644 index 00000000..5166dccd --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Core.md @@ -0,0 +1,172 @@ +# Microsoft.AspNetCore.SignalR.Core + +``` diff + { + namespace Microsoft.AspNetCore.SignalR { + public class HubConnectionContext { ++ public HubConnectionContext(ConnectionContext connectionContext, HubConnectionContextOptions contextOptions, ILoggerFactory loggerFactory); +- public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory); + +- public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory, TimeSpan clientTimeoutInterval); + + } ++ public class HubConnectionContextOptions { ++ public HubConnectionContextOptions(); ++ public TimeSpan ClientTimeoutInterval { get; set; } ++ public TimeSpan KeepAliveInterval { get; set; } ++ public int StreamBufferCapacity { get; set; } ++ } + public class HubConnectionHandler : ConnectionHandler where THub : Hub { +- public HubConnectionHandler(HubLifetimeManager lifetimeManager, IHubProtocolResolver protocolResolver, IOptions globalHubOptions, IOptions> hubOptions, ILoggerFactory loggerFactory, IUserIdProvider userIdProvider, HubDispatcher dispatcher); + ++ public HubConnectionHandler(HubLifetimeManager lifetimeManager, IHubProtocolResolver protocolResolver, IOptions globalHubOptions, IOptions> hubOptions, ILoggerFactory loggerFactory, IUserIdProvider userIdProvider, IServiceScopeFactory serviceScopeFactory); + } ++ public class HubInvocationContext { ++ public HubInvocationContext(HubCallerContext context, string hubMethodName, object[] hubMethodArguments); ++ public HubCallerContext Context { get; } ++ public IReadOnlyList HubMethodArguments { get; } ++ public string HubMethodName { get; } ++ } ++ public class HubMetadata { ++ public HubMetadata(Type hubType); ++ public Type HubType { get; } ++ } + public class HubOptions { ++ public long? MaximumReceiveMessageSize { get; set; } ++ public int? StreamBufferCapacity { get; set; } + } ++ public class HubOptionsSetup : IConfigureOptions { ++ public HubOptionsSetup(IEnumerable protocols); ++ public void Configure(HubOptions options); ++ } ++ public class HubOptionsSetup : IConfigureOptions> where THub : Hub { ++ public HubOptionsSetup(IOptions options); ++ public void Configure(HubOptions options); ++ } + } +- namespace Microsoft.AspNetCore.SignalR.Internal { + { +- public class DefaultHubActivator : IHubActivator where THub : Hub { + { +- public DefaultHubActivator(IServiceProvider serviceProvider); + +- public virtual THub Create(); + +- public virtual void Release(THub hub); + +- } +- public class DefaultHubCallerContext : HubCallerContext { + { +- public DefaultHubCallerContext(HubConnectionContext connection); + +- public override CancellationToken ConnectionAborted { get; } + +- public override string ConnectionId { get; } + +- public override IFeatureCollection Features { get; } + +- public override IDictionary Items { get; } + +- public override ClaimsPrincipal User { get; } + +- public override string UserIdentifier { get; } + +- public override void Abort(); + +- } +- public class DefaultHubDispatcher : HubDispatcher where THub : Hub { + { +- public DefaultHubDispatcher(IServiceScopeFactory serviceScopeFactory, IHubContext hubContext, IOptions> hubOptions, IOptions globalHubOptions, ILogger> logger); + +- public override Task DispatchMessageAsync(HubConnectionContext connection, HubMessage hubMessage); + +- public override IReadOnlyList GetParameterTypes(string methodName); + +- public override Type GetReturnType(string invocationId); + +- public override Task OnConnectedAsync(HubConnectionContext connection); + +- public override Task OnDisconnectedAsync(HubConnectionContext connection, Exception exception); + +- } +- public class DefaultHubProtocolResolver : IHubProtocolResolver { + { +- public DefaultHubProtocolResolver(IEnumerable availableProtocols, ILogger logger); + +- public IReadOnlyList AllProtocols { get; } + +- public virtual IHubProtocol GetProtocol(string protocolName, IReadOnlyList supportedProtocols); + +- } +- public class HubCallerClients : IHubCallerClients, IHubCallerClients, IHubClients { + { +- public HubCallerClients(IHubClients hubClients, string connectionId); + +- public IClientProxy All { get; } + +- public IClientProxy Caller { get; } + +- public IClientProxy Others { get; } + +- public IClientProxy AllExcept(IReadOnlyList excludedConnectionIds); + +- public IClientProxy Client(string connectionId); + +- public IClientProxy Clients(IReadOnlyList connectionIds); + +- public IClientProxy Group(string groupName); + +- public IClientProxy GroupExcept(string groupName, IReadOnlyList excludedConnectionIds); + +- public IClientProxy Groups(IReadOnlyList groupNames); + +- public IClientProxy OthersInGroup(string groupName); + +- public IClientProxy User(string userId); + +- public IClientProxy Users(IReadOnlyList userIds); + +- } +- public abstract class HubDispatcher : IInvocationBinder where THub : Hub { + { +- protected HubDispatcher(); + +- public abstract Task DispatchMessageAsync(HubConnectionContext connection, HubMessage hubMessage); + +- public abstract IReadOnlyList GetParameterTypes(string methodName); + +- public abstract Type GetReturnType(string invocationId); + +- public abstract Task OnConnectedAsync(HubConnectionContext connection); + +- public abstract Task OnDisconnectedAsync(HubConnectionContext connection, Exception exception); + +- } +- public class HubOptionsSetup : IConfigureOptions { + { +- public HubOptionsSetup(IEnumerable protocols); + +- public void Configure(HubOptions options); + +- } +- public class HubOptionsSetup : IConfigureOptions> where THub : Hub { + { +- public HubOptionsSetup(IOptions options); + +- public void Configure(HubOptions options); + +- } +- public static class HubReflectionHelper { + { +- public static IEnumerable GetHubMethods(Type hubType); + +- } +- public static class TypeBaseEnumerationExtensions { + { +- public static IEnumerable AllBaseTypes(this Type type); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Protocols.Json.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Protocols.Json.md new file mode 100644 index 00000000..0140f7cb --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Protocols.Json.md @@ -0,0 +1,21 @@ +# Microsoft.AspNetCore.SignalR.Protocols.Json + +``` diff + { + namespace Microsoft.AspNetCore.SignalR { + public class JsonHubProtocolOptions { ++ public JsonSerializerOptions PayloadSerializerOptions { get; set; } +- public JsonSerializerSettings PayloadSerializerSettings { get; set; } + + } + } + namespace Microsoft.AspNetCore.SignalR.Protocol { +- public class JsonHubProtocol : IHubProtocol { ++ public sealed class JsonHubProtocol : IHubProtocol { +- public JsonSerializer PayloadSerializer { get; } + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.md new file mode 100644 index 00000000..2c53ded5 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.md @@ -0,0 +1,33 @@ +# Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson + +``` diff + { ++ namespace Microsoft.AspNetCore.SignalR { ++ public class NewtonsoftJsonHubProtocolOptions { ++ public NewtonsoftJsonHubProtocolOptions(); ++ public JsonSerializerSettings PayloadSerializerSettings { get; set; } ++ } ++ } ++ namespace Microsoft.AspNetCore.SignalR.Protocol { ++ public class NewtonsoftJsonHubProtocol : IHubProtocol { ++ public NewtonsoftJsonHubProtocol(); ++ public NewtonsoftJsonHubProtocol(IOptions options); ++ public string Name { get; } ++ public JsonSerializer PayloadSerializer { get; } ++ public TransferFormat TransferFormat { get; } ++ public int Version { get; } ++ public ReadOnlyMemory GetMessageBytes(HubMessage message); ++ public bool IsVersionSupported(int version); ++ public bool TryParseMessage(ref ReadOnlySequence input, IInvocationBinder binder, out HubMessage message); ++ public void WriteMessage(HubMessage message, IBufferWriter output); ++ } ++ } ++ namespace Microsoft.Extensions.DependencyInjection { ++ public static class NewtonsoftJsonProtocolDependencyInjectionExtensions { ++ public static TBuilder AddNewtonsoftJsonProtocol(this TBuilder builder) where TBuilder : ISignalRBuilder; ++ public static TBuilder AddNewtonsoftJsonProtocol(this TBuilder builder, Action configure) where TBuilder : ISignalRBuilder; ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Redis.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Redis.md new file mode 100644 index 00000000..15d7bcbb --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.Redis.md @@ -0,0 +1,124 @@ +# Microsoft.AspNetCore.SignalR.Redis + +``` diff + { + { +- namespace Microsoft.AspNetCore.SignalR.Redis { + { +- public class RedisHubLifetimeManager : HubLifetimeManager, IDisposable where THub : Hub { + { +- public RedisHubLifetimeManager(ILogger> logger, IOptions options, IHubProtocolResolver hubProtocolResolver); + +- public override Task AddToGroupAsync(string connectionId, string groupName, CancellationToken cancellationToken = default(CancellationToken)); + +- public void Dispose(); + +- public override Task OnConnectedAsync(HubConnectionContext connection); + +- public override Task OnDisconnectedAsync(HubConnectionContext connection); + +- public override Task RemoveFromGroupAsync(string connectionId, string groupName, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendAllAsync(string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendAllExceptAsync(string methodName, object[] args, IReadOnlyList excludedConnectionIds, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendConnectionAsync(string connectionId, string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendConnectionsAsync(IReadOnlyList connectionIds, string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendGroupAsync(string groupName, string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendGroupExceptAsync(string groupName, string methodName, object[] args, IReadOnlyList excludedConnectionIds, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendGroupsAsync(IReadOnlyList groupNames, string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendUserAsync(string userId, string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- public override Task SendUsersAsync(IReadOnlyList userIds, string methodName, object[] args, CancellationToken cancellationToken = default(CancellationToken)); + +- } +- public class RedisOptions { + { +- public RedisOptions(); + +- public ConfigurationOptions Configuration { get; set; } + +- public Func> ConnectionFactory { get; set; } + +- } +- } +- namespace Microsoft.AspNetCore.SignalR.Redis.Internal { + { +- public enum GroupAction : byte { + { +- Add = (byte)1, + +- Remove = (byte)2, + +- } +- public readonly struct RedisGroupCommand { + { +- public RedisGroupCommand(int id, string serverName, GroupAction action, string groupName, string connectionId); + +- public GroupAction Action { get; } + +- public string ConnectionId { get; } + +- public string GroupName { get; } + +- public int Id { get; } + +- public string ServerName { get; } + +- } +- public readonly struct RedisInvocation { + { +- public RedisInvocation(SerializedHubMessage message, IReadOnlyList excludedConnectionIds); + +- public IReadOnlyList ExcludedConnectionIds { get; } + +- public SerializedHubMessage Message { get; } + +- public static RedisInvocation Create(string target, object[] arguments, IReadOnlyList excludedConnectionIds = null); + +- } +- public class RedisProtocol { + { +- public RedisProtocol(IReadOnlyList protocols); + +- public int ReadAck(ReadOnlyMemory data); + +- public RedisGroupCommand ReadGroupCommand(ReadOnlyMemory data); + +- public RedisInvocation ReadInvocation(ReadOnlyMemory data); + +- public static SerializedHubMessage ReadSerializedHubMessage(ref ReadOnlyMemory data); + +- public byte[] WriteAck(int messageId); + +- public byte[] WriteGroupCommand(RedisGroupCommand command); + +- public byte[] WriteInvocation(string methodName, object[] args); + +- public byte[] WriteInvocation(string methodName, object[] args, IReadOnlyList excludedConnectionIds); + +- } +- } +- namespace Microsoft.Extensions.DependencyInjection { + { +- public static class RedisDependencyInjectionExtensions { + { +- public static ISignalRServerBuilder AddRedis(this ISignalRServerBuilder signalrBuilder); + +- public static ISignalRServerBuilder AddRedis(this ISignalRServerBuilder signalrBuilder, Action configure); + +- public static ISignalRServerBuilder AddRedis(this ISignalRServerBuilder signalrBuilder, string redisConnectionString); + +- public static ISignalRServerBuilder AddRedis(this ISignalRServerBuilder signalrBuilder, string redisConnectionString, Action configure); + +- } +- } +-} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.StackExchangeRedis.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.StackExchangeRedis.md new file mode 100644 index 00000000..86952392 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.StackExchangeRedis.md @@ -0,0 +1,64 @@ +# Microsoft.AspNetCore.SignalR.StackExchangeRedis + +``` diff + { +- namespace Microsoft.AspNetCore.SignalR.StackExchangeRedis.Internal { + { +- public enum GroupAction : byte { + { +- Add = (byte)1, + +- Remove = (byte)2, + +- } +- public readonly struct RedisGroupCommand { + { +- public RedisGroupCommand(int id, string serverName, GroupAction action, string groupName, string connectionId); + +- public GroupAction Action { get; } + +- public string ConnectionId { get; } + +- public string GroupName { get; } + +- public int Id { get; } + +- public string ServerName { get; } + +- } +- public readonly struct RedisInvocation { + { +- public RedisInvocation(SerializedHubMessage message, IReadOnlyList excludedConnectionIds); + +- public IReadOnlyList ExcludedConnectionIds { get; } + +- public SerializedHubMessage Message { get; } + +- public static RedisInvocation Create(string target, object[] arguments, IReadOnlyList excludedConnectionIds = null); + +- } +- public class RedisProtocol { + { +- public RedisProtocol(IReadOnlyList protocols); + +- public int ReadAck(ReadOnlyMemory data); + +- public RedisGroupCommand ReadGroupCommand(ReadOnlyMemory data); + +- public RedisInvocation ReadInvocation(ReadOnlyMemory data); + +- public static SerializedHubMessage ReadSerializedHubMessage(ref ReadOnlyMemory data); + +- public byte[] WriteAck(int messageId); + +- public byte[] WriteGroupCommand(RedisGroupCommand command); + +- public byte[] WriteInvocation(string methodName, object[] args); + +- public byte[] WriteInvocation(string methodName, object[] args, IReadOnlyList excludedConnectionIds); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.md new file mode 100644 index 00000000..a7b9b4c5 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.SignalR.md @@ -0,0 +1,17 @@ +# Microsoft.AspNetCore.SignalR + +``` diff + { + namespace Microsoft.AspNetCore.Builder { ++ public sealed class HubEndpointConventionBuilder : IEndpointConventionBuilder, IHubEndpointConventionBuilder { ++ public void Add(Action convention); ++ } ++ public static class HubEndpointRouteBuilderExtensions { ++ public static HubEndpointConventionBuilder MapHub(this IEndpointRouteBuilder endpoints, string pattern) where THub : Hub; ++ public static HubEndpointConventionBuilder MapHub(this IEndpointRouteBuilder endpoints, string pattern, Action configureOptions) where THub : Hub; ++ } ++ public interface IHubEndpointConventionBuilder : IEndpointConventionBuilder + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.StaticFiles.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.StaticFiles.md new file mode 100644 index 00000000..2f1b8fb7 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.StaticFiles.md @@ -0,0 +1,41 @@ +# Microsoft.AspNetCore.StaticFiles + +``` diff + { + namespace Microsoft.AspNetCore.Builder { + public class StaticFileOptions : SharedOptionsBase { ++ public HttpsCompressionMode HttpsCompression { get; set; } + } ++ public static class StaticFilesEndpointRouteBuilderExtensions { ++ public static IEndpointConventionBuilder MapFallbackToFile(this IEndpointRouteBuilder endpoints, string filePath); ++ public static IEndpointConventionBuilder MapFallbackToFile(this IEndpointRouteBuilder endpoints, string filePath, StaticFileOptions options); ++ public static IEndpointConventionBuilder MapFallbackToFile(this IEndpointRouteBuilder endpoints, string pattern, string filePath); ++ public static IEndpointConventionBuilder MapFallbackToFile(this IEndpointRouteBuilder endpoints, string pattern, string filePath, StaticFileOptions options); ++ } + } + namespace Microsoft.AspNetCore.StaticFiles { + public class DefaultFilesMiddleware { +- public DefaultFilesMiddleware(RequestDelegate next, IHostingEnvironment hostingEnv, IOptions options); + ++ public DefaultFilesMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, IOptions options); + } + public class DirectoryBrowserMiddleware { +- public DirectoryBrowserMiddleware(RequestDelegate next, IHostingEnvironment hostingEnv, IOptions options); + +- public DirectoryBrowserMiddleware(RequestDelegate next, IHostingEnvironment hostingEnv, HtmlEncoder encoder, IOptions options); + ++ public DirectoryBrowserMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, IOptions options); ++ public DirectoryBrowserMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, HtmlEncoder encoder, IOptions options); + } + public class StaticFileMiddleware { +- public StaticFileMiddleware(RequestDelegate next, IHostingEnvironment hostingEnv, IOptions options, ILoggerFactory loggerFactory); + ++ public StaticFileMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, IOptions options, ILoggerFactory loggerFactory); + } + public class StaticFileResponseContext { ++ public StaticFileResponseContext(HttpContext context, IFileInfo file); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.TestHost.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.TestHost.md new file mode 100644 index 00000000..7f4b545b --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.TestHost.md @@ -0,0 +1,36 @@ +# Microsoft.AspNetCore.TestHost + +``` diff + { + namespace Microsoft.AspNetCore.TestHost { + public class ClientHandler : HttpMessageHandler { +- public ClientHandler(PathString pathBase, IHttpApplication application); + + } ++ public static class HostBuilderTestServerExtensions { ++ public static HttpClient GetTestClient(this IHost host); ++ public static TestServer GetTestServer(this IHost host); ++ } ++ public class HttpResetTestException : Exception { ++ public HttpResetTestException(int errorCode); ++ public int ErrorCode { get; } ++ } + public class RequestBuilder { ++ public TestServer TestServer { get; } + } + public class TestServer : IDisposable, IServer { ++ public TestServer(IServiceProvider services); ++ public TestServer(IServiceProvider services, IFeatureCollection featureCollection); ++ public bool AllowSynchronousIO { get; set; } ++ public bool PreserveExecutionContext { get; set; } ++ public IServiceProvider Services { get; } + } + public static class WebHostBuilderExtensions { ++ public static HttpClient GetTestClient(this IWebHost host); ++ public static TestServer GetTestServer(this IWebHost host); ++ public static IWebHostBuilder UseTestServer(this IWebHostBuilder builder); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.WebSockets.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.WebSockets.md new file mode 100644 index 00000000..66fefee0 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.WebSockets.md @@ -0,0 +1,40 @@ +# Microsoft.AspNetCore.WebSockets + +``` diff + { + namespace Microsoft.AspNetCore.WebSockets { + public class WebSocketMiddleware { +- public WebSocketMiddleware(RequestDelegate next, IOptions options); + + } + } +- namespace Microsoft.AspNetCore.WebSockets.Internal { + { +- public static class Constants { + { +- public static class Headers { + { +- public const string Connection = "Connection"; + +- public const string ConnectionUpgrade = "Upgrade"; + +- public const string SecWebSocketAccept = "Sec-WebSocket-Accept"; + +- public const string SecWebSocketKey = "Sec-WebSocket-Key"; + +- public const string SecWebSocketProtocol = "Sec-WebSocket-Protocol"; + +- public const string SecWebSocketVersion = "Sec-WebSocket-Version"; + +- public const string SupportedVersion = "13"; + +- public const string Upgrade = "Upgrade"; + +- public const string UpgradeWebSocket = "websocket"; + +- } +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.WebUtilities.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.WebUtilities.md new file mode 100644 index 00000000..c1264e1a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.WebUtilities.md @@ -0,0 +1,46 @@ +# Microsoft.AspNetCore.WebUtilities + +``` diff + { + namespace Microsoft.AspNetCore.WebUtilities { + public class FileBufferingReadStream : Stream { ++ public FileBufferingReadStream(Stream inner, int memoryThreshold); ++ public override ValueTask DisposeAsync(); + } ++ public sealed class FileBufferingWriteStream : Stream { ++ public FileBufferingWriteStream(int memoryThreshold = 32768, long? bufferLimit = default(long?), Func tempFileDirectoryAccessor = null); ++ public override bool CanRead { get; } ++ public override bool CanSeek { get; } ++ public override bool CanWrite { get; } ++ public override long Length { get; } ++ public override long Position { get; set; } ++ protected override void Dispose(bool disposing); ++ public override ValueTask DisposeAsync(); ++ public Task DrainBufferAsync(Stream destination, CancellationToken cancellationToken = default(CancellationToken)); ++ public override void Flush(); ++ public override Task FlushAsync(CancellationToken cancellationToken); ++ public override int Read(byte[] buffer, int offset, int count); ++ public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); ++ public override long Seek(long offset, SeekOrigin origin); ++ public override void SetLength(long value); ++ public override void Write(byte[] buffer, int offset, int count); ++ public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken); ++ } ++ public class FormPipeReader { ++ public FormPipeReader(PipeReader pipeReader); ++ public FormPipeReader(PipeReader pipeReader, Encoding encoding); ++ public int KeyLengthLimit { get; set; } ++ public int ValueCountLimit { get; set; } ++ public int ValueLengthLimit { get; set; } ++ public Task> ReadFormAsync(CancellationToken cancellationToken = default(CancellationToken)); ++ } + public class HttpResponseStreamWriter : TextWriter { ++ public override ValueTask DisposeAsync(); + } + public static class WebEncoders { ++ public static string Base64UrlEncode(ReadOnlySpan input); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.md new file mode 100644 index 00000000..9a0776da --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.AspNetCore.md @@ -0,0 +1,12 @@ +# Microsoft.AspNetCore + +``` diff + { ++ namespace Microsoft.Extensions.Hosting { ++ public static class GenericHostBuilderExtensions { ++ public static IHostBuilder ConfigureWebHostDefaults(this IHostBuilder builder, Action configure); ++ } ++ } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.CodeAnalysis.Razor.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.CodeAnalysis.Razor.md new file mode 100644 index 00000000..166151fc --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.CodeAnalysis.Razor.md @@ -0,0 +1,19 @@ +# Microsoft.CodeAnalysis.Razor + +``` diff + { + namespace Microsoft.CodeAnalysis.Razor { ++ public static class CompilerFeatures { ++ public static void Register(RazorProjectEngineBuilder builder); ++ } + public sealed class DefaultTagHelperDescriptorProvider : RazorEngineFeatureBase, IRazorEngineFeature, IRazorFeature, ITagHelperDescriptorProvider { +- public bool DesignTime { get; set; } + + } ++ public static class RazorProjectEngineBuilderExtensions { ++ public static RazorProjectEngineBuilder SetCSharpLanguageVersion(this RazorProjectEngineBuilder builder, LanguageVersion csharpLanguageVersion); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Caching.Memory.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Caching.Memory.md new file mode 100644 index 00000000..10cf27da --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Caching.Memory.md @@ -0,0 +1,21 @@ +# Microsoft.Extensions.Caching.Memory + +``` diff + { + namespace Microsoft.Extensions.Caching.Distributed { + public class MemoryDistributedCache : IDistributedCache { ++ public MemoryDistributedCache(IOptions optionsAccessor, ILoggerFactory loggerFactory); + } + } + namespace Microsoft.Extensions.Caching.Memory { + public class MemoryCache : IDisposable, IMemoryCache { ++ public MemoryCache(IOptions optionsAccessor, ILoggerFactory loggerFactory); + } + public class MemoryCacheOptions : IOptions { +- public bool CompactOnMemoryPressure { get; set; } + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Abstractions.md new file mode 100644 index 00000000..d5c5ae7a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Abstractions.md @@ -0,0 +1,12 @@ +# Microsoft.Extensions.Configuration.Abstractions + +``` diff + { + namespace Microsoft.Extensions.Configuration { ++ public static class ConfigurationRootExtensions { ++ public static string GetDebugView(this IConfigurationRoot root); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.AzureKeyVault.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.AzureKeyVault.md new file mode 100644 index 00000000..312e205f --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.AzureKeyVault.md @@ -0,0 +1,24 @@ +# Microsoft.Extensions.Configuration.AzureKeyVault + +``` diff + { + namespace Microsoft.Extensions.Configuration { + public static class AzureKeyVaultConfigurationExtensions { ++ public static IConfigurationBuilder AddAzureKeyVault(this IConfigurationBuilder configurationBuilder, AzureKeyVaultConfigurationOptions options); + } + } + namespace Microsoft.Extensions.Configuration.AzureKeyVault { ++ public class AzureKeyVaultConfigurationOptions { ++ public AzureKeyVaultConfigurationOptions(); ++ public AzureKeyVaultConfigurationOptions(string vault); ++ public AzureKeyVaultConfigurationOptions(string vault, string clientId, X509Certificate2 certificate); ++ public AzureKeyVaultConfigurationOptions(string vault, string clientId, string clientSecret); ++ public KeyVaultClient Client { get; set; } ++ public IKeyVaultSecretManager Manager { get; set; } ++ public TimeSpan? ReloadInterval { get; set; } ++ public string Vault { get; set; } ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.FileExtensions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.FileExtensions.md new file mode 100644 index 00000000..57db9e9a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.FileExtensions.md @@ -0,0 +1,15 @@ +# Microsoft.Extensions.Configuration.FileExtensions + +``` diff + { + namespace Microsoft.Extensions.Configuration { +- public abstract class FileConfigurationProvider : ConfigurationProvider { ++ public abstract class FileConfigurationProvider : ConfigurationProvider, IDisposable { ++ public void Dispose(); ++ protected virtual void Dispose(bool disposing); ++ public override string ToString(); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Ini.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Ini.md new file mode 100644 index 00000000..fed39fcd --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Ini.md @@ -0,0 +1,23 @@ +# Microsoft.Extensions.Configuration.Ini + +``` diff + { + namespace Microsoft.Extensions.Configuration { + public static class IniConfigurationExtensions { ++ public static IConfigurationBuilder AddIniStream(this IConfigurationBuilder builder, Stream stream); + } + } + namespace Microsoft.Extensions.Configuration.Ini { ++ public class IniStreamConfigurationProvider : StreamConfigurationProvider { ++ public IniStreamConfigurationProvider(IniStreamConfigurationSource source); ++ public override void Load(Stream stream); ++ public static IDictionary Read(Stream stream); ++ } ++ public class IniStreamConfigurationSource : StreamConfigurationSource { ++ public IniStreamConfigurationSource(); ++ public override IConfigurationProvider Build(IConfigurationBuilder builder); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Json.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Json.md new file mode 100644 index 00000000..0c077719 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Json.md @@ -0,0 +1,22 @@ +# Microsoft.Extensions.Configuration.Json + +``` diff + { + namespace Microsoft.Extensions.Configuration { + public static class JsonConfigurationExtensions { ++ public static IConfigurationBuilder AddJsonStream(this IConfigurationBuilder builder, Stream stream); + } + } + namespace Microsoft.Extensions.Configuration.Json { ++ public class JsonStreamConfigurationProvider : StreamConfigurationProvider { ++ public JsonStreamConfigurationProvider(JsonStreamConfigurationSource source); ++ public override void Load(Stream stream); ++ } ++ public class JsonStreamConfigurationSource : StreamConfigurationSource { ++ public JsonStreamConfigurationSource(); ++ public override IConfigurationProvider Build(IConfigurationBuilder builder); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.KeyPerFile.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.KeyPerFile.md new file mode 100644 index 00000000..2a0645af --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.KeyPerFile.md @@ -0,0 +1,12 @@ +# Microsoft.Extensions.Configuration.KeyPerFile + +``` diff + { + namespace Microsoft.Extensions.Configuration.KeyPerFile { + public class KeyPerFileConfigurationProvider : ConfigurationProvider { ++ public override string ToString(); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.NewtonsoftJson.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.NewtonsoftJson.md new file mode 100644 index 00000000..3494c0cc --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.NewtonsoftJson.md @@ -0,0 +1,35 @@ +# Microsoft.Extensions.Configuration.NewtonsoftJson + +``` diff + { ++ namespace Microsoft.Extensions.Configuration { ++ public static class NewtonsoftJsonConfigurationExtensions { ++ public static IConfigurationBuilder AddNewtonsoftJsonFile(this IConfigurationBuilder builder, IFileProvider provider, string path, bool optional, bool reloadOnChange); ++ public static IConfigurationBuilder AddNewtonsoftJsonFile(this IConfigurationBuilder builder, Action configureSource); ++ public static IConfigurationBuilder AddNewtonsoftJsonFile(this IConfigurationBuilder builder, string path); ++ public static IConfigurationBuilder AddNewtonsoftJsonFile(this IConfigurationBuilder builder, string path, bool optional); ++ public static IConfigurationBuilder AddNewtonsoftJsonFile(this IConfigurationBuilder builder, string path, bool optional, bool reloadOnChange); ++ public static IConfigurationBuilder AddNewtonsoftJsonStream(this IConfigurationBuilder builder, Stream stream); ++ } ++ } ++ namespace Microsoft.Extensions.Configuration.NewtonsoftJson { ++ public class NewtonsoftJsonConfigurationProvider : FileConfigurationProvider { ++ public NewtonsoftJsonConfigurationProvider(NewtonsoftJsonConfigurationSource source); ++ public override void Load(Stream stream); ++ } ++ public class NewtonsoftJsonConfigurationSource : FileConfigurationSource { ++ public NewtonsoftJsonConfigurationSource(); ++ public override IConfigurationProvider Build(IConfigurationBuilder builder); ++ } ++ public class NewtonsoftJsonStreamConfigurationProvider : StreamConfigurationProvider { ++ public NewtonsoftJsonStreamConfigurationProvider(NewtonsoftJsonStreamConfigurationSource source); ++ public override void Load(Stream stream); ++ } ++ public class NewtonsoftJsonStreamConfigurationSource : StreamConfigurationSource { ++ public NewtonsoftJsonStreamConfigurationSource(); ++ public override IConfigurationProvider Build(IConfigurationBuilder builder); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.UserSecrets.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.UserSecrets.md new file mode 100644 index 00000000..6aa93a89 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.UserSecrets.md @@ -0,0 +1,14 @@ +# Microsoft.Extensions.Configuration.UserSecrets + +``` diff + { + namespace Microsoft.Extensions.Configuration { + public static class UserSecretsConfigurationExtensions { ++ public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder configuration, Assembly assembly, bool optional, bool reloadOnChange); ++ public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder configuration, string userSecretsId, bool reloadOnChange); ++ public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder configuration, bool optional, bool reloadOnChange) where T : class; + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Xml.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Xml.md new file mode 100644 index 00000000..ee727399 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.Xml.md @@ -0,0 +1,23 @@ +# Microsoft.Extensions.Configuration.Xml + +``` diff + { + namespace Microsoft.Extensions.Configuration { + public static class XmlConfigurationExtensions { ++ public static IConfigurationBuilder AddXmlStream(this IConfigurationBuilder builder, Stream stream); + } + } + namespace Microsoft.Extensions.Configuration.Xml { ++ public class XmlStreamConfigurationProvider : StreamConfigurationProvider { ++ public XmlStreamConfigurationProvider(XmlStreamConfigurationSource source); ++ public override void Load(Stream stream); ++ public static IDictionary Read(Stream stream, XmlDocumentDecryptor decryptor); ++ } ++ public class XmlStreamConfigurationSource : StreamConfigurationSource { ++ public XmlStreamConfigurationSource(); ++ public override IConfigurationProvider Build(IConfigurationBuilder builder); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.md new file mode 100644 index 00000000..5a84751a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Configuration.md @@ -0,0 +1,42 @@ +# Microsoft.Extensions.Configuration + +``` diff + { + namespace Microsoft.Extensions.Configuration { + public static class ChainedBuilderExtensions { ++ public static IConfigurationBuilder AddConfiguration(this IConfigurationBuilder configurationBuilder, IConfiguration config, bool shouldDisposeConfiguration); + } +- public class ChainedConfigurationProvider : IConfigurationProvider { ++ public class ChainedConfigurationProvider : IConfigurationProvider, IDisposable { ++ public void Dispose(); + } + public class ChainedConfigurationSource : IConfigurationSource { ++ public bool ShouldDisposeConfiguration { get; set; } + } + public abstract class ConfigurationProvider : IConfigurationProvider { ++ public override string ToString(); + } +- public class ConfigurationRoot : IConfiguration, IConfigurationRoot { ++ public class ConfigurationRoot : IConfiguration, IConfigurationRoot, IDisposable { ++ public void Dispose(); + } + public class ConfigurationSection : IConfiguration, IConfigurationSection { +- public ConfigurationSection(ConfigurationRoot root, string path); + ++ public ConfigurationSection(IConfigurationRoot root, string path); + } ++ public abstract class StreamConfigurationProvider : ConfigurationProvider { ++ public StreamConfigurationProvider(StreamConfigurationSource source); ++ public StreamConfigurationSource Source { get; } ++ public override void Load(); ++ public abstract void Load(Stream stream); ++ } ++ public abstract class StreamConfigurationSource : IConfigurationSource { ++ protected StreamConfigurationSource(); ++ public Stream Stream { get; set; } ++ public abstract IConfigurationProvider Build(IConfigurationBuilder builder); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.Abstractions.md new file mode 100644 index 00000000..39e18e7c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.Abstractions.md @@ -0,0 +1,12 @@ +# Microsoft.Extensions.DependencyInjection.Abstractions + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection { + public class ServiceDescriptor { ++ public override string ToString(); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.Specification.Tests.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.Specification.Tests.md new file mode 100644 index 00000000..dd0c9cff --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.Specification.Tests.md @@ -0,0 +1,18 @@ +# Microsoft.Extensions.DependencyInjection.Specification.Tests + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection.Specification { + public class ClassWithOptionalArgsCtorWithStructs { +- public ClassWithOptionalArgsCtorWithStructs(DateTime dateTime = default(DateTime), DateTime dateTimeDefault = default(DateTime), TimeSpan timeSpan = default(TimeSpan), TimeSpan timeSpanDefault = default(TimeSpan), DateTimeOffset dateTimeOffset = default(DateTimeOffset), DateTimeOffset dateTimeOffsetDefault = default(DateTimeOffset), Guid guid = default(Guid), Guid guidDefault = default(Guid), ClassWithOptionalArgsCtorWithStructs.CustomStruct customStruct = default(ClassWithOptionalArgsCtorWithStructs.CustomStruct), ClassWithOptionalArgsCtorWithStructs.CustomStruct customStructDefault = default(ClassWithOptionalArgsCtorWithStructs.CustomStruct)); + ++ public ClassWithOptionalArgsCtorWithStructs(DateTime dateTime = default(DateTime), DateTime dateTimeDefault = default(DateTime), TimeSpan timeSpan = default(TimeSpan), TimeSpan timeSpanDefault = default(TimeSpan), DateTimeOffset dateTimeOffset = default(DateTimeOffset), DateTimeOffset dateTimeOffsetDefault = default(DateTimeOffset), Guid guid = default(Guid), Guid guidDefault = default(Guid), ClassWithOptionalArgsCtorWithStructs.CustomStruct customStruct = default(ClassWithOptionalArgsCtorWithStructs.CustomStruct), ClassWithOptionalArgsCtorWithStructs.CustomStruct customStructDefault = default(ClassWithOptionalArgsCtorWithStructs.CustomStruct), ConsoleColor? color = 2, ConsoleColor? colorNull = default(ConsoleColor?), int? integer = 12, int? integerNull = default(int?)); ++ public ConsoleColor? Color { get; } ++ public ConsoleColor? ColorNull { get; } ++ public int? Integer { get; } ++ public int? IntegerNull { get; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.md new file mode 100644 index 00000000..0c73f713 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyInjection.md @@ -0,0 +1,16 @@ +# Microsoft.Extensions.DependencyInjection + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection { +- public sealed class ServiceProvider : IDisposable, IServiceProvider, IServiceProviderEngineCallback { ++ public sealed class ServiceProvider : IAsyncDisposable, IDisposable, IServiceProvider, IServiceProviderEngineCallback { ++ public ValueTask DisposeAsync(); + } + public class ServiceProviderOptions { ++ public bool ValidateOnBuild { get; set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyModel.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyModel.md new file mode 100644 index 00000000..0efef4a8 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.DependencyModel.md @@ -0,0 +1,23 @@ +# Microsoft.Extensions.DependencyModel + +``` diff + { ++ namespace Microsoft.DotNet.PlatformAbstractions { ++ public struct HashCodeCombiner { ++ public int CombinedHash { get; } ++ public void Add(int i); ++ public void Add(object o); ++ public void Add(string s); ++ public void Add(TValue value, IEqualityComparer comparer); ++ public static HashCodeCombiner Start(); ++ } ++ } + namespace Microsoft.Extensions.DependencyModel { + public class DependencyContextJsonReader : IDependencyContextReader, IDisposable { +- public IEnumerable ReadTargetLibraryDependencies(JsonTextReader reader); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.md new file mode 100644 index 00000000..9d884883 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.md @@ -0,0 +1,18 @@ +# Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions + +``` diff + { + namespace Microsoft.Extensions.Diagnostics.HealthChecks { + public sealed class HealthCheckRegistration { ++ public HealthCheckRegistration(string name, IHealthCheck instance, HealthStatus? failureStatus, IEnumerable tags, TimeSpan? timeout); ++ public HealthCheckRegistration(string name, Func factory, HealthStatus? failureStatus, IEnumerable tags, TimeSpan? timeout); ++ public TimeSpan Timeout { get; set; } + } + public struct HealthReportEntry { ++ public HealthReportEntry(HealthStatus status, string description, TimeSpan duration, Exception exception, IReadOnlyDictionary data, IEnumerable tags = null); ++ public IEnumerable Tags { get; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.md new file mode 100644 index 00000000..52b1ebca --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Diagnostics.HealthChecks.md @@ -0,0 +1,32 @@ +# Microsoft.Extensions.Diagnostics.HealthChecks + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection { + public static class HealthChecksBuilderAddCheckExtensions { +- public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, IHealthCheck instance, HealthStatus? failureStatus = default(HealthStatus?), IEnumerable tags = null); ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, IHealthCheck instance, HealthStatus? failureStatus, IEnumerable tags); ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, IHealthCheck instance, HealthStatus? failureStatus = default(HealthStatus?), IEnumerable tags = null, TimeSpan? timeout = default(TimeSpan?)); +- public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, HealthStatus? failureStatus = default(HealthStatus?), IEnumerable tags = null) where T : class, IHealthCheck; ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, HealthStatus? failureStatus, IEnumerable tags) where T : class, IHealthCheck; ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, HealthStatus? failureStatus = default(HealthStatus?), IEnumerable tags = null, TimeSpan? timeout = default(TimeSpan?)) where T : class, IHealthCheck; ++ public static IHealthChecksBuilder AddTypeActivatedCheck(this IHealthChecksBuilder builder, string name, HealthStatus? failureStatus, IEnumerable tags, TimeSpan timeout, params object[] args) where T : class, IHealthCheck; + } + public static class HealthChecksBuilderDelegateExtensions { +- public static IHealthChecksBuilder AddAsyncCheck(this IHealthChecksBuilder builder, string name, Func> check, IEnumerable tags = null); ++ public static IHealthChecksBuilder AddAsyncCheck(this IHealthChecksBuilder builder, string name, Func> check, IEnumerable tags); ++ public static IHealthChecksBuilder AddAsyncCheck(this IHealthChecksBuilder builder, string name, Func> check, IEnumerable tags = null, TimeSpan? timeout = default(TimeSpan?)); +- public static IHealthChecksBuilder AddAsyncCheck(this IHealthChecksBuilder builder, string name, Func> check, IEnumerable tags = null); ++ public static IHealthChecksBuilder AddAsyncCheck(this IHealthChecksBuilder builder, string name, Func> check, IEnumerable tags); ++ public static IHealthChecksBuilder AddAsyncCheck(this IHealthChecksBuilder builder, string name, Func> check, IEnumerable tags = null, TimeSpan? timeout = default(TimeSpan?)); +- public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, Func check, IEnumerable tags = null); ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, Func check, IEnumerable tags); ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, Func check, IEnumerable tags = null, TimeSpan? timeout = default(TimeSpan?)); +- public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, Func check, IEnumerable tags = null); ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, Func check, IEnumerable tags); ++ public static IHealthChecksBuilder AddCheck(this IHealthChecksBuilder builder, string name, Func check, IEnumerable tags = null, TimeSpan? timeout = default(TimeSpan?)); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Abstractions.md new file mode 100644 index 00000000..6d7e2a49 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Abstractions.md @@ -0,0 +1,47 @@ +# Microsoft.Extensions.Hosting.Abstractions + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection { + public static class ServiceCollectionHostedServiceExtensions { ++ public static IServiceCollection AddHostedService(this IServiceCollection services, Func implementationFactory) where THostedService : class, IHostedService; + } + } + namespace Microsoft.Extensions.Hosting { ++ public static class Environments { ++ public static readonly string Development; ++ public static readonly string Production; ++ public static readonly string Staging; ++ } + public class HostBuilderContext { +- public IHostingEnvironment HostingEnvironment { get; set; } ++ public IHostEnvironment HostingEnvironment { get; set; } + } ++ public static class HostEnvironmentEnvExtensions { ++ public static bool IsDevelopment(this IHostEnvironment hostEnvironment); ++ public static bool IsEnvironment(this IHostEnvironment hostEnvironment, string environmentName); ++ public static bool IsProduction(this IHostEnvironment hostEnvironment); ++ public static bool IsStaging(this IHostEnvironment hostEnvironment); ++ } + public static class HostingAbstractionsHostBuilderExtensions { ++ public static Task StartAsync(this IHostBuilder hostBuilder, CancellationToken cancellationToken = default(CancellationToken)); + } ++ public interface IHostApplicationLifetime { ++ CancellationToken ApplicationStarted { get; } ++ CancellationToken ApplicationStopped { get; } ++ CancellationToken ApplicationStopping { get; } ++ void StopApplication(); ++ } + public interface IHostBuilder { ++ IHostBuilder UseServiceProviderFactory(Func> factory); + } ++ public interface IHostEnvironment { ++ string ApplicationName { get; set; } ++ IFileProvider ContentRootFileProvider { get; set; } ++ string ContentRootPath { get; set; } ++ string EnvironmentName { get; set; } ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Systemd.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Systemd.md new file mode 100644 index 00000000..e1a3961a --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Systemd.md @@ -0,0 +1,38 @@ +# Microsoft.Extensions.Hosting.Systemd + +``` diff + { ++ namespace Microsoft.Extensions.Hosting { ++ public static class SystemdHostBuilderExtensions { ++ public static IHostBuilder UseSystemd(this IHostBuilder hostBuilder); ++ } ++ } ++ namespace Microsoft.Extensions.Hosting.Systemd { ++ public interface ISystemdNotifier { ++ bool IsEnabled { get; } ++ void Notify(ServiceState state); ++ } ++ public struct ServiceState { ++ public static readonly ServiceState Ready; ++ public static readonly ServiceState Stopping; ++ public ServiceState(string state); ++ public override string ToString(); ++ } ++ public static class SystemdHelpers { ++ public static bool IsSystemdService(); ++ } ++ public class SystemdLifetime : IDisposable, IHostLifetime { ++ public SystemdLifetime(IHostEnvironment environment, IHostApplicationLifetime applicationLifetime, ISystemdNotifier systemdNotifier, ILoggerFactory loggerFactory); ++ public void Dispose(); ++ public Task StopAsync(CancellationToken cancellationToken); ++ public Task WaitForStartAsync(CancellationToken cancellationToken); ++ } ++ public class SystemdNotifier : ISystemdNotifier { ++ public SystemdNotifier(); ++ public bool IsEnabled { get; } ++ public void Notify(ServiceState state); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.WindowsServices.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.WindowsServices.md new file mode 100644 index 00000000..8a13013c --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.WindowsServices.md @@ -0,0 +1,25 @@ +# Microsoft.Extensions.Hosting.WindowsServices + +``` diff + { ++ namespace Microsoft.Extensions.Hosting { ++ public static class WindowsServiceLifetimeHostBuilderExtensions { ++ public static IHostBuilder UseWindowsService(this IHostBuilder hostBuilder); ++ } ++ } ++ namespace Microsoft.Extensions.Hosting.WindowsServices { ++ public static class WindowsServiceHelpers { ++ public static bool IsWindowsService(); ++ } ++ public class WindowsServiceLifetime : ServiceBase, IHostLifetime { ++ public WindowsServiceLifetime(IHostEnvironment environment, IHostApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory, IOptions optionsAccessor); ++ protected override void Dispose(bool disposing); ++ protected override void OnStart(string[] args); ++ protected override void OnStop(); ++ public Task StopAsync(CancellationToken cancellationToken); ++ public Task WaitForStartAsync(CancellationToken cancellationToken); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.md new file mode 100644 index 00000000..7a374253 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.md @@ -0,0 +1,34 @@ +# Microsoft.Extensions.Hosting + +``` diff + { + namespace Microsoft.Extensions.Hosting { ++ public static class Host { ++ public static IHostBuilder CreateDefaultBuilder(); ++ public static IHostBuilder CreateDefaultBuilder(string[] args); ++ } + public class HostBuilder : IHostBuilder { ++ public IHostBuilder UseServiceProviderFactory(Func> factory); + } + public static class HostingHostBuilderExtensions { ++ public static Task RunConsoleAsync(this IHostBuilder hostBuilder, Action configureOptions, CancellationToken cancellationToken = default(CancellationToken)); ++ public static IHostBuilder UseConsoleLifetime(this IHostBuilder hostBuilder, Action configureOptions); ++ public static IHostBuilder UseDefaultServiceProvider(this IHostBuilder hostBuilder, Action configure); ++ public static IHostBuilder UseDefaultServiceProvider(this IHostBuilder hostBuilder, Action configure); + } + } + namespace Microsoft.Extensions.Hosting.Internal { +- public class ApplicationLifetime : IApplicationLifetime ++ public class ApplicationLifetime : IApplicationLifetime, IHostApplicationLifetime + public class ConsoleLifetime : IDisposable, IHostLifetime { ++ public ConsoleLifetime(IOptions options, IHostEnvironment environment, IHostApplicationLifetime applicationLifetime, IOptions hostOptions); ++ public ConsoleLifetime(IOptions options, IHostEnvironment environment, IHostApplicationLifetime applicationLifetime, IOptions hostOptions, ILoggerFactory loggerFactory); +- public ConsoleLifetime(IOptions options, IHostingEnvironment environment, IApplicationLifetime applicationLifetime); + + } +- public class HostingEnvironment : IHostingEnvironment ++ public class HostingEnvironment : IHostEnvironment, IHostingEnvironment + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Http.Polly.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Http.Polly.md new file mode 100644 index 00000000..f8a8bfa9 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Http.Polly.md @@ -0,0 +1,12 @@ +# Microsoft.Extensions.Http.Polly + +``` diff + { + namespace Microsoft.Extensions.DependencyInjection { + public static class PollyHttpClientBuilderExtensions { ++ public static IHttpClientBuilder AddPolicyHandler(this IHttpClientBuilder builder, Func> policyFactory, Func keySelector); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Identity.Core.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Identity.Core.md new file mode 100644 index 00000000..ea5d4caa --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Identity.Core.md @@ -0,0 +1,38 @@ +# Microsoft.Extensions.Identity.Core + +``` diff + { + namespace Microsoft.AspNetCore.Identity { ++ public class DefaultUserConfirmation : IUserConfirmation where TUser : class { ++ public DefaultUserConfirmation(); ++ public virtual Task IsConfirmedAsync(UserManager manager, TUser user); ++ } + public interface ILookupNormalizer { +- string Normalize(string key); + ++ string NormalizeEmail(string email); ++ string NormalizeName(string name); + } ++ public interface IUserConfirmation where TUser : class { ++ Task IsConfirmedAsync(UserManager manager, TUser user); ++ } + public class SignInOptions { ++ public bool RequireConfirmedAccount { get; set; } + } +- public class UpperInvariantLookupNormalizer : ILookupNormalizer { ++ public sealed class UpperInvariantLookupNormalizer : ILookupNormalizer { +- public virtual string Normalize(string key); + ++ public string NormalizeEmail(string email); ++ public string NormalizeName(string name); + } + public class UserManager : IDisposable where TUser : class { ++ public virtual string NormalizeEmail(string email); +- public virtual string NormalizeKey(string key); + ++ public virtual string NormalizeName(string name); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Localization.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Localization.Abstractions.md new file mode 100644 index 00000000..accf530e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Localization.Abstractions.md @@ -0,0 +1,11 @@ +# Microsoft.Extensions.Localization.Abstractions + +``` diff + { + namespace Microsoft.Extensions.Localization { +- public interface IStringLocalizer : IStringLocalizer ++ public interface IStringLocalizer : IStringLocalizer + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Abstractions.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Abstractions.md new file mode 100644 index 00000000..2690d9cb --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Abstractions.md @@ -0,0 +1,57 @@ +# Microsoft.Extensions.Logging.Abstractions + +``` diff + { +- namespace Microsoft.Extensions.Logging.Abstractions.Internal { + { +- public class NullScope : IDisposable { + { +- public static NullScope Instance { get; } + +- public void Dispose(); + +- } +- public class TypeNameHelper { + { +- public TypeNameHelper(); + +- public static string GetTypeDisplayName(Type type); + +- } +- } +- namespace Microsoft.Extensions.Logging.Internal { + { +- public class FormattedLogValues : IEnumerable, IEnumerable>, IReadOnlyCollection>, IReadOnlyList> { + { +- public FormattedLogValues(string format, params object[] values); + +- public int Count { get; } + +- public KeyValuePair this[int index] { get; } + +- public IEnumerator> GetEnumerator(); + +- IEnumerator System.Collections.IEnumerable.GetEnumerator(); + +- public override string ToString(); + +- } +- public class LogValuesFormatter { + { +- public LogValuesFormatter(string format); + +- public string OriginalFormat { get; private set; } + +- public List ValueNames { get; } + +- public string Format(object[] values); + +- public KeyValuePair GetValue(object[] values, int index); + +- public IEnumerable> GetValues(object[] values); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.AzureAppServices.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.AzureAppServices.md new file mode 100644 index 00000000..761a41bf --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.AzureAppServices.md @@ -0,0 +1,201 @@ +# Microsoft.Extensions.Logging.AzureAppServices + +``` diff + { + namespace Microsoft.Extensions.Logging { + public static class AzureAppServicesLoggerFactoryExtensions { +- public static ILoggerFactory AddAzureWebAppDiagnostics(this ILoggerFactory factory); + +- public static ILoggerFactory AddAzureWebAppDiagnostics(this ILoggerFactory factory, AzureAppServicesDiagnosticsSettings settings); + + } + } + namespace Microsoft.Extensions.Logging.AzureAppServices { +- public class AzureAppServicesDiagnosticsSettings { + { +- public AzureAppServicesDiagnosticsSettings(); + +- public int BackgroundQueueSize { get; set; } + +- public int BlobBatchSize { get; set; } + +- public TimeSpan BlobCommitPeriod { get; set; } + +- public string BlobName { get; set; } + +- public TimeSpan? FileFlushPeriod { get; set; } + +- public int FileSizeLimit { get; set; } + +- public string OutputTemplate { get; set; } + +- public int RetainedFileCountLimit { get; set; } + +- } ++ public class BatchingLoggerOptions { ++ public BatchingLoggerOptions(); ++ public int? BackgroundQueueSize { get; set; } ++ public int? BatchSize { get; set; } ++ public TimeSpan FlushPeriod { get; set; } ++ public bool IncludeScopes { get; set; } ++ public bool IsEnabled { get; set; } ++ } ++ public abstract class BatchingLoggerProvider : IDisposable, ILoggerProvider, ISupportExternalScope { ++ public bool IsEnabled { get; private set; } ++ public ILogger CreateLogger(string categoryName); ++ public void Dispose(); ++ protected virtual Task IntervalAsync(TimeSpan interval, CancellationToken cancellationToken); ++ void Microsoft.Extensions.Logging.ISupportExternalScope.SetScopeProvider(IExternalScopeProvider scopeProvider); ++ } ++ public class BlobLoggerProvider : BatchingLoggerProvider { ++ public BlobLoggerProvider(IOptionsMonitor options); ++ } ++ public class FileLoggerProvider : BatchingLoggerProvider { ++ public FileLoggerProvider(IOptionsMonitor options); ++ } + } +- namespace Microsoft.Extensions.Logging.AzureAppServices.Internal { + { +- public class BatchingLogger : ILogger { + { +- public BatchingLogger(BatchingLoggerProvider loggerProvider, string categoryName); + +- public IDisposable BeginScope(TState state); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- public void Log(DateTimeOffset timestamp, LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- } +- public class BatchingLoggerOptions { + { +- public BatchingLoggerOptions(); + +- public int? BackgroundQueueSize { get; set; } + +- public int? BatchSize { get; set; } + +- public TimeSpan FlushPeriod { get; set; } + +- public bool IsEnabled { get; set; } + +- } +- public abstract class BatchingLoggerProvider : IDisposable, ILoggerProvider { + { +- protected BatchingLoggerProvider(IOptionsMonitor options); + +- public bool IsEnabled { get; private set; } + +- public ILogger CreateLogger(string categoryName); + +- public void Dispose(); + +- protected virtual Task IntervalAsync(TimeSpan interval, CancellationToken cancellationToken); + +- protected abstract Task WriteMessagesAsync(IEnumerable messages, CancellationToken token); + +- } +- public class BatchLoggerConfigureOptions : IConfigureOptions { + { +- public BatchLoggerConfigureOptions(IConfiguration configuration, string isEnabledKey); + +- public void Configure(BatchingLoggerOptions options); + +- } +- public class BlobAppendReferenceWrapper : ICloudAppendBlob { + { +- public BlobAppendReferenceWrapper(string containerUrl, string name, HttpClient client); + +- public Task AppendAsync(ArraySegment data, CancellationToken cancellationToken); + +- } +- public class BlobLoggerConfigureOptions : BatchLoggerConfigureOptions, IConfigureOptions { + { +- public BlobLoggerConfigureOptions(IConfiguration configuration, IWebAppContext context); + +- public void Configure(AzureBlobLoggerOptions options); + +- } +- public class BlobLoggerProvider : BatchingLoggerProvider { + { +- public BlobLoggerProvider(IOptionsMonitor options); + +- public BlobLoggerProvider(IOptionsMonitor options, Func blobReferenceFactory); + +- protected override Task WriteMessagesAsync(IEnumerable messages, CancellationToken cancellationToken); + +- } +- public class ConfigurationBasedLevelSwitcher : IConfigureOptions { + { +- public ConfigurationBasedLevelSwitcher(IConfiguration configuration, Type provider, string levelKey); + +- public void Configure(LoggerFilterOptions options); + +- } +- public class FileLoggerConfigureOptions : BatchLoggerConfigureOptions, IConfigureOptions { + { +- public FileLoggerConfigureOptions(IConfiguration configuration, IWebAppContext context); + +- public void Configure(AzureFileLoggerOptions options); + +- } +- public class FileLoggerProvider : BatchingLoggerProvider { + { +- public FileLoggerProvider(IOptionsMonitor options); + +- public (int Year, int Month, int Day) GetGrouping(LogMessage message); + +- protected void RollFiles(); + +- protected override Task WriteMessagesAsync(IEnumerable messages, CancellationToken cancellationToken); + +- } +- public interface ICloudAppendBlob { + { +- Task AppendAsync(ArraySegment data, CancellationToken cancellationToken); + +- } +- public interface IWebAppContext { + { +- string HomeFolder { get; } + +- bool IsRunningInAzureWebApp { get; } + +- string SiteInstanceId { get; } + +- string SiteName { get; } + +- } +- public struct LogMessage { + { +- public string Message { get; set; } + +- public DateTimeOffset Timestamp { get; set; } + +- } +- public class SiteConfigurationProvider { + { +- public SiteConfigurationProvider(); + +- public static IConfiguration GetAzureLoggingConfiguration(IWebAppContext context); + +- } +- public class WebAppContext : IWebAppContext { + { +- public static WebAppContext Default { get; } + +- public string HomeFolder { get; } + +- public bool IsRunningInAzureWebApp { get; } + +- public string SiteInstanceId { get; } + +- public string SiteName { get; } + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Configuration.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Configuration.md new file mode 100644 index 00000000..629c3613 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Configuration.md @@ -0,0 +1,12 @@ +# Microsoft.Extensions.Logging.Configuration + +``` diff + { + namespace Microsoft.Extensions.Logging.Configuration { ++ public static class LoggerProviderOptions { ++ public static void RegisterProviderOptions(IServiceCollection services) where TOptions : class; ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Console.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Console.md new file mode 100644 index 00000000..6c05bfb4 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Console.md @@ -0,0 +1,188 @@ +# Microsoft.Extensions.Logging.Console + +``` diff + { + namespace Microsoft.Extensions.Logging { + public static class ConsoleLoggerExtensions { +- public static ILoggerFactory AddConsole(this ILoggerFactory factory); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, IConfiguration configuration); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, IConsoleLoggerSettings settings); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, LogLevel minLevel); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, LogLevel minLevel, bool includeScopes); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, bool includeScopes); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, Func filter); + +- public static ILoggerFactory AddConsole(this ILoggerFactory factory, Func filter, bool includeScopes); + + } + } + namespace Microsoft.Extensions.Logging.Console { +- public class ConfigurationConsoleLoggerSettings : IConsoleLoggerSettings { + { +- public ConfigurationConsoleLoggerSettings(IConfiguration configuration); + +- public IChangeToken ChangeToken { get; private set; } + +- public bool IncludeScopes { get; } + +- public IConsoleLoggerSettings Reload(); + +- public bool TryGetSwitch(string name, out LogLevel level); + +- } +- public class ConsoleLogger : ILogger { + { +- public ConsoleLogger(string name, Func filter, IExternalScopeProvider scopeProvider); + +- public ConsoleLogger(string name, Func filter, bool includeScopes); + +- public IConsole Console { get; set; } + +- public bool DisableColors { get; set; } + +- public Func Filter { get; set; } + +- public bool IncludeScopes { get; set; } + +- public string Name { get; } + +- public IDisposable BeginScope(TState state); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- public virtual void WriteMessage(LogLevel logLevel, string logName, int eventId, string message, Exception exception); + +- } ++ public enum ConsoleLoggerFormat { ++ Default = 0, ++ Systemd = 1, ++ } + public class ConsoleLoggerOptions { ++ public ConsoleLoggerFormat Format { get; set; } ++ public LogLevel LogToStandardErrorThreshold { get; set; } ++ public string TimestampFormat { get; set; } + } + public class ConsoleLoggerProvider : IDisposable, ILoggerProvider, ISupportExternalScope { +- public ConsoleLoggerProvider(IConsoleLoggerSettings settings); + +- public ConsoleLoggerProvider(Func filter, bool includeScopes); + +- public ConsoleLoggerProvider(Func filter, bool includeScopes, bool disableColors); + + } +- public class ConsoleLoggerSettings : IConsoleLoggerSettings { + { +- public ConsoleLoggerSettings(); + +- public IChangeToken ChangeToken { get; set; } + +- public bool DisableColors { get; set; } + +- public bool IncludeScopes { get; set; } + +- public IDictionary Switches { get; set; } + +- public IConsoleLoggerSettings Reload(); + +- public bool TryGetSwitch(string name, out LogLevel level); + +- } +- public class ConsoleLogScope { + { +- public static ConsoleLogScope Current { get; set; } + +- public ConsoleLogScope Parent { get; private set; } + +- public static IDisposable Push(string name, object state); + +- public override string ToString(); + +- } +- public interface IConsoleLoggerSettings { + { +- IChangeToken ChangeToken { get; } + +- bool IncludeScopes { get; } + +- IConsoleLoggerSettings Reload(); + +- bool TryGetSwitch(string name, out LogLevel level); + +- } + } +- namespace Microsoft.Extensions.Logging.Console.Internal { + { +- public class AnsiLogConsole : IConsole { + { +- public AnsiLogConsole(IAnsiSystemConsole systemConsole); + +- public void Flush(); + +- public void Write(string message, ConsoleColor? background, ConsoleColor? foreground); + +- public void WriteLine(string message, ConsoleColor? background, ConsoleColor? foreground); + +- } +- public class ConsoleLoggerProcessor : IDisposable { + { +- public IConsole Console; + +- public ConsoleLoggerProcessor(); + +- public void Dispose(); + +- public virtual void EnqueueMessage(LogMessageEntry message); + +- } +- public interface IAnsiSystemConsole { + { +- void Write(string message); + +- void WriteLine(string message); + +- } +- public interface IConsole { + { +- void Flush(); + +- void Write(string message, ConsoleColor? background, ConsoleColor? foreground); + +- void WriteLine(string message, ConsoleColor? background, ConsoleColor? foreground); + +- } +- public struct LogMessageEntry { + { +- public ConsoleColor? LevelBackground; + +- public ConsoleColor? LevelForeground; + +- public ConsoleColor? MessageColor; + +- public string LevelString; + +- public string Message; + +- } +- public class WindowsLogConsole : IConsole { + { +- public WindowsLogConsole(); + +- public void Flush(); + +- public void Write(string message, ConsoleColor? background, ConsoleColor? foreground); + +- public void WriteLine(string message, ConsoleColor? background, ConsoleColor? foreground); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Debug.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Debug.md new file mode 100644 index 00000000..6e7fbe84 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.Debug.md @@ -0,0 +1,36 @@ +# Microsoft.Extensions.Logging.Debug + +``` diff + { + namespace Microsoft.Extensions.Logging { + public static class DebugLoggerFactoryExtensions { +- public static ILoggerFactory AddDebug(this ILoggerFactory factory); + +- public static ILoggerFactory AddDebug(this ILoggerFactory factory, LogLevel minLevel); + +- public static ILoggerFactory AddDebug(this ILoggerFactory factory, Func filter); + + } + } + namespace Microsoft.Extensions.Logging.Debug { +- public class DebugLogger : ILogger { + { +- public DebugLogger(string name); + +- public DebugLogger(string name, Func filter); + +- public IDisposable BeginScope(TState state); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- } + public class DebugLoggerProvider : IDisposable, ILoggerProvider { +- public DebugLoggerProvider(Func filter); + + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.EventLog.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.EventLog.md new file mode 100644 index 00000000..a3a29bd4 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.EventLog.md @@ -0,0 +1,65 @@ +# Microsoft.Extensions.Logging.EventLog + +``` diff + { + namespace Microsoft.Extensions.Logging { + public static class EventLoggerFactoryExtensions { +- public static ILoggerFactory AddEventLog(this ILoggerFactory factory); + +- public static ILoggerFactory AddEventLog(this ILoggerFactory factory, EventLogSettings settings); + +- public static ILoggerFactory AddEventLog(this ILoggerFactory factory, LogLevel minLevel); + ++ public static ILoggingBuilder AddEventLog(this ILoggingBuilder builder, Action configure); + } + } + namespace Microsoft.Extensions.Logging.EventLog { +- public class EventLogLogger : ILogger { + { +- public EventLogLogger(string name); + +- public EventLogLogger(string name, EventLogSettings settings); + +- public EventLogLogger(string name, EventLogSettings settings, IExternalScopeProvider externalScopeProvider); + +- public IEventLog EventLog { get; } + +- public IDisposable BeginScope(TState state); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- } + public class EventLogLoggerProvider : IDisposable, ILoggerProvider, ISupportExternalScope { ++ public EventLogLoggerProvider(IOptions options); + } + public class EventLogSettings { +- public IEventLog EventLog { get; set; } + + } +- public class WindowsEventLog : IEventLog { + { +- public WindowsEventLog(string logName, string machineName, string sourceName); + +- public EventLog DiagnosticsEventLog { get; } + +- public int MaxMessageSize { get; } + +- public void WriteEntry(string message, EventLogEntryType type, int eventID, short category); + +- } + } +- namespace Microsoft.Extensions.Logging.EventLog.Internal { + { +- public interface IEventLog { + { +- int MaxMessageSize { get; } + +- void WriteEntry(string message, EventLogEntryType type, int eventID, short category); + +- } +- } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.EventSource.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.EventSource.md new file mode 100644 index 00000000..8ce49010 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.EventSource.md @@ -0,0 +1,29 @@ +# Microsoft.Extensions.Logging.EventSource + +``` diff + { + namespace Microsoft.Extensions.Logging { + public static class EventSourceLoggerFactoryExtensions { +- public static ILoggerFactory AddEventSourceLogger(this ILoggerFactory factory); + + } + } ++ namespace Microsoft.Extensions.Logging.EventSource { ++ public class EventSourceLoggerProvider : IDisposable, ILoggerProvider { ++ public EventSourceLoggerProvider(LoggingEventSource eventSource); ++ public ILogger CreateLogger(string categoryName); ++ public void Dispose(); ++ } ++ public sealed class LoggingEventSource : EventSource { ++ protected override void OnEventCommand(EventCommandEventArgs command); ++ public static class Keywords { ++ public const EventKeywords FormattedMessage = (EventKeywords)(4); ++ public const EventKeywords JsonMessage = (EventKeywords)(8); ++ public const EventKeywords Message = (EventKeywords)(2); ++ public const EventKeywords Meta = (EventKeywords)(1); ++ } ++ } ++ } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.TraceSource.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.TraceSource.md new file mode 100644 index 00000000..f969017e --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.TraceSource.md @@ -0,0 +1,39 @@ +# Microsoft.Extensions.Logging.TraceSource + +``` diff + { + namespace Microsoft.Extensions.Logging { + public static class TraceSourceFactoryExtensions { +- public static ILoggerFactory AddTraceSource(this ILoggerFactory factory, SourceSwitch sourceSwitch); + +- public static ILoggerFactory AddTraceSource(this ILoggerFactory factory, SourceSwitch sourceSwitch, TraceListener listener); + +- public static ILoggerFactory AddTraceSource(this ILoggerFactory factory, string switchName); + +- public static ILoggerFactory AddTraceSource(this ILoggerFactory factory, string switchName, TraceListener listener); + + } + } + namespace Microsoft.Extensions.Logging.TraceSource { +- public class TraceSourceLogger : ILogger { + { +- public TraceSourceLogger(TraceSource traceSource); + +- public IDisposable BeginScope(TState state); + +- public bool IsEnabled(LogLevel logLevel); + +- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter); + +- } +- public class TraceSourceScope : IDisposable { + { +- public TraceSourceScope(object state); + +- public void Dispose(); + +- } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.md new file mode 100644 index 00000000..4e6e0b51 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Logging.md @@ -0,0 +1,15 @@ +# Microsoft.Extensions.Logging + +``` diff + { + namespace Microsoft.Extensions.Logging { + public class LoggerFactory : IDisposable, ILoggerFactory { ++ public static ILoggerFactory Create(Action configure); + } + public class LoggerFilterOptions { ++ public bool CaptureScopes { get; set; } + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.ObjectPool.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.ObjectPool.md new file mode 100644 index 00000000..e9d9bf59 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.ObjectPool.md @@ -0,0 +1,12 @@ +# Microsoft.Extensions.ObjectPool + +``` diff + { + namespace Microsoft.Extensions.ObjectPool { ++ public static class ObjectPool { ++ public static ObjectPool Create(IPooledObjectPolicy policy = null) where T : class, new(); ++ } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Options.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Options.md new file mode 100644 index 00000000..8c885879 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.Extensions.Options.md @@ -0,0 +1,90 @@ +# Microsoft.Extensions.Options + +``` diff + { + namespace Microsoft.Extensions.Options { + public class OptionsBuilder where TOptions : class { ++ public virtual OptionsBuilder Validate(Func validation); ++ public virtual OptionsBuilder Validate(Func validation, string failureMessage); ++ public virtual OptionsBuilder Validate(Func validation); ++ public virtual OptionsBuilder Validate(Func validation, string failureMessage); ++ public virtual OptionsBuilder Validate(Func validation); ++ public virtual OptionsBuilder Validate(Func validation, string failureMessage); ++ public virtual OptionsBuilder Validate(Func validation); ++ public virtual OptionsBuilder Validate(Func validation, string failureMessage); ++ public virtual OptionsBuilder Validate(Func validation); ++ public virtual OptionsBuilder Validate(Func validation, string failureMessage); + } +- public class OptionsMonitor : IOptionsMonitor where TOptions : class, new() { ++ public class OptionsMonitor : IDisposable, IOptionsMonitor where TOptions : class, new() { ++ public void Dispose(); + } + public class OptionsValidationException : Exception { ++ public override string Message { get; } + } + public class OptionsWrapper : IOptions where TOptions : class, new() { +- public void Add(string name, TOptions options); + +- public TOptions Get(string name); + +- public bool Remove(string name); + + } ++ public class ValidateOptions : IValidateOptions where TOptions : class { ++ public ValidateOptions(string name, TDep dependency, Func validation, string failureMessage); ++ public TDep Dependency { get; } ++ public string FailureMessage { get; } ++ public string Name { get; } ++ public Func Validation { get; } ++ public ValidateOptionsResult Validate(string name, TOptions options); ++ } ++ public class ValidateOptions : IValidateOptions where TOptions : class { ++ public ValidateOptions(string name, TDep1 dependency1, TDep2 dependency2, Func validation, string failureMessage); ++ public TDep1 Dependency1 { get; } ++ public TDep2 Dependency2 { get; } ++ public string FailureMessage { get; } ++ public string Name { get; } ++ public Func Validation { get; } ++ public ValidateOptionsResult Validate(string name, TOptions options); ++ } ++ public class ValidateOptions : IValidateOptions where TOptions : class { ++ public ValidateOptions(string name, TDep1 dependency1, TDep2 dependency2, TDep3 dependency3, Func validation, string failureMessage); ++ public TDep1 Dependency1 { get; } ++ public TDep2 Dependency2 { get; } ++ public TDep3 Dependency3 { get; } ++ public string FailureMessage { get; } ++ public string Name { get; } ++ public Func Validation { get; } ++ public ValidateOptionsResult Validate(string name, TOptions options); ++ } ++ public class ValidateOptions : IValidateOptions where TOptions : class { ++ public ValidateOptions(string name, TDep1 dependency1, TDep2 dependency2, TDep3 dependency3, TDep4 dependency4, Func validation, string failureMessage); ++ public TDep1 Dependency1 { get; } ++ public TDep2 Dependency2 { get; } ++ public TDep3 Dependency3 { get; } ++ public TDep4 Dependency4 { get; } ++ public string FailureMessage { get; } ++ public string Name { get; } ++ public Func Validation { get; } ++ public ValidateOptionsResult Validate(string name, TOptions options); ++ } ++ public class ValidateOptions : IValidateOptions where TOptions : class { ++ public ValidateOptions(string name, TDep1 dependency1, TDep2 dependency2, TDep3 dependency3, TDep4 dependency4, TDep5 dependency5, Func validation, string failureMessage); ++ public TDep1 Dependency1 { get; } ++ public TDep2 Dependency2 { get; } ++ public TDep3 Dependency3 { get; } ++ public TDep4 Dependency4 { get; } ++ public TDep5 Dependency5 { get; } ++ public string FailureMessage { get; } ++ public string Name { get; } ++ public Func Validation { get; } ++ public ValidateOptionsResult Validate(string name, TOptions options); ++ } + public class ValidateOptionsResult { ++ public IEnumerable Failures { get; protected set; } ++ public static ValidateOptionsResult Fail(IEnumerable failures); + } + } + } +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.JSInterop.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.JSInterop.md new file mode 100644 index 00000000..7e900393 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Microsoft.JSInterop.md @@ -0,0 +1,79 @@ +# Microsoft.JSInterop + +``` diff + { ++ namespace Microsoft.JSInterop { ++ public static class DotNetObjectReference { ++ public static DotNetObjectReference Create(TValue value) where TValue : class; ++ } ++ public sealed class DotNetObjectReference : IDisposable, IDotNetObjectReference where TValue : class { ++ public TValue Value { get; } ++ public void Dispose(); ++ } ++ public interface IJSInProcessRuntime : IJSRuntime { ++ T Invoke(string identifier, params object[] args); ++ } ++ public interface IJSRuntime { ++ ValueTask InvokeAsync(string identifier, object[] args); ++ ValueTask InvokeAsync(string identifier, CancellationToken cancellationToken, object[] args); ++ } ++ public class JSException : Exception { ++ public JSException(string message); ++ public JSException(string message, Exception innerException); ++ } ++ public abstract class JSInProcessRuntime : JSRuntime, IJSInProcessRuntime, IJSRuntime { ++ protected JSInProcessRuntime(); ++ public TValue Invoke(string identifier, params object[] args); ++ protected abstract string InvokeJS(string identifier, string argsJson); ++ } ++ public static class JSInProcessRuntimeExtensions { ++ public static void InvokeVoid(this IJSInProcessRuntime jsRuntime, string identifier, params object[] args); ++ } ++ public sealed class JSInvokableAttribute : Attribute { ++ public JSInvokableAttribute(); ++ public JSInvokableAttribute(string identifier); ++ public string Identifier { get; } ++ } ++ public abstract class JSRuntime : IJSRuntime { ++ protected JSRuntime(); ++ protected TimeSpan? DefaultAsyncTimeout { get; set; } ++ protected internal JsonSerializerOptions JsonSerializerOptions { get; } ++ protected abstract void BeginInvokeJS(long taskId, string identifier, string argsJson); ++ protected internal abstract void EndInvokeDotNet(DotNetInvocationInfo invocationInfo, in DotNetInvocationResult invocationResult); ++ public ValueTask InvokeAsync(string identifier, object[] args); ++ public ValueTask InvokeAsync(string identifier, CancellationToken cancellationToken, object[] args); ++ } ++ public static class JSRuntimeExtensions { ++ public static ValueTask InvokeAsync(this IJSRuntime jsRuntime, string identifier, params object[] args); ++ public static ValueTask InvokeAsync(this IJSRuntime jsRuntime, string identifier, CancellationToken cancellationToken, params object[] args); ++ public static ValueTask InvokeAsync(this IJSRuntime jsRuntime, string identifier, TimeSpan timeout, params object[] args); ++ public static ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, params object[] args); ++ public static ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, CancellationToken cancellationToken, params object[] args); ++ public static ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, TimeSpan timeout, params object[] args); ++ } ++ } ++ namespace Microsoft.JSInterop.Infrastructure { ++ public static class DotNetDispatcher { ++ public static void BeginInvokeDotNet(JSRuntime jsRuntime, DotNetInvocationInfo invocationInfo, string argsJson); ++ public static void EndInvokeJS(JSRuntime jsRuntime, string arguments); ++ public static string Invoke(JSRuntime jsRuntime, in DotNetInvocationInfo invocationInfo, string argsJson); ++ } ++ public readonly struct DotNetInvocationInfo { ++ public DotNetInvocationInfo(string assemblyName, string methodIdentifier, long dotNetObjectId, string callId); ++ public string AssemblyName { get; } ++ public string CallId { get; } ++ public long DotNetObjectId { get; } ++ public string MethodIdentifier { get; } ++ } ++ public readonly struct DotNetInvocationResult { ++ public DotNetInvocationResult(Exception exception, string errorKind); ++ public DotNetInvocationResult(object result); ++ public string ErrorKind { get; } ++ public Exception Exception { get; } ++ public object Result { get; } ++ public bool Success { get; } ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Mono.WebAssembly.Interop.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Mono.WebAssembly.Interop.md new file mode 100644 index 00000000..efa8d7e3 --- /dev/null +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/Asp.Net/3.0.0_Mono.WebAssembly.Interop.md @@ -0,0 +1,20 @@ +# Mono.WebAssembly.Interop + +``` diff + { ++ namespace Mono.WebAssembly.Interop { ++ public class MonoWebAssemblyJSRuntime : JSInProcessRuntime { ++ public MonoWebAssemblyJSRuntime(); ++ protected override void BeginInvokeJS(long asyncHandle, string identifier, string argsJson); ++ protected override void EndInvokeDotNet(DotNetInvocationInfo callInfo, in DotNetInvocationResult dispatchResult); ++ protected static void Initialize(MonoWebAssemblyJSRuntime jsRuntime); ++ protected override string InvokeJS(string identifier, string argsJson); ++ public TRes InvokeUnmarshalled(string identifier, T0 arg0, T1 arg1, T2 arg2); ++ public TRes InvokeUnmarshalled(string identifier, T0 arg0, T1 arg1); ++ public TRes InvokeUnmarshalled(string identifier, T0 arg0); ++ public TRes InvokeUnmarshalled(string identifier); ++ } ++ } ++} +``` + diff --git a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/README.md b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/README.md index fc8bd4df..bb93d5f5 100644 --- a/release-notes/3.0/preview/api-diff/3.0 vs 2.2/README.md +++ b/release-notes/3.0/preview/api-diff/3.0 vs 2.2/README.md @@ -1,6 +1,7 @@ -# .NET Core 3.0 API Changes +# .NET Core 3.0.0 API Changes -The following API changes were made in .NET Core 3.0: +The following API changes were made in .NET Core 3.0.0: -- [.NET Core](./3.0.0.md) -- [.NET Core NuGet Packages](./standalone-packages/3.0.0-standalone-packages.md) +- [.NET Core](./.Net/3.0.0.md) +- [.NET Core NuGet Packages](./.Net/standalone-packages/3.0.0-standalone-packages.md) +- [ASP.NET Core](./Asp.Net/3.0.0.md)