new file: .vs/WS_CK/CopilotIndices/17.12.38.29086/CodeChunks.db
new file: .vs/WS_CK/CopilotIndices/17.12.38.29086/SemanticSymbols.db new file: .vs/WS_CK/CopilotIndices/17.12.38.29086/SemanticSymbols.db-shm new file: .vs/WS_CK/CopilotIndices/17.12.38.29086/SemanticSymbols.db-wal new file: .vs/WS_CK/CopilotIndices/17.14.794.21998/CodeChunks.db new file: .vs/WS_CK/CopilotIndices/17.14.794.21998/SemanticSymbols.db new file: .vs/WS_CK/FileContentIndex/5dada80d-8df1-417f-8506-f8f6653393d9.vsidx new file: .vs/WS_CK/FileContentIndex/769663d8-2746-4c1c-b413-ef52b5eb725f.vsidx new file: .vs/WS_CK/FileContentIndex/7bd55651-50a4-41b2-aeb7-b5585201e81b.vsidx new file: .vs/WS_CK/FileContentIndex/9d2b14a4-778d-45e2-a663-40b30c934ea4.vsidx new file: .vs/WS_CK/FileContentIndex/bea18a74-cd9c-4a14-8905-f878b2c23947.vsidx new file: .vs/WS_CK/config/applicationhost.config new file: .vs/WS_CK/copilot-chat/4ea4c1b1/sessions/f94ecd32-b8b3-4865-a6bf-663427314364 new file: .vs/WS_CK/v16/.suo new file: .vs/WS_CK/v17/.suo new file: .vs/WS_CK/v17/DocumentLayout.backup.json new file: .vs/WS_CK/v17/DocumentLayout.json new file: WS_CK.sln new file: WS_CK/.vs/WS_CK.csproj.dtbcache.json new file: WS_CK/App_Start/FilterConfig.cs new file: WS_CK/App_Start/RouteConfig.cs new file: WS_CK/App_Start/SwaggerConfig.cs new file: WS_CK/App_Start/WebApiConfig.cs new file: WS_CK/Areas/HelpPage/ApiDescriptionExtensions.cs new file: WS_CK/Areas/HelpPage/App_Start/HelpPageConfig.cs new file: WS_CK/Areas/HelpPage/Controllers/HelpController.cs new file: WS_CK/Areas/HelpPage/HelpPage.css new file: WS_CK/Areas/HelpPage/HelpPageAreaRegistration.cs new file: WS_CK/Areas/HelpPage/HelpPageConfigurationExtensions.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ModelDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs new file: WS_CK/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs new file: WS_CK/Areas/HelpPage/Models/HelpPageApiModel.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/ImageSample.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/InvalidSample.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/SampleDirection.cs new file: WS_CK/Areas/HelpPage/SampleGeneration/TextSample.cs new file: WS_CK/Areas/HelpPage/Views/Help/Api.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/Index.cshtml new file: WS_CK/Areas/HelpPage/Views/Help/ResourceModel.cshtml new file: WS_CK/Areas/HelpPage/Views/Shared/_Layout.cshtml new file: WS_CK/Areas/HelpPage/Views/Web.config new file: WS_CK/Areas/HelpPage/Views/_ViewStart.cshtml new file: WS_CK/Areas/HelpPage/XmlDocumentationProvider.cs new file: WS_CK/Content/bootstrap-grid.css new file: WS_CK/Content/bootstrap-grid.css.map new file: WS_CK/Content/bootstrap-grid.min.css new file: WS_CK/Content/bootstrap-grid.min.css.map new file: WS_CK/Content/bootstrap-grid.rtl.css new file: WS_CK/Content/bootstrap-grid.rtl.css.map new file: WS_CK/Content/bootstrap-grid.rtl.min.css new file: WS_CK/Content/bootstrap-grid.rtl.min.css.map new file: WS_CK/Content/bootstrap-reboot.css new file: WS_CK/Content/bootstrap-reboot.css.map new file: WS_CK/Content/bootstrap-reboot.min.css new file: WS_CK/Content/bootstrap-reboot.min.css.map new file: WS_CK/Content/bootstrap-reboot.rtl.css new file: WS_CK/Content/bootstrap-reboot.rtl.css.map new file: WS_CK/Content/bootstrap-reboot.rtl.min.css new file: WS_CK/Content/bootstrap-reboot.rtl.min.css.map new file: WS_CK/Content/bootstrap-utilities.css new file: WS_CK/Content/bootstrap-utilities.css.map new file: WS_CK/Content/bootstrap-utilities.min.css new file: WS_CK/Content/bootstrap-utilities.min.css.map new file: WS_CK/Content/bootstrap-utilities.rtl.css new file: WS_CK/Content/bootstrap-utilities.rtl.css.map new file: WS_CK/Content/bootstrap-utilities.rtl.min.css new file: WS_CK/Content/bootstrap-utilities.rtl.min.css.map new file: WS_CK/Content/bootstrap.css new file: WS_CK/Content/bootstrap.css.map new file: WS_CK/Content/bootstrap.min.css new file: WS_CK/Content/bootstrap.min.css.map new file: WS_CK/Content/bootstrap.rtl.css new file: WS_CK/Content/bootstrap.rtl.css.map new file: WS_CK/Content/bootstrap.rtl.min.css new file: WS_CK/Content/bootstrap.rtl.min.css.map new file: WS_CK/Controllers/WSCK_CanjePuntosController.cs new file: WS_CK/Controllers/WSCK_CartolaDetController.cs new file: WS_CK/Controllers/WSCK_CartolaResController.cs new file: WS_CK/Controllers/WSCK_CombAccionesController.cs new file: WS_CK/Controllers/WSCK_CombController.cs new file: WS_CK/Controllers/WSCK_PuntosController.cs new file: WS_CK/Controllers/WSCK_RegClienteHistController.cs new file: WS_CK/Controllers/WSCK_TokenController.cs new file: WS_CK/DLL/LoteriaNET.dll new file: WS_CK/Global.asax new file: WS_CK/Global.asax.cs new file: WS_CK/Models/GeneraErrorResponse.cs new file: WS_CK/Models/WSCK_CanjePuntos/GeneraWSCK_PuntosResponse.cs new file: WS_CK/Models/WSCK_CanjePuntos/WSCK_PuntosRequest.cs new file: WS_CK/Models/WSCK_Cartola/GeneraWSCK_CartolaResponse.cs new file: WS_CK/Models/WSCK_Cartola/WSCK_CartolaRequest.cs new file: WS_CK/Models/WSCK_CartolaDet/GeneraWSCK_CartolaDetResponse.cs new file: WS_CK/Models/WSCK_CartolaDet/WSCK_CartolaDetRequest.cs new file: WS_CK/Models/WSCK_CartolaRes/GeneraWSCK_CartolaResResponse.cs new file: WS_CK/Models/WSCK_CartolaRes/WSCK_CartolaResRequest.cs new file: WS_CK/Models/WSCK_Comb/GeneraWSCK_CombResponse.cs new file: WS_CK/Models/WSCK_Comb/WSCK_CombRequest.cs new file: WS_CK/Models/WSCK_CombAcciones/GeneraWSCK_CombAccionesResponse.cs new file: WS_CK/Models/WSCK_CombAcciones/WSCK_CombAccionesRequest.cs new file: WS_CK/Models/WSCK_Puntos/GeneraWSCK_PuntosResponse.cs new file: WS_CK/Models/WSCK_Puntos/WSCK_PuntosRequest.cs new file: WS_CK/Models/WSCK_RegClienteHist/GeneraWSCK_RegClienteHistResponse.cs new file: WS_CK/Models/WSCK_RegClienteHist/WSCK_PuntosRequest.cs new file: WS_CK/Models/WSCK_Token/GeneraWSCK_TokenResponse.cs new file: WS_CK/Models/WSCK_Token/WSCK_TokenRequest.cs new file: WS_CK/Modules/GeneraWSCK_CanjePuntosClass.cs new file: WS_CK/Modules/GeneraWSCK_CartolaDetClass.cs new file: WS_CK/Modules/GeneraWSCK_CartolaResClass.cs new file: WS_CK/Modules/GeneraWSCK_CombAccionesClass.cs new file: WS_CK/Modules/GeneraWSCK_CombClass.cs new file: WS_CK/Modules/GeneraWSCK_PuntosClass.cs new file: WS_CK/Modules/GeneraWSCK_RegClienteHistClass.cs new file: WS_CK/Modules/GeneraWSCK_TokenClass.cs new file: WS_CK/Properties/AssemblyInfo.cs new file: WS_CK/Properties/PublishProfiles/FolderProfile.pubxml new file: WS_CK/Properties/PublishProfiles/FolderProfile.pubxml.user new file: WS_CK/Properties/Settings.settings new file: WS_CK/Properties/Settings1.Designer.cs new file: WS_CK/Scripts/bootstrap.bundle.js new file: WS_CK/Scripts/bootstrap.bundle.js.map new file: WS_CK/Scripts/bootstrap.bundle.min.js new file: WS_CK/Scripts/bootstrap.bundle.min.js.map new file: WS_CK/Scripts/bootstrap.esm.js new file: WS_CK/Scripts/bootstrap.esm.js.map new file: WS_CK/Scripts/bootstrap.esm.min.js new file: WS_CK/Scripts/bootstrap.esm.min.js.map new file: WS_CK/Scripts/bootstrap.js new file: WS_CK/Scripts/bootstrap.js.map new file: WS_CK/Scripts/bootstrap.min.js new file: WS_CK/Scripts/bootstrap.min.js.map new file: WS_CK/Scripts/jquery-3.7.1.intellisense.js new file: WS_CK/Scripts/jquery-3.7.1.js new file: WS_CK/Scripts/jquery-3.7.1.min.js new file: WS_CK/Scripts/jquery-3.7.1.min.map new file: WS_CK/Scripts/jquery-3.7.1.slim.js new file: WS_CK/Scripts/jquery-3.7.1.slim.min.js new file: WS_CK/Scripts/jquery-3.7.1.slim.min.map new file: WS_CK/Security/TokenGenerator.cs new file: WS_CK/Security/TokenValidationHandler.cs new file: WS_CK/Utils/Utiles.cs new file: WS_CK/WS_CK.csproj new file: WS_CK/WS_CK.csproj.user new file: WS_CK/Web.Debug.config new file: WS_CK/Web.Release.config new file: WS_CK/Web.config new file: WS_CK/bin/Antlr3.Runtime.dll new file: WS_CK/bin/Antlr3.Runtime.pdb new file: WS_CK/bin/LoteriaNET.dll new file: WS_CK/bin/Microsoft.Bcl.AsyncInterfaces.dll new file: WS_CK/bin/Microsoft.Bcl.AsyncInterfaces.xml new file: WS_CK/bin/Microsoft.Bcl.TimeProvider.dll new file: WS_CK/bin/Microsoft.Bcl.TimeProvider.xml new file: WS_CK/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll new file: WS_CK/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.xml new file: WS_CK/bin/Microsoft.IdentityModel.Abstractions.dll new file: WS_CK/bin/Microsoft.IdentityModel.Abstractions.xml new file: WS_CK/bin/Microsoft.IdentityModel.JsonWebTokens.dll new file: WS_CK/bin/Microsoft.IdentityModel.JsonWebTokens.xml new file: WS_CK/bin/Microsoft.IdentityModel.Logging.dll new file: WS_CK/bin/Microsoft.IdentityModel.Logging.xml new file: WS_CK/bin/Microsoft.IdentityModel.Tokens.dll new file: WS_CK/bin/Microsoft.IdentityModel.Tokens.xml new file: WS_CK/bin/Microsoft.Web.Infrastructure.dll new file: WS_CK/bin/Microsoft.Win32.Primitives.dll new file: WS_CK/bin/Newtonsoft.Json.dll new file: WS_CK/bin/Newtonsoft.Json.xml new file: WS_CK/bin/Swashbuckle.Core.dll new file: WS_CK/bin/Sybase.AdoNet4.AseClient.dll new file: WS_CK/bin/System.AppContext.dll new file: WS_CK/bin/System.Buffers.dll new file: WS_CK/bin/System.Buffers.xml new file: WS_CK/bin/System.Collections.Concurrent.dll new file: WS_CK/bin/System.Collections.NonGeneric.dll new file: WS_CK/bin/System.Collections.Specialized.dll new file: WS_CK/bin/System.Collections.dll new file: WS_CK/bin/System.ComponentModel.EventBasedAsync.dll new file: WS_CK/bin/System.ComponentModel.Primitives.dll new file: WS_CK/bin/System.ComponentModel.TypeConverter.dll new file: WS_CK/bin/System.ComponentModel.dll new file: WS_CK/bin/System.Console.dll new file: WS_CK/bin/System.Data.Common.dll new file: WS_CK/bin/System.Diagnostics.Contracts.dll new file: WS_CK/bin/System.Diagnostics.Debug.dll new file: WS_CK/bin/System.Diagnostics.FileVersionInfo.dll new file: WS_CK/bin/System.Diagnostics.Process.dll new file: WS_CK/bin/System.Diagnostics.StackTrace.dll new file: WS_CK/bin/System.Diagnostics.TextWriterTraceListener.dll new file: WS_CK/bin/System.Diagnostics.Tools.dll new file: WS_CK/bin/System.Diagnostics.TraceSource.dll new file: WS_CK/bin/System.Diagnostics.Tracing.dll new file: WS_CK/bin/System.Drawing.Primitives.dll new file: WS_CK/bin/System.Dynamic.Runtime.dll new file: WS_CK/bin/System.Globalization.Calendars.dll new file: WS_CK/bin/System.Globalization.Extensions.dll new file: WS_CK/bin/System.Globalization.dll new file: WS_CK/bin/System.IO.Compression.ZipFile.dll new file: WS_CK/bin/System.IO.Compression.dll new file: WS_CK/bin/System.IO.FileSystem.DriveInfo.dll new file: WS_CK/bin/System.IO.FileSystem.Primitives.dll new file: WS_CK/bin/System.IO.FileSystem.Watcher.dll new file: WS_CK/bin/System.IO.FileSystem.dll new file: WS_CK/bin/System.IO.IsolatedStorage.dll new file: WS_CK/bin/System.IO.MemoryMappedFiles.dll new file: WS_CK/bin/System.IO.Pipes.dll new file: WS_CK/bin/System.IO.UnmanagedMemoryStream.dll new file: WS_CK/bin/System.IO.dll new file: WS_CK/bin/System.IdentityModel.Tokens.Jwt.dll new file: WS_CK/bin/System.IdentityModel.Tokens.Jwt.xml new file: WS_CK/bin/System.Linq.Expressions.dll new file: WS_CK/bin/System.Linq.Parallel.dll new file: WS_CK/bin/System.Linq.Queryable.dll new file: WS_CK/bin/System.Linq.dll new file: WS_CK/bin/System.Memory.dll new file: WS_CK/bin/System.Memory.xml new file: WS_CK/bin/System.Net.Http.Formatting.dll new file: WS_CK/bin/System.Net.Http.Formatting.xml new file: WS_CK/bin/System.Net.Http.dll new file: WS_CK/bin/System.Net.NameResolution.dll new file: WS_CK/bin/System.Net.NetworkInformation.dll new file: WS_CK/bin/System.Net.Ping.dll new file: WS_CK/bin/System.Net.Primitives.dll new file: WS_CK/bin/System.Net.Requests.dll new file: WS_CK/bin/System.Net.Security.dll new file: WS_CK/bin/System.Net.Sockets.dll new file: WS_CK/bin/System.Net.WebHeaderCollection.dll new file: WS_CK/bin/System.Net.WebSockets.Client.dll new file: WS_CK/bin/System.Net.WebSockets.dll new file: WS_CK/bin/System.Numerics.Vectors.dll new file: WS_CK/bin/System.Numerics.Vectors.xml new file: WS_CK/bin/System.ObjectModel.dll new file: WS_CK/bin/System.Reflection.Extensions.dll new file: WS_CK/bin/System.Reflection.Primitives.dll new file: WS_CK/bin/System.Reflection.dll new file: WS_CK/bin/System.Resources.Reader.dll new file: WS_CK/bin/System.Resources.ResourceManager.dll new file: WS_CK/bin/System.Resources.Writer.dll new file: WS_CK/bin/System.Runtime.CompilerServices.Unsafe.dll new file: WS_CK/bin/System.Runtime.CompilerServices.Unsafe.xml new file: WS_CK/bin/System.Runtime.CompilerServices.VisualC.dll new file: WS_CK/bin/System.Runtime.Extensions.dll new file: WS_CK/bin/System.Runtime.Handles.dll new file: WS_CK/bin/System.Runtime.InteropServices.RuntimeInformation.dll new file: WS_CK/bin/System.Runtime.InteropServices.dll new file: WS_CK/bin/System.Runtime.Numerics.dll new file: WS_CK/bin/System.Runtime.Serialization.Formatters.dll new file: WS_CK/bin/System.Runtime.Serialization.Json.dll new file: WS_CK/bin/System.Runtime.Serialization.Primitives.dll new file: WS_CK/bin/System.Runtime.Serialization.Xml.dll new file: WS_CK/bin/System.Runtime.dll new file: WS_CK/bin/System.Security.Claims.dll new file: WS_CK/bin/System.Security.Cryptography.Algorithms.dll new file: WS_CK/bin/System.Security.Cryptography.Cng.dll new file: WS_CK/bin/System.Security.Cryptography.Csp.dll new file: WS_CK/bin/System.Security.Cryptography.Encoding.dll new file: WS_CK/bin/System.Security.Cryptography.Primitives.dll new file: WS_CK/bin/System.Security.Cryptography.X509Certificates.dll new file: WS_CK/bin/System.Security.Principal.dll new file: WS_CK/bin/System.Security.SecureString.dll new file: WS_CK/bin/System.Text.Encoding.Extensions.dll new file: WS_CK/bin/System.Text.Encoding.dll new file: WS_CK/bin/System.Text.Encodings.Web.dll new file: WS_CK/bin/System.Text.Encodings.Web.xml new file: WS_CK/bin/System.Text.Json.dll new file: WS_CK/bin/System.Text.Json.xml new file: WS_CK/bin/System.Text.RegularExpressions.dll new file: WS_CK/bin/System.Threading.Overlapped.dll new file: WS_CK/bin/System.Threading.Tasks.Extensions.dll new file: WS_CK/bin/System.Threading.Tasks.Extensions.xml new file: WS_CK/bin/System.Threading.Tasks.Parallel.dll new file: WS_CK/bin/System.Threading.Tasks.dll new file: WS_CK/bin/System.Threading.Thread.dll new file: WS_CK/bin/System.Threading.ThreadPool.dll new file: WS_CK/bin/System.Threading.Timer.dll new file: WS_CK/bin/System.Threading.dll new file: WS_CK/bin/System.ValueTuple.dll new file: WS_CK/bin/System.ValueTuple.xml new file: WS_CK/bin/System.Web.Helpers.dll new file: WS_CK/bin/System.Web.Helpers.xml new file: WS_CK/bin/System.Web.Http.WebHost.dll new file: WS_CK/bin/System.Web.Http.WebHost.xml new file: WS_CK/bin/System.Web.Http.dll new file: WS_CK/bin/System.Web.Http.xml new file: WS_CK/bin/System.Web.Mvc.dll new file: WS_CK/bin/System.Web.Mvc.xml new file: WS_CK/bin/System.Web.Optimization.dll new file: WS_CK/bin/System.Web.Optimization.xml new file: WS_CK/bin/System.Web.Razor.dll new file: WS_CK/bin/System.Web.Razor.xml new file: WS_CK/bin/System.Web.WebPages.Deployment.dll new file: WS_CK/bin/System.Web.WebPages.Deployment.xml new file: WS_CK/bin/System.Web.WebPages.Razor.dll new file: WS_CK/bin/System.Web.WebPages.Razor.xml new file: WS_CK/bin/System.Web.WebPages.dll new file: WS_CK/bin/System.Web.WebPages.xml new file: WS_CK/bin/System.Xml.ReaderWriter.dll new file: WS_CK/bin/System.Xml.XDocument.dll new file: WS_CK/bin/System.Xml.XPath.XDocument.dll new file: WS_CK/bin/System.Xml.XPath.dll new file: WS_CK/bin/System.Xml.XmlDocument.dll new file: WS_CK/bin/System.Xml.XmlSerializer.dll new file: WS_CK/bin/WS_CK.dll new file: WS_CK/bin/WS_CK.dll.config new file: WS_CK/bin/WS_CK.pdb new file: WS_CK/bin/WebActivatorEx.dll new file: WS_CK/bin/WebGrease.dll new file: WS_CK/bin/ja/Sybase.AdoNet4.AseClient.resources.dll new file: WS_CK/bin/netstandard.dll new file: WS_CK/bin/roslyn/Microsoft.Build.Tasks.CodeAnalysis.dll new file: WS_CK/bin/roslyn/Microsoft.CSharp.Core.targets new file: WS_CK/bin/roslyn/Microsoft.CodeAnalysis.CSharp.Scripting.dll new file: WS_CK/bin/roslyn/Microsoft.CodeAnalysis.CSharp.dll new file: WS_CK/bin/roslyn/Microsoft.CodeAnalysis.Scripting.dll new file: WS_CK/bin/roslyn/Microsoft.CodeAnalysis.VisualBasic.dll new file: WS_CK/bin/roslyn/Microsoft.CodeAnalysis.dll new file: WS_CK/bin/roslyn/Microsoft.DiaSymReader.Native.amd64.dll new file: WS_CK/bin/roslyn/Microsoft.DiaSymReader.Native.x86.dll new file: WS_CK/bin/roslyn/Microsoft.Managed.Core.targets new file: WS_CK/bin/roslyn/Microsoft.VisualBasic.Core.targets new file: WS_CK/bin/roslyn/Microsoft.Win32.Primitives.dll new file: WS_CK/bin/roslyn/System.AppContext.dll new file: WS_CK/bin/roslyn/System.Collections.Immutable.dll new file: WS_CK/bin/roslyn/System.Console.dll new file: WS_CK/bin/roslyn/System.Diagnostics.DiagnosticSource.dll new file: WS_CK/bin/roslyn/System.Diagnostics.FileVersionInfo.dll new file: WS_CK/bin/roslyn/System.Diagnostics.StackTrace.dll new file: WS_CK/bin/roslyn/System.Globalization.Calendars.dll new file: WS_CK/bin/roslyn/System.IO.Compression.ZipFile.dll new file: WS_CK/bin/roslyn/System.IO.Compression.dll new file: WS_CK/bin/roslyn/System.IO.FileSystem.Primitives.dll new file: WS_CK/bin/roslyn/System.IO.FileSystem.dll new file: WS_CK/bin/roslyn/System.Net.Http.dll new file: WS_CK/bin/roslyn/System.Net.Sockets.dll new file: WS_CK/bin/roslyn/System.Reflection.Metadata.dll new file: WS_CK/bin/roslyn/System.Runtime.InteropServices.RuntimeInformation.dll new file: WS_CK/bin/roslyn/System.Security.Cryptography.Algorithms.dll new file: WS_CK/bin/roslyn/System.Security.Cryptography.Encoding.dll new file: WS_CK/bin/roslyn/System.Security.Cryptography.Primitives.dll new file: WS_CK/bin/roslyn/System.Security.Cryptography.X509Certificates.dll new file: WS_CK/bin/roslyn/System.Text.Encoding.CodePages.dll new file: WS_CK/bin/roslyn/System.Threading.Tasks.Extensions.dll new file: WS_CK/bin/roslyn/System.ValueTuple.dll new file: WS_CK/bin/roslyn/System.Xml.ReaderWriter.dll new file: WS_CK/bin/roslyn/System.Xml.XPath.XDocument.dll new file: WS_CK/bin/roslyn/System.Xml.XPath.dll new file: WS_CK/bin/roslyn/System.Xml.XmlDocument.dll new file: WS_CK/bin/roslyn/VBCSCompiler.exe new file: WS_CK/bin/roslyn/VBCSCompiler.exe.config new file: WS_CK/bin/roslyn/csc.exe new file: WS_CK/bin/roslyn/csc.exe.config new file: WS_CK/bin/roslyn/csc.rsp new file: WS_CK/bin/roslyn/csi.exe new file: WS_CK/bin/roslyn/csi.exe.config new file: WS_CK/bin/roslyn/csi.rsp new file: WS_CK/bin/roslyn/vbc.exe new file: WS_CK/bin/roslyn/vbc.exe.config new file: WS_CK/bin/roslyn/vbc.rsp new file: WS_CK/bin/stdole.dll new file: WS_CK/bin/zh-CHS/Sybase.AdoNet4.AseClient.resources.dll new file: WS_CK/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs new file: WS_CK/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file: WS_CK/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file: WS_CK/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file: WS_CK/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file: WS_CK/obj/Debug/WS_CK.csproj.AssemblyReference.cache new file: WS_CK/obj/Debug/WS_CK.csproj.CoreCompileInputs.cache new file: WS_CK/obj/Debug/WS_CK.csproj.FileListAbsolute.txt new file: WS_CK/obj/Debug/WS_CK.csproj.Up2Date new file: WS_CK/obj/Debug/WS_CK.dll new file: WS_CK/obj/Debug/WS_CK.pdb new file: WS_CK/obj/Release/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/HelpPage.css new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/Api.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/Index.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Help/ResourceModel.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Shared/_Layout.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/Web.config new file: WS_CK/obj/Release/Package/PackageTmp/Areas/HelpPage/Views/_ViewStart.cshtml new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.rtl.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.rtl.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.rtl.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-grid.rtl.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.rtl.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.rtl.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.rtl.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-reboot.rtl.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.rtl.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.rtl.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.rtl.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap-utilities.rtl.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.rtl.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.rtl.css.map new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.rtl.min.css new file: WS_CK/obj/Release/Package/PackageTmp/Content/bootstrap.rtl.min.css.map new file: WS_CK/obj/Release/Package/PackageTmp/DLL/LoteriaNET.dll new file: WS_CK/obj/Release/Package/PackageTmp/Global.asax new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.bundle.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.bundle.js.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.bundle.min.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.bundle.min.js.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.esm.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.esm.js.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.esm.min.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.esm.min.js.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.js.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.min.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/bootstrap.min.js.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/jquery-3.7.1.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/jquery-3.7.1.min.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/jquery-3.7.1.min.map new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/jquery-3.7.1.slim.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/jquery-3.7.1.slim.min.js new file: WS_CK/obj/Release/Package/PackageTmp/Scripts/jquery-3.7.1.slim.min.map new file: WS_CK/obj/Release/Package/PackageTmp/Web.config new file: WS_CK/obj/Release/Package/PackageTmp/bin/Antlr3.Runtime.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Antlr3.Runtime.pdb new file: WS_CK/obj/Release/Package/PackageTmp/bin/LoteriaNET.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.Bcl.AsyncInterfaces.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.Bcl.TimeProvider.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.IdentityModel.Abstractions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.IdentityModel.JsonWebTokens.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.IdentityModel.Logging.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.IdentityModel.Tokens.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.Web.Infrastructure.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Microsoft.Win32.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Newtonsoft.Json.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Swashbuckle.Core.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/Sybase.AdoNet4.AseClient.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.AppContext.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Buffers.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Collections.Concurrent.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Collections.NonGeneric.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Collections.Specialized.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Collections.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.ComponentModel.EventBasedAsync.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.ComponentModel.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.ComponentModel.TypeConverter.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.ComponentModel.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Console.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Data.Common.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.Contracts.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.Debug.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.FileVersionInfo.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.Process.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.StackTrace.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.TextWriterTraceListener.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.Tools.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.TraceSource.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Diagnostics.Tracing.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Drawing.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Dynamic.Runtime.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Globalization.Calendars.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Globalization.Extensions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Globalization.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.Compression.ZipFile.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.Compression.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.FileSystem.DriveInfo.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.FileSystem.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.FileSystem.Watcher.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.FileSystem.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.IsolatedStorage.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.MemoryMappedFiles.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.Pipes.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.UnmanagedMemoryStream.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IO.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.IdentityModel.Tokens.Jwt.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Linq.Expressions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Linq.Parallel.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Linq.Queryable.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Linq.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Memory.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Http.Formatting.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Http.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.NameResolution.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.NetworkInformation.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Ping.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Requests.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Security.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.Sockets.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.WebHeaderCollection.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.WebSockets.Client.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Net.WebSockets.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Numerics.Vectors.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.ObjectModel.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Reflection.Extensions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Reflection.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Reflection.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Resources.Reader.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Resources.ResourceManager.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Resources.Writer.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.CompilerServices.Unsafe.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.CompilerServices.VisualC.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Extensions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Handles.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.InteropServices.RuntimeInformation.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.InteropServices.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Numerics.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Serialization.Formatters.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Serialization.Json.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Serialization.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.Serialization.Xml.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Runtime.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Claims.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Cryptography.Algorithms.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Cryptography.Cng.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Cryptography.Csp.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Cryptography.Encoding.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Cryptography.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Cryptography.X509Certificates.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.Principal.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Security.SecureString.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Text.Encoding.Extensions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Text.Encoding.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Text.Encodings.Web.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Text.Json.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Text.RegularExpressions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.Overlapped.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.Tasks.Extensions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.Tasks.Parallel.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.Tasks.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.Thread.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.ThreadPool.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.Timer.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Threading.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.ValueTuple.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.Helpers.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.Http.WebHost.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.Http.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.Mvc.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.Optimization.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.Razor.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.WebPages.Deployment.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.WebPages.Razor.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Web.WebPages.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Xml.ReaderWriter.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Xml.XDocument.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Xml.XPath.XDocument.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Xml.XPath.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Xml.XmlDocument.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/System.Xml.XmlSerializer.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/WS_CK.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/WS_CK.pdb new file: WS_CK/obj/Release/Package/PackageTmp/bin/WebActivatorEx.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/WebGrease.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/ja/Sybase.AdoNet4.AseClient.resources.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/netstandard.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.Build.Tasks.CodeAnalysis.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.CSharp.Core.targets new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.CodeAnalysis.CSharp.Scripting.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.CodeAnalysis.CSharp.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.CodeAnalysis.Scripting.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.CodeAnalysis.VisualBasic.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.CodeAnalysis.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.DiaSymReader.Native.amd64.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.DiaSymReader.Native.x86.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.Managed.Core.targets new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.VisualBasic.Core.targets new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/Microsoft.Win32.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.AppContext.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Collections.Immutable.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Console.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Diagnostics.DiagnosticSource.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Diagnostics.FileVersionInfo.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Diagnostics.StackTrace.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Globalization.Calendars.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.IO.Compression.ZipFile.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.IO.Compression.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.IO.FileSystem.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.IO.FileSystem.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Net.Http.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Net.Sockets.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Reflection.Metadata.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Runtime.InteropServices.RuntimeInformation.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Security.Cryptography.Algorithms.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Security.Cryptography.Encoding.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Security.Cryptography.Primitives.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Security.Cryptography.X509Certificates.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Text.Encoding.CodePages.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Threading.Tasks.Extensions.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.ValueTuple.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Xml.ReaderWriter.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Xml.XPath.XDocument.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Xml.XPath.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/System.Xml.XmlDocument.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/VBCSCompiler.exe new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/VBCSCompiler.exe.config new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/csc.exe new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/csc.exe.config new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/csc.rsp new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/csi.exe new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/csi.exe.config new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/csi.rsp new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/vbc.exe new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/vbc.exe.config new file: WS_CK/obj/Release/Package/PackageTmp/bin/roslyn/vbc.rsp new file: WS_CK/obj/Release/Package/PackageTmp/bin/stdole.dll new file: WS_CK/obj/Release/Package/PackageTmp/bin/zh-CHS/Sybase.AdoNet4.AseClient.resources.dll new file: WS_CK/obj/Release/TransformWebConfig/assist/Web.config new file: WS_CK/obj/Release/TransformWebConfig/original/Web.config new file: WS_CK/obj/Release/TransformWebConfig/transformed/Web.config new file: WS_CK/obj/Release/WS_CK.csproj.AssemblyReference.cache new file: WS_CK/obj/Release/WS_CK.csproj.CoreCompileInputs.cache new file: WS_CK/obj/Release/WS_CK.csproj.FileListAbsolute.txt new file: WS_CK/obj/Release/WS_CK.dll new file: WS_CK/obj/Release/WS_CK.pdb new file: WS_CK/obj/Release/_WPPLastBuildInfo.txt new file: WS_CK/packages.config new file: packages/Antlr.3.5.0.2/.signature.p7s new file: packages/Antlr.3.5.0.2/Antlr.3.5.0.2.nupkg new file: packages/Antlr.3.5.0.2/lib/Antlr3.Runtime.dll new file: packages/Antlr.3.5.0.2/lib/Antlr3.Runtime.pdb new file: packages/Microsoft.AspNet.Mvc.5.2.7/.signature.p7s new file: packages/Microsoft.AspNet.Mvc.5.2.7/Content/Web.config.install.xdt new file: packages/Microsoft.AspNet.Mvc.5.2.7/Content/Web.config.uninstall.xdt new file: packages/Microsoft.AspNet.Mvc.5.2.7/Microsoft.AspNet.Mvc.5.2.7.nupkg new file: packages/Microsoft.AspNet.Mvc.5.2.7/lib/net45/System.Web.Mvc.dll new file: packages/Microsoft.AspNet.Mvc.5.2.7/lib/net45/System.Web.Mvc.xml new file: packages/Microsoft.AspNet.Razor.3.2.7/.signature.p7s new file: packages/Microsoft.AspNet.Razor.3.2.7/Microsoft.AspNet.Razor.3.2.7.nupkg new file: packages/Microsoft.AspNet.Razor.3.2.7/lib/net45/System.Web.Razor.dll new file: packages/Microsoft.AspNet.Razor.3.2.7/lib/net45/System.Web.Razor.xml new file: packages/Microsoft.AspNet.Web.Optimization.1.1.3/.signature.p7s new file: packages/Microsoft.AspNet.Web.Optimization.1.1.3/Microsoft.AspNet.Web.Optimization.1.1.3.nupkg new file: packages/Microsoft.AspNet.Web.Optimization.1.1.3/lib/net40/System.Web.Optimization.dll new file: packages/Microsoft.AspNet.Web.Optimization.1.1.3/lib/net40/system.web.optimization.xml new file: packages/Microsoft.AspNet.WebApi.5.2.7/.signature.p7s new file: packages/Microsoft.AspNet.WebApi.5.2.7/Microsoft.AspNet.WebApi.5.2.7.nupkg new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/.signature.p7s new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/Microsoft.AspNet.WebApi.Client.5.2.7.nupkg new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/lib/net45/System.Net.Http.Formatting.dll new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/lib/net45/System.Net.Http.Formatting.xml new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/lib/netstandard2.0/System.Net.Http.Formatting.dll new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/lib/netstandard2.0/System.Net.Http.Formatting.xml new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/lib/portable-wp8%2Bnetcore45%2Bnet45%2Bwp81%2Bwpa81/System.Net.Http.Formatting.dll new file: packages/Microsoft.AspNet.WebApi.Client.5.2.7/lib/portable-wp8%2Bnetcore45%2Bnet45%2Bwp81%2Bwpa81/System.Net.Http.Formatting.xml new file: packages/Microsoft.AspNet.WebApi.Core.5.2.7/.signature.p7s new file: packages/Microsoft.AspNet.WebApi.Core.5.2.7/Content/web.config.transform new file: packages/Microsoft.AspNet.WebApi.Core.5.2.7/Microsoft.AspNet.WebApi.Core.5.2.7.nupkg new file: packages/Microsoft.AspNet.WebApi.Core.5.2.7/lib/net45/System.Web.Http.dll new file: packages/Microsoft.AspNet.WebApi.Core.5.2.7/lib/net45/System.Web.Http.xml new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/.signature.p7s new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ApiDescriptionExtensions.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/App_Start/HelpPageConfig.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Controllers/HelpController.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/HelpPage.css.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/HelpPageAreaRegistration.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/HelpPageConfigurationExtensions.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Models/HelpPageApiModel.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/ImageSample.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/InvalidSample.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/SampleDirection.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/SampleGeneration/TextSample.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/Api.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/Index.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/ResourceModel.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Shared/_Layout.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Web.config new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/_ViewStart.cshtml.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/XmlDocumentationProvider.cs.pp new file: packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Microsoft.AspNet.WebApi.HelpPage.5.2.7.nupkg new file: packages/Microsoft.AspNet.WebApi.WebHost.5.2.7/.signature.p7s new file: packages/Microsoft.AspNet.WebApi.WebHost.5.2.7/Microsoft.AspNet.WebApi.WebHost.5.2.7.nupkg new file: packages/Microsoft.AspNet.WebApi.WebHost.5.2.7/lib/net45/System.Web.Http.WebHost.dll new file: packages/Microsoft.AspNet.WebApi.WebHost.5.2.7/lib/net45/System.Web.Http.WebHost.xml new file: packages/Microsoft.AspNet.WebPages.3.2.7/.signature.p7s new file: packages/Microsoft.AspNet.WebPages.3.2.7/Content/Web.config.install.xdt new file: packages/Microsoft.AspNet.WebPages.3.2.7/Content/Web.config.uninstall.xdt new file: packages/Microsoft.AspNet.WebPages.3.2.7/Microsoft.AspNet.WebPages.3.2.7.nupkg new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.Helpers.dll new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.Helpers.xml new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.WebPages.Deployment.dll new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.WebPages.Deployment.xml new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.WebPages.Razor.dll new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.WebPages.Razor.xml new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.WebPages.dll new file: packages/Microsoft.AspNet.WebPages.3.2.7/lib/net45/System.Web.WebPages.xml new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/.signature.p7s new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/Icon.png new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/LICENSE.TXT new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/Microsoft.Bcl.AsyncInterfaces.8.0.0.nupkg new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/PACKAGE.md new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/THIRD-PARTY-NOTICES.TXT new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/buildTransitive/net461/Microsoft.Bcl.AsyncInterfaces.targets new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/buildTransitive/net462/_._ new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/lib/net462/Microsoft.Bcl.AsyncInterfaces.dll new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/lib/net462/Microsoft.Bcl.AsyncInterfaces.xml new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.xml new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.xml new file: packages/Microsoft.Bcl.AsyncInterfaces.8.0.0/useSharedDesignerContext.txt new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/.signature.p7s new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/Icon.png new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/LICENSE.TXT new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/Microsoft.Bcl.TimeProvider.8.0.1.nupkg new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/PACKAGE.md new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/THIRD-PARTY-NOTICES.TXT new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/buildTransitive/net461/Microsoft.Bcl.TimeProvider.targets new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/buildTransitive/net462/_._ new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/buildTransitive/net6.0/_._ new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/buildTransitive/netcoreapp2.0/Microsoft.Bcl.TimeProvider.targets new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/lib/net462/Microsoft.Bcl.TimeProvider.dll new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/lib/net462/Microsoft.Bcl.TimeProvider.xml new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/lib/net8.0/Microsoft.Bcl.TimeProvider.dll new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/lib/net8.0/Microsoft.Bcl.TimeProvider.xml new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/lib/netstandard2.0/Microsoft.Bcl.TimeProvider.dll new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/lib/netstandard2.0/Microsoft.Bcl.TimeProvider.xml new file: packages/Microsoft.Bcl.TimeProvider.8.0.1/useSharedDesignerContext.txt new file: packages/Microsoft.CSharp.4.5.0/.signature.p7s new file: packages/Microsoft.CSharp.4.5.0/LICENSE.TXT new file: packages/Microsoft.CSharp.4.5.0/Microsoft.CSharp.4.5.0.nupkg new file: packages/Microsoft.CSharp.4.5.0/THIRD-PARTY-NOTICES.TXT new file: packages/Microsoft.CSharp.4.5.0/lib/MonoAndroid10/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/MonoTouch10/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/net45/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/netcore50/Microsoft.CSharp.dll new file: packages/Microsoft.CSharp.4.5.0/lib/netcoreapp2.0/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/netstandard1.3/Microsoft.CSharp.dll new file: packages/Microsoft.CSharp.4.5.0/lib/netstandard2.0/Microsoft.CSharp.dll new file: packages/Microsoft.CSharp.4.5.0/lib/portable-net45+win8+wp8+wpa81/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/uap10.0.16299/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/win8/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/wp80/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/wpa81/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/xamarinios10/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/xamarinmac20/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/xamarintvos10/_._ new file: packages/Microsoft.CSharp.4.5.0/lib/xamarinwatchos10/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/MonoAndroid10/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/MonoTouch10/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/net45/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/Microsoft.CSharp.dll new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/de/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/es/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/fr/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/it/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/ja/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/ko/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/ru/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/zh-hans/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcore50/zh-hant/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netcoreapp2.0/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/Microsoft.CSharp.dll new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/de/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/es/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/fr/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/it/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/ja/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/ko/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/ru/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard2.0/Microsoft.CSharp.dll new file: packages/Microsoft.CSharp.4.5.0/ref/netstandard2.0/Microsoft.CSharp.xml new file: packages/Microsoft.CSharp.4.5.0/ref/portable-net45+win8+wp8+wpa81/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/uap10.0.16299/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/win8/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/wp80/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/wpa81/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/xamarinios10/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/xamarinmac20/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/xamarintvos10/_._ new file: packages/Microsoft.CSharp.4.5.0/ref/xamarinwatchos10/_._ new file: packages/Microsoft.CSharp.4.5.0/useSharedDesignerContext.txt new file: packages/Microsoft.CSharp.4.5.0/version.txt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/.signature.p7s new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1.nupkg new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Extensions.props new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/net46/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Extensions.props new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/net46/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net45/app.config.install.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net45/app.config.uninstall.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net45/web.config.install.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net45/web.config.uninstall.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net46/app.config.install.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net46/app.config.uninstall.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net46/web.config.install.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/content/net46/web.config.uninstall.xdt new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/lib/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/lib/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.xml new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.Build.Tasks.CodeAnalysis.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.CSharp.Core.targets new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.CodeAnalysis.CSharp.Scripting.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.CodeAnalysis.CSharp.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.CodeAnalysis.Scripting.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.CodeAnalysis.VisualBasic.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.CodeAnalysis.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.DiaSymReader.Native.amd64.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.DiaSymReader.Native.x86.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/Microsoft.VisualBasic.Core.targets new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/System.AppContext.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/System.Collections.Immutable.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/System.Diagnostics.StackTrace.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/System.IO.FileSystem.Primitives.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/System.IO.FileSystem.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/System.Reflection.Metadata.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/VBCSCompiler.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/VBCSCompiler.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/csc.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/csc.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/csc.rsp new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/csi.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/csi.rsp new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/vbc.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/vbc.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/Roslyn45/vbc.rsp new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.Build.Tasks.CodeAnalysis.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.CSharp.Core.targets new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.CodeAnalysis.CSharp.Scripting.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.CodeAnalysis.CSharp.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.CodeAnalysis.Scripting.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.CodeAnalysis.VisualBasic.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.CodeAnalysis.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.DiaSymReader.Native.amd64.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.DiaSymReader.Native.x86.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.Managed.Core.targets new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.VisualBasic.Core.targets new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/Microsoft.Win32.Primitives.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.AppContext.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Collections.Immutable.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Console.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Diagnostics.DiagnosticSource.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Diagnostics.FileVersionInfo.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Diagnostics.StackTrace.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Globalization.Calendars.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.IO.Compression.ZipFile.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.IO.Compression.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.IO.FileSystem.Primitives.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.IO.FileSystem.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Net.Http.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Net.Sockets.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Reflection.Metadata.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Runtime.InteropServices.RuntimeInformation.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Security.Cryptography.Algorithms.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Security.Cryptography.Encoding.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Security.Cryptography.Primitives.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Security.Cryptography.X509Certificates.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Text.Encoding.CodePages.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Threading.Tasks.Extensions.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.ValueTuple.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Xml.ReaderWriter.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Xml.XPath.XDocument.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Xml.XPath.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/System.Xml.XmlDocument.dll new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/VBCSCompiler.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/VBCSCompiler.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/csc.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/csc.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/csc.rsp new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/csi.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/csi.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/csi.rsp new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/vbc.exe new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/vbc.exe.config new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/RoslynLatest/vbc.rsp new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/net45/install.ps1 new file: packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/tools/net45/uninstall.ps1 new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/.signature.p7s new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/Microsoft.IdentityModel.Abstractions.8.3.0.nupkg new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/README.md new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net462/Microsoft.IdentityModel.Abstractions.dll new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net462/Microsoft.IdentityModel.Abstractions.xml new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net472/Microsoft.IdentityModel.Abstractions.dll new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net472/Microsoft.IdentityModel.Abstractions.xml new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net6.0/Microsoft.IdentityModel.Abstractions.dll new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net6.0/Microsoft.IdentityModel.Abstractions.xml new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net8.0/Microsoft.IdentityModel.Abstractions.dll new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net8.0/Microsoft.IdentityModel.Abstractions.xml new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net9.0/Microsoft.IdentityModel.Abstractions.dll new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/net9.0/Microsoft.IdentityModel.Abstractions.xml new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.dll new file: packages/Microsoft.IdentityModel.Abstractions.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.xml new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/.signature.p7s new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/Microsoft.IdentityModel.JsonWebTokens.8.3.0.nupkg new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/README.md new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net462/Microsoft.IdentityModel.JsonWebTokens.dll new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net462/Microsoft.IdentityModel.JsonWebTokens.xml new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net472/Microsoft.IdentityModel.JsonWebTokens.dll new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net472/Microsoft.IdentityModel.JsonWebTokens.xml new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.xml new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.xml new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.xml new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.dll new file: packages/Microsoft.IdentityModel.JsonWebTokens.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.xml new file: packages/Microsoft.IdentityModel.Logging.8.3.0/.signature.p7s new file: packages/Microsoft.IdentityModel.Logging.8.3.0/Microsoft.IdentityModel.Logging.8.3.0.nupkg new file: packages/Microsoft.IdentityModel.Logging.8.3.0/README.md new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net462/Microsoft.IdentityModel.Logging.dll new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net462/Microsoft.IdentityModel.Logging.xml new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net472/Microsoft.IdentityModel.Logging.dll new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net472/Microsoft.IdentityModel.Logging.xml new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net6.0/Microsoft.IdentityModel.Logging.dll new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net6.0/Microsoft.IdentityModel.Logging.xml new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net8.0/Microsoft.IdentityModel.Logging.dll new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net8.0/Microsoft.IdentityModel.Logging.xml new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net9.0/Microsoft.IdentityModel.Logging.dll new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/net9.0/Microsoft.IdentityModel.Logging.xml new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.Logging.dll new file: packages/Microsoft.IdentityModel.Logging.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.Logging.xml new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/.signature.p7s new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/Microsoft.IdentityModel.Tokens.8.3.0.nupkg new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/README.md new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net462/Microsoft.IdentityModel.Tokens.dll new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net462/Microsoft.IdentityModel.Tokens.xml new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net472/Microsoft.IdentityModel.Tokens.dll new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net472/Microsoft.IdentityModel.Tokens.xml new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net6.0/Microsoft.IdentityModel.Tokens.dll new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net6.0/Microsoft.IdentityModel.Tokens.xml new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net8.0/Microsoft.IdentityModel.Tokens.dll new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net8.0/Microsoft.IdentityModel.Tokens.xml new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net9.0/Microsoft.IdentityModel.Tokens.dll new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/net9.0/Microsoft.IdentityModel.Tokens.xml new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.Tokens.dll new file: packages/Microsoft.IdentityModel.Tokens.8.3.0/lib/netstandard2.0/Microsoft.IdentityModel.Tokens.xml new file: packages/Microsoft.Web.Infrastructure.1.0.0.0/.signature.p7s new file: packages/Microsoft.Web.Infrastructure.1.0.0.0/Microsoft.Web.Infrastructure.1.0.0.0.nupkg new file: packages/Microsoft.Web.Infrastructure.1.0.0.0/lib/net40/Microsoft.Web.Infrastructure.dll new file: packages/Modernizr.2.8.3/.signature.p7s new file: packages/Modernizr.2.8.3/Content/Scripts/modernizr-2.8.3.js new file: packages/Modernizr.2.8.3/Modernizr.2.8.3.nupkg new file: packages/Modernizr.2.8.3/Tools/common.ps1 new file: packages/Modernizr.2.8.3/Tools/install.ps1 new file: packages/Modernizr.2.8.3/Tools/uninstall.ps1 new file: packages/Newtonsoft.Json.13.0.3/.signature.p7s new file: packages/Newtonsoft.Json.13.0.3/LICENSE.md new file: packages/Newtonsoft.Json.13.0.3/Newtonsoft.Json.13.0.3.nupkg new file: packages/Newtonsoft.Json.13.0.3/README.md new file: packages/Newtonsoft.Json.13.0.3/lib/net20/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/net20/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/net35/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/net35/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/net40/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/net40/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/net6.0/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/net6.0/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/netstandard1.0/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/netstandard1.0/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/netstandard1.3/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/netstandard1.3/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/lib/netstandard2.0/Newtonsoft.Json.dll new file: packages/Newtonsoft.Json.13.0.3/lib/netstandard2.0/Newtonsoft.Json.xml new file: packages/Newtonsoft.Json.13.0.3/packageIcon.png new file: packages/Swashbuckle.5.6.0/.signature.p7s new file: packages/Swashbuckle.5.6.0/Content/App_Start/SwaggerConfig.cs.pp new file: packages/Swashbuckle.5.6.0/Swashbuckle.5.6.0.nupkg new file: packages/Swashbuckle.Core.5.6.0/.signature.p7s new file: packages/Swashbuckle.Core.5.6.0/Swashbuckle.Core.5.6.0.nupkg new file: packages/Swashbuckle.Core.5.6.0/lib/net40/Swashbuckle.Core.dll new file: packages/System.Buffers.4.5.1/.signature.p7s new file: packages/System.Buffers.4.5.1/LICENSE.TXT new file: packages/System.Buffers.4.5.1/System.Buffers.4.5.1.nupkg new file: packages/System.Buffers.4.5.1/THIRD-PARTY-NOTICES.TXT new file: packages/System.Buffers.4.5.1/lib/net461/System.Buffers.dll new file: packages/System.Buffers.4.5.1/lib/net461/System.Buffers.xml new file: packages/System.Buffers.4.5.1/lib/netcoreapp2.0/_._ new file: packages/System.Buffers.4.5.1/lib/netstandard1.1/System.Buffers.dll new file: packages/System.Buffers.4.5.1/lib/netstandard1.1/System.Buffers.xml new file: packages/System.Buffers.4.5.1/lib/netstandard2.0/System.Buffers.dll new file: packages/System.Buffers.4.5.1/lib/netstandard2.0/System.Buffers.xml new file: packages/System.Buffers.4.5.1/lib/uap10.0.16299/_._ new file: packages/System.Buffers.4.5.1/ref/net45/System.Buffers.dll new file: packages/System.Buffers.4.5.1/ref/net45/System.Buffers.xml new file: packages/System.Buffers.4.5.1/ref/netcoreapp2.0/_._ new file: packages/System.Buffers.4.5.1/ref/netstandard1.1/System.Buffers.dll new file: packages/System.Buffers.4.5.1/ref/netstandard1.1/System.Buffers.xml new file: packages/System.Buffers.4.5.1/ref/netstandard2.0/System.Buffers.dll new file: packages/System.Buffers.4.5.1/ref/netstandard2.0/System.Buffers.xml new file: packages/System.Buffers.4.5.1/ref/uap10.0.16299/_._ new file: packages/System.Buffers.4.5.1/useSharedDesignerContext.txt new file: packages/System.Buffers.4.5.1/version.txt new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/.signature.p7s new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/README.md new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/System.IdentityModel.Tokens.Jwt.8.3.0.nupkg new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net462/System.IdentityModel.Tokens.Jwt.dll new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net462/System.IdentityModel.Tokens.Jwt.xml new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net472/System.IdentityModel.Tokens.Jwt.dll new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net472/System.IdentityModel.Tokens.Jwt.xml new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net6.0/System.IdentityModel.Tokens.Jwt.dll new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net6.0/System.IdentityModel.Tokens.Jwt.xml new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net8.0/System.IdentityModel.Tokens.Jwt.dll new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net8.0/System.IdentityModel.Tokens.Jwt.xml new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net9.0/System.IdentityModel.Tokens.Jwt.dll new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/net9.0/System.IdentityModel.Tokens.Jwt.xml new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.dll new file: packages/System.IdentityModel.Tokens.Jwt.8.3.0/lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.xml new file: packages/System.Memory.4.5.5/.signature.p7s new file: packages/System.Memory.4.5.5/LICENSE.TXT new file: packages/System.Memory.4.5.5/System.Memory.4.5.5.nupkg new file: packages/System.Memory.4.5.5/THIRD-PARTY-NOTICES.TXT new file: packages/System.Memory.4.5.5/lib/net461/System.Memory.dll new file: packages/System.Memory.4.5.5/lib/net461/System.Memory.xml new file: packages/System.Memory.4.5.5/lib/netcoreapp2.1/_._ new file: packages/System.Memory.4.5.5/lib/netstandard1.1/System.Memory.dll new file: packages/System.Memory.4.5.5/lib/netstandard1.1/System.Memory.xml new file: packages/System.Memory.4.5.5/lib/netstandard2.0/System.Memory.dll new file: packages/System.Memory.4.5.5/lib/netstandard2.0/System.Memory.xml new file: packages/System.Memory.4.5.5/ref/netcoreapp2.1/_._ new file: packages/System.Memory.4.5.5/useSharedDesignerContext.txt new file: packages/System.Memory.4.5.5/version.txt new file: packages/System.Numerics.Vectors.4.5.0/.signature.p7s new file: packages/System.Numerics.Vectors.4.5.0/LICENSE.TXT new file: packages/System.Numerics.Vectors.4.5.0/System.Numerics.Vectors.4.5.0.nupkg new file: packages/System.Numerics.Vectors.4.5.0/THIRD-PARTY-NOTICES.TXT new file: packages/System.Numerics.Vectors.4.5.0/lib/MonoAndroid10/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/MonoTouch10/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/net46/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/lib/net46/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/lib/netcoreapp2.0/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/netstandard1.0/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/lib/netstandard1.0/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/lib/netstandard2.0/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/lib/netstandard2.0/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/lib/uap10.0.16299/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/xamarinios10/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/xamarinmac20/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/xamarintvos10/_._ new file: packages/System.Numerics.Vectors.4.5.0/lib/xamarinwatchos10/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/MonoAndroid10/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/MonoTouch10/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/net45/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/ref/net45/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/ref/net46/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/ref/net46/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/ref/netcoreapp2.0/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/netstandard1.0/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/ref/netstandard1.0/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/ref/netstandard2.0/System.Numerics.Vectors.dll new file: packages/System.Numerics.Vectors.4.5.0/ref/netstandard2.0/System.Numerics.Vectors.xml new file: packages/System.Numerics.Vectors.4.5.0/ref/uap10.0.16299/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/xamarinios10/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/xamarinmac20/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/xamarintvos10/_._ new file: packages/System.Numerics.Vectors.4.5.0/ref/xamarinwatchos10/_._ new file: packages/System.Numerics.Vectors.4.5.0/useSharedDesignerContext.txt new file: packages/System.Numerics.Vectors.4.5.0/version.txt new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/.signature.p7s new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/LICENSE.TXT new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.6.0.0.nupkg new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1/_._ new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/net461/System.Runtime.CompilerServices.Unsafe.dll new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/net461/System.Runtime.CompilerServices.Unsafe.xml new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml new file: packages/System.Runtime.CompilerServices.Unsafe.6.0.0/useSharedDesignerContext.txt new file: packages/System.Security.Cryptography.Cng.4.5.0/.signature.p7s new file: packages/System.Security.Cryptography.Cng.4.5.0/LICENSE.TXT new file: packages/System.Security.Cryptography.Cng.4.5.0/System.Security.Cryptography.Cng.4.5.0.nupkg new file: packages/System.Security.Cryptography.Cng.4.5.0/THIRD-PARTY-NOTICES.TXT new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/MonoAndroid10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/MonoTouch10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/net46/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/net461/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/net462/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/net47/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/netstandard1.3/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/netstandard1.4/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/netstandard1.6/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/netstandard2.0/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/uap10.0.16299/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/xamarinios10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/xamarinmac20/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/xamarintvos10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/lib/xamarinwatchos10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/MonoAndroid10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/MonoTouch10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net46/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net461/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net461/System.Security.Cryptography.Cng.xml new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net462/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net462/System.Security.Cryptography.Cng.xml new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net47/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/net47/System.Security.Cryptography.Cng.xml new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netcoreapp2.0/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netcoreapp2.0/System.Security.Cryptography.Cng.xml new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netcoreapp2.1/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netcoreapp2.1/System.Security.Cryptography.Cng.xml new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netstandard1.3/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netstandard1.4/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netstandard1.6/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netstandard2.0/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/netstandard2.0/System.Security.Cryptography.Cng.xml new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/uap10.0.16299/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/xamarinios10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/xamarinmac20/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/xamarintvos10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/ref/xamarinwatchos10/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/net462/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/net47/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/netcoreapp2.0/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/netcoreapp2.1/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll new file: packages/System.Security.Cryptography.Cng.4.5.0/runtimes/win/lib/uap10.0.16299/_._ new file: packages/System.Security.Cryptography.Cng.4.5.0/useSharedDesignerContext.txt new file: packages/System.Security.Cryptography.Cng.4.5.0/version.txt new file: packages/System.Text.Encodings.Web.8.0.0/.signature.p7s new file: packages/System.Text.Encodings.Web.8.0.0/Icon.png new file: packages/System.Text.Encodings.Web.8.0.0/LICENSE.TXT new file: packages/System.Text.Encodings.Web.8.0.0/System.Text.Encodings.Web.8.0.0.nupkg new file: packages/System.Text.Encodings.Web.8.0.0/THIRD-PARTY-NOTICES.TXT new file: packages/System.Text.Encodings.Web.8.0.0/buildTransitive/net461/System.Text.Encodings.Web.targets new file: packages/System.Text.Encodings.Web.8.0.0/buildTransitive/net462/_._ new file: packages/System.Text.Encodings.Web.8.0.0/buildTransitive/net6.0/_._ new file: packages/System.Text.Encodings.Web.8.0.0/buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets new file: packages/System.Text.Encodings.Web.8.0.0/lib/net462/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/lib/net462/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/lib/net6.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/lib/net6.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/lib/net7.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/lib/net7.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/lib/net8.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/lib/net8.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/lib/netstandard2.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/lib/netstandard2.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll new file: packages/System.Text.Encodings.Web.8.0.0/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.xml new file: packages/System.Text.Encodings.Web.8.0.0/useSharedDesignerContext.txt new file: packages/System.Text.Json.8.0.5/.signature.p7s new file: packages/System.Text.Json.8.0.5/Icon.png new file: packages/System.Text.Json.8.0.5/LICENSE.TXT new file: packages/System.Text.Json.8.0.5/PACKAGE.md new file: packages/System.Text.Json.8.0.5/System.Text.Json.8.0.5.nupkg new file: packages/System.Text.Json.8.0.5/THIRD-PARTY-NOTICES.TXT new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll new file: packages/System.Text.Json.8.0.5/buildTransitive/net461/System.Text.Json.targets new file: packages/System.Text.Json.8.0.5/buildTransitive/net462/System.Text.Json.targets new file: packages/System.Text.Json.8.0.5/buildTransitive/net6.0/System.Text.Json.targets new file: packages/System.Text.Json.8.0.5/buildTransitive/netcoreapp2.0/System.Text.Json.targets new file: packages/System.Text.Json.8.0.5/buildTransitive/netstandard2.0/System.Text.Json.targets new file: packages/System.Text.Json.8.0.5/lib/net462/System.Text.Json.dll new file: packages/System.Text.Json.8.0.5/lib/net462/System.Text.Json.xml new file: packages/System.Text.Json.8.0.5/lib/net6.0/System.Text.Json.dll new file: packages/System.Text.Json.8.0.5/lib/net6.0/System.Text.Json.xml new file: packages/System.Text.Json.8.0.5/lib/net7.0/System.Text.Json.dll new file: packages/System.Text.Json.8.0.5/lib/net7.0/System.Text.Json.xml new file: packages/System.Text.Json.8.0.5/lib/net8.0/System.Text.Json.dll new file: packages/System.Text.Json.8.0.5/lib/net8.0/System.Text.Json.xml new file: packages/System.Text.Json.8.0.5/lib/netstandard2.0/System.Text.Json.dll new file: packages/System.Text.Json.8.0.5/lib/netstandard2.0/System.Text.Json.xml new file: packages/System.Text.Json.8.0.5/useSharedDesignerContext.txt new file: packages/System.Threading.Tasks.Extensions.4.5.4/.signature.p7s new file: packages/System.Threading.Tasks.Extensions.4.5.4/LICENSE.TXT new file: packages/System.Threading.Tasks.Extensions.4.5.4/System.Threading.Tasks.Extensions.4.5.4.nupkg new file: packages/System.Threading.Tasks.Extensions.4.5.4/THIRD-PARTY-NOTICES.TXT new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/MonoAndroid10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/MonoTouch10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/net461/System.Threading.Tasks.Extensions.dll new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/net461/System.Threading.Tasks.Extensions.xml new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/netcoreapp2.1/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/netstandard1.0/System.Threading.Tasks.Extensions.dll new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/netstandard1.0/System.Threading.Tasks.Extensions.xml new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/netstandard2.0/System.Threading.Tasks.Extensions.dll new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/netstandard2.0/System.Threading.Tasks.Extensions.xml new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/xamarinios10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/xamarinmac20/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/xamarintvos10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/lib/xamarinwatchos10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/MonoAndroid10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/MonoTouch10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/netcoreapp2.1/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/xamarinios10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/xamarinmac20/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/xamarintvos10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/ref/xamarinwatchos10/_._ new file: packages/System.Threading.Tasks.Extensions.4.5.4/useSharedDesignerContext.txt new file: packages/System.Threading.Tasks.Extensions.4.5.4/version.txt new file: packages/System.ValueTuple.4.5.0/.signature.p7s new file: packages/System.ValueTuple.4.5.0/LICENSE.TXT new file: packages/System.ValueTuple.4.5.0/System.ValueTuple.4.5.0.nupkg new file: packages/System.ValueTuple.4.5.0/THIRD-PARTY-NOTICES.TXT new file: packages/System.ValueTuple.4.5.0/lib/MonoAndroid10/_._ new file: packages/System.ValueTuple.4.5.0/lib/MonoTouch10/_._ new file: packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.xml new file: packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.xml new file: packages/System.ValueTuple.4.5.0/lib/netcoreapp2.0/_._ new file: packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.xml new file: packages/System.ValueTuple.4.5.0/lib/netstandard2.0/_._ new file: packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml new file: packages/System.ValueTuple.4.5.0/lib/uap10.0.16299/_._ new file: packages/System.ValueTuple.4.5.0/lib/xamarinios10/_._ new file: packages/System.ValueTuple.4.5.0/lib/xamarinmac20/_._ new file: packages/System.ValueTuple.4.5.0/lib/xamarintvos10/_._ new file: packages/System.ValueTuple.4.5.0/lib/xamarinwatchos10/_._ new file: packages/System.ValueTuple.4.5.0/ref/MonoAndroid10/_._ new file: packages/System.ValueTuple.4.5.0/ref/MonoTouch10/_._ new file: packages/System.ValueTuple.4.5.0/ref/net461/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/ref/net47/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/ref/netcoreapp2.0/_._ new file: packages/System.ValueTuple.4.5.0/ref/netstandard2.0/_._ new file: packages/System.ValueTuple.4.5.0/ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll new file: packages/System.ValueTuple.4.5.0/ref/uap10.0.16299/_._ new file: packages/System.ValueTuple.4.5.0/ref/xamarinios10/_._ new file: packages/System.ValueTuple.4.5.0/ref/xamarinmac20/_._ new file: packages/System.ValueTuple.4.5.0/ref/xamarintvos10/_._ new file: packages/System.ValueTuple.4.5.0/ref/xamarinwatchos10/_._ new file: packages/System.ValueTuple.4.5.0/useSharedDesignerContext.txt new file: packages/System.ValueTuple.4.5.0/version.txt new file: packages/WebActivatorEx.2.2.0/.signature.p7s new file: packages/WebActivatorEx.2.2.0/WebActivatorEx.2.2.0.nupkg new file: packages/WebActivatorEx.2.2.0/lib/net40/WebActivatorEx.dll new file: packages/WebGrease.1.6.0/.signature.p7s new file: packages/WebGrease.1.6.0/WebGrease.1.6.0.nupkg new file: packages/WebGrease.1.6.0/lib/WebGrease.dll new file: packages/WebGrease.1.6.0/tools/WG.EXE new file: packages/bootstrap.5.3.3/.signature.p7s new file: packages/bootstrap.5.3.3/bootstrap.5.3.3.nupkg new file: packages/bootstrap.5.3.3/bootstrap.png new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.rtl.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.rtl.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.rtl.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-grid.rtl.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.rtl.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.rtl.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.rtl.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-reboot.rtl.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.rtl.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.rtl.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.rtl.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap-utilities.rtl.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap.min.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap.rtl.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap.rtl.css.map new file: packages/bootstrap.5.3.3/content/Content/bootstrap.rtl.min.css new file: packages/bootstrap.5.3.3/content/Content/bootstrap.rtl.min.css.map new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.bundle.js new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.bundle.js.map new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.bundle.min.js new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.bundle.min.js.map new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.esm.js new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.esm.js.map new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.esm.min.js new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.esm.min.js.map new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.js new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.js.map new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.min.js new file: packages/bootstrap.5.3.3/content/Scripts/bootstrap.min.js.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.rtl.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.rtl.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.rtl.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-grid.rtl.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.rtl.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.rtl.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.rtl.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-reboot.rtl.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.rtl.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.rtl.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.rtl.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap-utilities.rtl.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.rtl.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.rtl.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.rtl.min.css new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/css/bootstrap.rtl.min.css.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.bundle.js new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.bundle.js.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.bundle.min.js new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.bundle.min.js.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.esm.js new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.esm.js.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.esm.min.js new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.esm.min.js.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.js new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.js.map new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.min.js new file: packages/bootstrap.5.3.3/contentFiles/any/any/wwwroot/js/bootstrap.min.js.map new file: packages/jQuery.3.7.1/.signature.p7s new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1-vsdoc.js new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1.js new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1.min.js new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1.min.map new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1.slim.js new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1.slim.min.js new file: packages/jQuery.3.7.1/Content/Scripts/jquery-3.7.1.slim.min.map new file: packages/jQuery.3.7.1/Tools/common.ps1 new file: packages/jQuery.3.7.1/Tools/install.ps1 new file: packages/jQuery.3.7.1/Tools/jquery-3.7.1.intellisense.js new file: packages/jQuery.3.7.1/Tools/uninstall.ps1 new file: packages/jQuery.3.7.1/jQuery.3.7.1.nupkg
This commit is contained in:
BIN
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/.signature.p7s
vendored
Normal file
BIN
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/.signature.p7s
vendored
Normal file
Binary file not shown.
@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.Http.Description;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
public static class ApiDescriptionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Generates an URI-friendly ID for the <see cref="ApiDescription"/>. E.g. "Get-Values-id_name" instead of "GetValues/{id}?name={name}"
|
||||
/// </summary>
|
||||
/// <param name="description">The <see cref="ApiDescription"/>.</param>
|
||||
/// <returns>The ID as a string.</returns>
|
||||
public static string GetFriendlyId(this ApiDescription description)
|
||||
{
|
||||
string path = description.RelativePath;
|
||||
string[] urlParts = path.Split('?');
|
||||
string localPath = urlParts[0];
|
||||
string queryKeyString = null;
|
||||
if (urlParts.Length > 1)
|
||||
{
|
||||
string query = urlParts[1];
|
||||
string[] queryKeys = HttpUtility.ParseQueryString(query).AllKeys;
|
||||
queryKeyString = String.Join("_", queryKeys);
|
||||
}
|
||||
|
||||
StringBuilder friendlyPath = new StringBuilder();
|
||||
friendlyPath.AppendFormat("{0}-{1}",
|
||||
description.HttpMethod.Method,
|
||||
localPath.Replace("/", "-").Replace("{", String.Empty).Replace("}", String.Empty));
|
||||
if (queryKeyString != null)
|
||||
{
|
||||
friendlyPath.AppendFormat("_{0}", queryKeyString.Replace('.', '-'));
|
||||
}
|
||||
return friendlyPath.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,113 @@
|
||||
// Uncomment the following to provide samples for PageResult<T>. Must also add the Microsoft.AspNet.WebApi.OData
|
||||
// package to your project.
|
||||
////#define Handle_PageResultOfT
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Reflection;
|
||||
using System.Web;
|
||||
using System.Web.Http;
|
||||
#if Handle_PageResultOfT
|
||||
using System.Web.Http.OData;
|
||||
#endif
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// Use this class to customize the Help Page.
|
||||
/// For example you can set a custom <see cref="System.Web.Http.Description.IDocumentationProvider"/> to supply the documentation
|
||||
/// or you can provide the samples for the requests/responses.
|
||||
/// </summary>
|
||||
public static class HelpPageConfig
|
||||
{
|
||||
[SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters",
|
||||
MessageId = "$rootnamespace$.Areas.HelpPage.TextSample.#ctor(System.String)",
|
||||
Justification = "End users may choose to merge this string with existing localized resources.")]
|
||||
[SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly",
|
||||
MessageId = "bsonspec",
|
||||
Justification = "Part of a URI.")]
|
||||
public static void Register(HttpConfiguration config)
|
||||
{
|
||||
//// Uncomment the following to use the documentation from XML documentation file.
|
||||
//config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));
|
||||
|
||||
//// Uncomment the following to use "sample string" as the sample for all actions that have string as the body parameter or return type.
|
||||
//// Also, the string arrays will be used for IEnumerable<string>. The sample objects will be serialized into different media type
|
||||
//// formats by the available formatters.
|
||||
//config.SetSampleObjects(new Dictionary<Type, object>
|
||||
//{
|
||||
// {typeof(string), "sample string"},
|
||||
// {typeof(IEnumerable<string>), new string[]{"sample 1", "sample 2"}}
|
||||
//});
|
||||
|
||||
// Extend the following to provide factories for types not handled automatically (those lacking parameterless
|
||||
// constructors) or for which you prefer to use non-default property values. Line below provides a fallback
|
||||
// since automatic handling will fail and GeneratePageResult handles only a single type.
|
||||
#if Handle_PageResultOfT
|
||||
config.GetHelpPageSampleGenerator().SampleObjectFactories.Add(GeneratePageResult);
|
||||
#endif
|
||||
|
||||
// Extend the following to use a preset object directly as the sample for all actions that support a media
|
||||
// type, regardless of the body parameter or return type. The lines below avoid display of binary content.
|
||||
// The BsonMediaTypeFormatter (if available) is not used to serialize the TextSample object.
|
||||
config.SetSampleForMediaType(
|
||||
new TextSample("Binary JSON content. See http://bsonspec.org for details."),
|
||||
new MediaTypeHeaderValue("application/bson"));
|
||||
|
||||
//// Uncomment the following to use "[0]=foo&[1]=bar" directly as the sample for all actions that support form URL encoded format
|
||||
//// and have IEnumerable<string> as the body parameter or return type.
|
||||
//config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>));
|
||||
|
||||
//// Uncomment the following to use "1234" directly as the request sample for media type "text/plain" on the controller named "Values"
|
||||
//// and action named "Put".
|
||||
//config.SetSampleRequest("1234", new MediaTypeHeaderValue("text/plain"), "Values", "Put");
|
||||
|
||||
//// Uncomment the following to use the image on "../images/aspNetHome.png" directly as the response sample for media type "image/png"
|
||||
//// on the controller named "Values" and action named "Get" with parameter "id".
|
||||
//config.SetSampleResponse(new ImageSample("../images/aspNetHome.png"), new MediaTypeHeaderValue("image/png"), "Values", "Get", "id");
|
||||
|
||||
//// Uncomment the following to correct the sample request when the action expects an HttpRequestMessage with ObjectContent<string>.
|
||||
//// The sample will be generated as if the controller named "Values" and action named "Get" were having string as the body parameter.
|
||||
//config.SetActualRequestType(typeof(string), "Values", "Get");
|
||||
|
||||
//// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>.
|
||||
//// The sample will be generated as if the controller named "Values" and action named "Post" were returning a string.
|
||||
//config.SetActualResponseType(typeof(string), "Values", "Post");
|
||||
}
|
||||
|
||||
#if Handle_PageResultOfT
|
||||
private static object GeneratePageResult(HelpPageSampleGenerator sampleGenerator, Type type)
|
||||
{
|
||||
if (type.IsGenericType)
|
||||
{
|
||||
Type openGenericType = type.GetGenericTypeDefinition();
|
||||
if (openGenericType == typeof(PageResult<>))
|
||||
{
|
||||
// Get the T in PageResult<T>
|
||||
Type[] typeParameters = type.GetGenericArguments();
|
||||
Debug.Assert(typeParameters.Length == 1);
|
||||
|
||||
// Create an enumeration to pass as the first parameter to the PageResult<T> constuctor
|
||||
Type itemsType = typeof(List<>).MakeGenericType(typeParameters);
|
||||
object items = sampleGenerator.GetSampleObject(itemsType);
|
||||
|
||||
// Fill in the other information needed to invoke the PageResult<T> constuctor
|
||||
Type[] parameterTypes = new Type[] { itemsType, typeof(Uri), typeof(long?), };
|
||||
object[] parameters = new object[] { items, null, (long)ObjectGenerator.DefaultCollectionSize, };
|
||||
|
||||
// Call PageResult(IEnumerable<T> items, Uri nextPageLink, long? count) constructor
|
||||
ConstructorInfo constructor = type.GetConstructor(parameterTypes);
|
||||
return constructor.Invoke(parameters);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.Web.Http;
|
||||
using System.Web.Mvc;
|
||||
using $rootnamespace$.Areas.HelpPage.ModelDescriptions;
|
||||
using $rootnamespace$.Areas.HelpPage.Models;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// The controller that will handle requests for the help page.
|
||||
/// </summary>
|
||||
public class HelpController : Controller
|
||||
{
|
||||
private const string ErrorViewName = "Error";
|
||||
|
||||
public HelpController()
|
||||
: this(GlobalConfiguration.Configuration)
|
||||
{
|
||||
}
|
||||
|
||||
public HelpController(HttpConfiguration config)
|
||||
{
|
||||
Configuration = config;
|
||||
}
|
||||
|
||||
public HttpConfiguration Configuration { get; private set; }
|
||||
|
||||
public ActionResult Index()
|
||||
{
|
||||
ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
|
||||
return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
|
||||
}
|
||||
|
||||
public ActionResult Api(string apiId)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(apiId))
|
||||
{
|
||||
HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId);
|
||||
if (apiModel != null)
|
||||
{
|
||||
return View(apiModel);
|
||||
}
|
||||
}
|
||||
|
||||
return View(ErrorViewName);
|
||||
}
|
||||
|
||||
public ActionResult ResourceModel(string modelName)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(modelName))
|
||||
{
|
||||
ModelDescriptionGenerator modelDescriptionGenerator = Configuration.GetModelDescriptionGenerator();
|
||||
ModelDescription modelDescription;
|
||||
if (modelDescriptionGenerator.GeneratedModels.TryGetValue(modelName, out modelDescription))
|
||||
{
|
||||
return View(modelDescription);
|
||||
}
|
||||
}
|
||||
|
||||
return View(ErrorViewName);
|
||||
}
|
||||
}
|
||||
}
|
||||
134
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/HelpPage.css.pp
vendored
Normal file
134
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/HelpPage.css.pp
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
.help-page h1,
|
||||
.help-page .h1,
|
||||
.help-page h2,
|
||||
.help-page .h2,
|
||||
.help-page h3,
|
||||
.help-page .h3,
|
||||
#body.help-page,
|
||||
.help-page-table th,
|
||||
.help-page-table pre,
|
||||
.help-page-table p {
|
||||
font-family: "Segoe UI Light", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif;
|
||||
}
|
||||
|
||||
.help-page pre.wrapped {
|
||||
white-space: -moz-pre-wrap;
|
||||
white-space: -pre-wrap;
|
||||
white-space: -o-pre-wrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.help-page .warning-message-container {
|
||||
margin-top: 20px;
|
||||
padding: 0 10px;
|
||||
color: #525252;
|
||||
background: #EFDCA9;
|
||||
border: 1px solid #CCCCCC;
|
||||
}
|
||||
|
||||
.help-page-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
text-align: left;
|
||||
margin: 0px 0px 20px 0px;
|
||||
border-top: 1px solid #D4D4D4;
|
||||
}
|
||||
|
||||
.help-page-table th {
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
padding: 5px 6px 5px 6px;
|
||||
}
|
||||
|
||||
.help-page-table td {
|
||||
border-bottom: 1px solid #D4D4D4;
|
||||
padding: 10px 8px 10px 8px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.help-page-table pre,
|
||||
.help-page-table p {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.help-page-table tbody tr:hover td {
|
||||
background-color: #F3F3F3;
|
||||
}
|
||||
|
||||
.help-page a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.help-page .sample-header {
|
||||
border: 2px solid #D4D4D4;
|
||||
background: #00497E;
|
||||
color: #FFFFFF;
|
||||
padding: 8px 15px;
|
||||
border-bottom: none;
|
||||
display: inline-block;
|
||||
margin: 10px 0px 0px 0px;
|
||||
}
|
||||
|
||||
.help-page .sample-content {
|
||||
display: block;
|
||||
border-width: 0;
|
||||
padding: 15px 20px;
|
||||
background: #FFFFFF;
|
||||
border: 2px solid #D4D4D4;
|
||||
margin: 0px 0px 10px 0px;
|
||||
}
|
||||
|
||||
.help-page .api-name {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.help-page .api-documentation {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.help-page .parameter-name {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.help-page .parameter-documentation {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.help-page .parameter-type {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.help-page .parameter-annotations {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.help-page h1,
|
||||
.help-page .h1 {
|
||||
font-size: 36px;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.help-page h2,
|
||||
.help-page .h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.help-page h3,
|
||||
.help-page .h3 {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
#body.help-page {
|
||||
font-size: 14px;
|
||||
line-height: 143%;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.help-page a {
|
||||
color: #0000EE;
|
||||
text-decoration: none;
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
using System.Web.Http;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
public class HelpPageAreaRegistration : AreaRegistration
|
||||
{
|
||||
public override string AreaName
|
||||
{
|
||||
get
|
||||
{
|
||||
return "HelpPage";
|
||||
}
|
||||
}
|
||||
|
||||
public override void RegisterArea(AreaRegistrationContext context)
|
||||
{
|
||||
context.MapRoute(
|
||||
"HelpPage_Default",
|
||||
"Help/{action}/{apiId}",
|
||||
new { controller = "Help", action = "Index", apiId = UrlParameter.Optional });
|
||||
|
||||
HelpPageConfig.Register(GlobalConfiguration.Configuration);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,467 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Web.Http;
|
||||
using System.Web.Http.Controllers;
|
||||
using System.Web.Http.Description;
|
||||
using $rootnamespace$.Areas.HelpPage.ModelDescriptions;
|
||||
using $rootnamespace$.Areas.HelpPage.Models;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
public static class HelpPageConfigurationExtensions
|
||||
{
|
||||
private const string ApiModelPrefix = "MS_HelpPageApiModel_";
|
||||
|
||||
/// <summary>
|
||||
/// Sets the documentation provider for help page.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="documentationProvider">The documentation provider.</param>
|
||||
public static void SetDocumentationProvider(this HttpConfiguration config, IDocumentationProvider documentationProvider)
|
||||
{
|
||||
config.Services.Replace(typeof(IDocumentationProvider), documentationProvider);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the objects that will be used by the formatters to produce sample requests/responses.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sampleObjects">The sample objects.</param>
|
||||
public static void SetSampleObjects(this HttpConfiguration config, IDictionary<Type, object> sampleObjects)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().SampleObjects = sampleObjects;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the sample request directly for the specified media type and action.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sample">The sample request.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, new[] { "*" }), sample);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the sample request directly for the specified media type and action with parameters.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sample">The sample request.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, parameterNames), sample);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the sample request directly for the specified media type of the action.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sample">The sample response.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, new[] { "*" }), sample);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the sample response directly for the specified media type of the action with specific parameters.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sample">The sample response.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, parameterNames), sample);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the sample directly for all actions with the specified media type.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sample">The sample.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
public static void SetSampleForMediaType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType), sample);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the sample directly for all actions with the specified type and media type.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sample">The sample.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="type">The parameter type or return type of an action.</param>
|
||||
public static void SetSampleForType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, Type type)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, type), sample);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> passed to the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
|
||||
/// The help page will use this information to produce more accurate request samples.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, new[] { "*" }), type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> passed to the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
|
||||
/// The help page will use this information to produce more accurate request samples.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, parameterNames), type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> returned as part of the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
|
||||
/// The help page will use this information to produce more accurate response samples.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, new[] { "*" }), type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> returned as part of the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
|
||||
/// The help page will use this information to produce more accurate response samples.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)
|
||||
{
|
||||
config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, parameterNames), type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the help page sample generator.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <returns>The help page sample generator.</returns>
|
||||
public static HelpPageSampleGenerator GetHelpPageSampleGenerator(this HttpConfiguration config)
|
||||
{
|
||||
return (HelpPageSampleGenerator)config.Properties.GetOrAdd(
|
||||
typeof(HelpPageSampleGenerator),
|
||||
k => new HelpPageSampleGenerator());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the help page sample generator.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="sampleGenerator">The help page sample generator.</param>
|
||||
public static void SetHelpPageSampleGenerator(this HttpConfiguration config, HelpPageSampleGenerator sampleGenerator)
|
||||
{
|
||||
config.Properties.AddOrUpdate(
|
||||
typeof(HelpPageSampleGenerator),
|
||||
k => sampleGenerator,
|
||||
(k, o) => sampleGenerator);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the model description generator.
|
||||
/// </summary>
|
||||
/// <param name="config">The configuration.</param>
|
||||
/// <returns>The <see cref="ModelDescriptionGenerator"/></returns>
|
||||
public static ModelDescriptionGenerator GetModelDescriptionGenerator(this HttpConfiguration config)
|
||||
{
|
||||
return (ModelDescriptionGenerator)config.Properties.GetOrAdd(
|
||||
typeof(ModelDescriptionGenerator),
|
||||
k => InitializeModelDescriptionGenerator(config));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the model that represents an API displayed on the help page. The model is initialized on the first call and cached for subsequent calls.
|
||||
/// </summary>
|
||||
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
|
||||
/// <param name="apiDescriptionId">The <see cref="ApiDescription"/> ID.</param>
|
||||
/// <returns>
|
||||
/// An <see cref="HelpPageApiModel"/>
|
||||
/// </returns>
|
||||
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)
|
||||
{
|
||||
object model;
|
||||
string modelId = ApiModelPrefix + apiDescriptionId;
|
||||
if (!config.Properties.TryGetValue(modelId, out model))
|
||||
{
|
||||
Collection<ApiDescription> apiDescriptions = config.Services.GetApiExplorer().ApiDescriptions;
|
||||
ApiDescription apiDescription = apiDescriptions.FirstOrDefault(api => String.Equals(api.GetFriendlyId(), apiDescriptionId, StringComparison.OrdinalIgnoreCase));
|
||||
if (apiDescription != null)
|
||||
{
|
||||
model = GenerateApiModel(apiDescription, config);
|
||||
config.Properties.TryAdd(modelId, model);
|
||||
}
|
||||
}
|
||||
|
||||
return (HelpPageApiModel)model;
|
||||
}
|
||||
|
||||
private static HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HttpConfiguration config)
|
||||
{
|
||||
HelpPageApiModel apiModel = new HelpPageApiModel()
|
||||
{
|
||||
ApiDescription = apiDescription,
|
||||
};
|
||||
|
||||
ModelDescriptionGenerator modelGenerator = config.GetModelDescriptionGenerator();
|
||||
HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();
|
||||
GenerateUriParameters(apiModel, modelGenerator);
|
||||
GenerateRequestModelDescription(apiModel, modelGenerator, sampleGenerator);
|
||||
GenerateResourceDescription(apiModel, modelGenerator);
|
||||
GenerateSamples(apiModel, sampleGenerator);
|
||||
|
||||
return apiModel;
|
||||
}
|
||||
|
||||
private static void GenerateUriParameters(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)
|
||||
{
|
||||
ApiDescription apiDescription = apiModel.ApiDescription;
|
||||
foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)
|
||||
{
|
||||
if (apiParameter.Source == ApiParameterSource.FromUri)
|
||||
{
|
||||
HttpParameterDescriptor parameterDescriptor = apiParameter.ParameterDescriptor;
|
||||
Type parameterType = null;
|
||||
ModelDescription typeDescription = null;
|
||||
ComplexTypeModelDescription complexTypeDescription = null;
|
||||
if (parameterDescriptor != null)
|
||||
{
|
||||
parameterType = parameterDescriptor.ParameterType;
|
||||
typeDescription = modelGenerator.GetOrCreateModelDescription(parameterType);
|
||||
complexTypeDescription = typeDescription as ComplexTypeModelDescription;
|
||||
}
|
||||
|
||||
// Example:
|
||||
// [TypeConverter(typeof(PointConverter))]
|
||||
// public class Point
|
||||
// {
|
||||
// public Point(int x, int y)
|
||||
// {
|
||||
// X = x;
|
||||
// Y = y;
|
||||
// }
|
||||
// public int X { get; set; }
|
||||
// public int Y { get; set; }
|
||||
// }
|
||||
// Class Point is bindable with a TypeConverter, so Point will be added to UriParameters collection.
|
||||
//
|
||||
// public class Point
|
||||
// {
|
||||
// public int X { get; set; }
|
||||
// public int Y { get; set; }
|
||||
// }
|
||||
// Regular complex class Point will have properties X and Y added to UriParameters collection.
|
||||
if (complexTypeDescription != null
|
||||
&& !IsBindableWithTypeConverter(parameterType))
|
||||
{
|
||||
foreach (ParameterDescription uriParameter in complexTypeDescription.Properties)
|
||||
{
|
||||
apiModel.UriParameters.Add(uriParameter);
|
||||
}
|
||||
}
|
||||
else if (parameterDescriptor != null)
|
||||
{
|
||||
ParameterDescription uriParameter =
|
||||
AddParameterDescription(apiModel, apiParameter, typeDescription);
|
||||
|
||||
if (!parameterDescriptor.IsOptional)
|
||||
{
|
||||
uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = "Required" });
|
||||
}
|
||||
|
||||
object defaultValue = parameterDescriptor.DefaultValue;
|
||||
if (defaultValue != null)
|
||||
{
|
||||
uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = "Default value is " + Convert.ToString(defaultValue, CultureInfo.InvariantCulture) });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(parameterDescriptor == null);
|
||||
|
||||
// If parameterDescriptor is null, this is an undeclared route parameter which only occurs
|
||||
// when source is FromUri. Ignored in request model and among resource parameters but listed
|
||||
// as a simple string here.
|
||||
ModelDescription modelDescription = modelGenerator.GetOrCreateModelDescription(typeof(string));
|
||||
AddParameterDescription(apiModel, apiParameter, modelDescription);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsBindableWithTypeConverter(Type parameterType)
|
||||
{
|
||||
if (parameterType == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return TypeDescriptor.GetConverter(parameterType).CanConvertFrom(typeof(string));
|
||||
}
|
||||
|
||||
private static ParameterDescription AddParameterDescription(HelpPageApiModel apiModel,
|
||||
ApiParameterDescription apiParameter, ModelDescription typeDescription)
|
||||
{
|
||||
ParameterDescription parameterDescription = new ParameterDescription
|
||||
{
|
||||
Name = apiParameter.Name,
|
||||
Documentation = apiParameter.Documentation,
|
||||
TypeDescription = typeDescription,
|
||||
};
|
||||
|
||||
apiModel.UriParameters.Add(parameterDescription);
|
||||
return parameterDescription;
|
||||
}
|
||||
|
||||
private static void GenerateRequestModelDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator, HelpPageSampleGenerator sampleGenerator)
|
||||
{
|
||||
ApiDescription apiDescription = apiModel.ApiDescription;
|
||||
foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)
|
||||
{
|
||||
if (apiParameter.Source == ApiParameterSource.FromBody)
|
||||
{
|
||||
Type parameterType = apiParameter.ParameterDescriptor.ParameterType;
|
||||
apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);
|
||||
apiModel.RequestDocumentation = apiParameter.Documentation;
|
||||
}
|
||||
else if (apiParameter.ParameterDescriptor != null &&
|
||||
apiParameter.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage))
|
||||
{
|
||||
Type parameterType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);
|
||||
|
||||
if (parameterType != null)
|
||||
{
|
||||
apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void GenerateResourceDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)
|
||||
{
|
||||
ResponseDescription response = apiModel.ApiDescription.ResponseDescription;
|
||||
Type responseType = response.ResponseType ?? response.DeclaredType;
|
||||
if (responseType != null && responseType != typeof(void))
|
||||
{
|
||||
apiModel.ResourceDescription = modelGenerator.GetOrCreateModelDescription(responseType);
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "The exception is recorded as ErrorMessages.")]
|
||||
private static void GenerateSamples(HelpPageApiModel apiModel, HelpPageSampleGenerator sampleGenerator)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var item in sampleGenerator.GetSampleRequests(apiModel.ApiDescription))
|
||||
{
|
||||
apiModel.SampleRequests.Add(item.Key, item.Value);
|
||||
LogInvalidSampleAsError(apiModel, item.Value);
|
||||
}
|
||||
|
||||
foreach (var item in sampleGenerator.GetSampleResponses(apiModel.ApiDescription))
|
||||
{
|
||||
apiModel.SampleResponses.Add(item.Key, item.Value);
|
||||
LogInvalidSampleAsError(apiModel, item.Value);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
apiModel.ErrorMessages.Add(String.Format(CultureInfo.CurrentCulture,
|
||||
"An exception has occurred while generating the sample. Exception message: {0}",
|
||||
HelpPageSampleGenerator.UnwrapException(e).Message));
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryGetResourceParameter(ApiDescription apiDescription, HttpConfiguration config, out ApiParameterDescription parameterDescription, out Type resourceType)
|
||||
{
|
||||
parameterDescription = apiDescription.ParameterDescriptions.FirstOrDefault(
|
||||
p => p.Source == ApiParameterSource.FromBody ||
|
||||
(p.ParameterDescriptor != null && p.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage)));
|
||||
|
||||
if (parameterDescription == null)
|
||||
{
|
||||
resourceType = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
resourceType = parameterDescription.ParameterDescriptor.ParameterType;
|
||||
|
||||
if (resourceType == typeof(HttpRequestMessage))
|
||||
{
|
||||
HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();
|
||||
resourceType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);
|
||||
}
|
||||
|
||||
if (resourceType == null)
|
||||
{
|
||||
parameterDescription = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static ModelDescriptionGenerator InitializeModelDescriptionGenerator(HttpConfiguration config)
|
||||
{
|
||||
ModelDescriptionGenerator modelGenerator = new ModelDescriptionGenerator(config);
|
||||
Collection<ApiDescription> apis = config.Services.GetApiExplorer().ApiDescriptions;
|
||||
foreach (ApiDescription api in apis)
|
||||
{
|
||||
ApiParameterDescription parameterDescription;
|
||||
Type parameterType;
|
||||
if (TryGetResourceParameter(api, config, out parameterDescription, out parameterType))
|
||||
{
|
||||
modelGenerator.GetOrCreateModelDescription(parameterType);
|
||||
}
|
||||
}
|
||||
return modelGenerator;
|
||||
}
|
||||
|
||||
private static void LogInvalidSampleAsError(HelpPageApiModel apiModel, object sample)
|
||||
{
|
||||
InvalidSample invalidSample = sample as InvalidSample;
|
||||
if (invalidSample != null)
|
||||
{
|
||||
apiModel.ErrorMessages.Add(invalidSample.ErrorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class CollectionModelDescription : ModelDescription
|
||||
{
|
||||
public ModelDescription ElementDescription { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class ComplexTypeModelDescription : ModelDescription
|
||||
{
|
||||
public ComplexTypeModelDescription()
|
||||
{
|
||||
Properties = new Collection<ParameterDescription>();
|
||||
}
|
||||
|
||||
public Collection<ParameterDescription> Properties { get; private set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class DictionaryModelDescription : KeyValuePairModelDescription
|
||||
{
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class EnumTypeModelDescription : ModelDescription
|
||||
{
|
||||
public EnumTypeModelDescription()
|
||||
{
|
||||
Values = new Collection<EnumValueDescription>();
|
||||
}
|
||||
|
||||
public Collection<EnumValueDescription> Values { get; private set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class EnumValueDescription
|
||||
{
|
||||
public string Documentation { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Value { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public interface IModelDocumentationProvider
|
||||
{
|
||||
string GetDocumentation(MemberInfo member);
|
||||
|
||||
string GetDocumentation(Type type);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class KeyValuePairModelDescription : ModelDescription
|
||||
{
|
||||
public ModelDescription KeyModelDescription { get; set; }
|
||||
|
||||
public ModelDescription ValueModelDescription { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes a type model.
|
||||
/// </summary>
|
||||
public abstract class ModelDescription
|
||||
{
|
||||
public string Documentation { get; set; }
|
||||
|
||||
public Type ModelType { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,451 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Web.Http;
|
||||
using System.Web.Http.Description;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Generates model descriptions for given types.
|
||||
/// </summary>
|
||||
public class ModelDescriptionGenerator
|
||||
{
|
||||
// Modify this to support more data annotation attributes.
|
||||
private readonly IDictionary<Type, Func<object, string>> AnnotationTextGenerator = new Dictionary<Type, Func<object, string>>
|
||||
{
|
||||
{ typeof(RequiredAttribute), a => "Required" },
|
||||
{ typeof(RangeAttribute), a =>
|
||||
{
|
||||
RangeAttribute range = (RangeAttribute)a;
|
||||
return String.Format(CultureInfo.CurrentCulture, "Range: inclusive between {0} and {1}", range.Minimum, range.Maximum);
|
||||
}
|
||||
},
|
||||
{ typeof(MaxLengthAttribute), a =>
|
||||
{
|
||||
MaxLengthAttribute maxLength = (MaxLengthAttribute)a;
|
||||
return String.Format(CultureInfo.CurrentCulture, "Max length: {0}", maxLength.Length);
|
||||
}
|
||||
},
|
||||
{ typeof(MinLengthAttribute), a =>
|
||||
{
|
||||
MinLengthAttribute minLength = (MinLengthAttribute)a;
|
||||
return String.Format(CultureInfo.CurrentCulture, "Min length: {0}", minLength.Length);
|
||||
}
|
||||
},
|
||||
{ typeof(StringLengthAttribute), a =>
|
||||
{
|
||||
StringLengthAttribute strLength = (StringLengthAttribute)a;
|
||||
return String.Format(CultureInfo.CurrentCulture, "String length: inclusive between {0} and {1}", strLength.MinimumLength, strLength.MaximumLength);
|
||||
}
|
||||
},
|
||||
{ typeof(DataTypeAttribute), a =>
|
||||
{
|
||||
DataTypeAttribute dataType = (DataTypeAttribute)a;
|
||||
return String.Format(CultureInfo.CurrentCulture, "Data type: {0}", dataType.CustomDataType ?? dataType.DataType.ToString());
|
||||
}
|
||||
},
|
||||
{ typeof(RegularExpressionAttribute), a =>
|
||||
{
|
||||
RegularExpressionAttribute regularExpression = (RegularExpressionAttribute)a;
|
||||
return String.Format(CultureInfo.CurrentCulture, "Matching regular expression pattern: {0}", regularExpression.Pattern);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Modify this to add more default documentations.
|
||||
private readonly IDictionary<Type, string> DefaultTypeDocumentation = new Dictionary<Type, string>
|
||||
{
|
||||
{ typeof(Int16), "integer" },
|
||||
{ typeof(Int32), "integer" },
|
||||
{ typeof(Int64), "integer" },
|
||||
{ typeof(UInt16), "unsigned integer" },
|
||||
{ typeof(UInt32), "unsigned integer" },
|
||||
{ typeof(UInt64), "unsigned integer" },
|
||||
{ typeof(Byte), "byte" },
|
||||
{ typeof(Char), "character" },
|
||||
{ typeof(SByte), "signed byte" },
|
||||
{ typeof(Uri), "URI" },
|
||||
{ typeof(Single), "decimal number" },
|
||||
{ typeof(Double), "decimal number" },
|
||||
{ typeof(Decimal), "decimal number" },
|
||||
{ typeof(String), "string" },
|
||||
{ typeof(Guid), "globally unique identifier" },
|
||||
{ typeof(TimeSpan), "time interval" },
|
||||
{ typeof(DateTime), "date" },
|
||||
{ typeof(DateTimeOffset), "date" },
|
||||
{ typeof(Boolean), "boolean" },
|
||||
};
|
||||
|
||||
private Lazy<IModelDocumentationProvider> _documentationProvider;
|
||||
|
||||
public ModelDescriptionGenerator(HttpConfiguration config)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
throw new ArgumentNullException("config");
|
||||
}
|
||||
|
||||
_documentationProvider = new Lazy<IModelDocumentationProvider>(() => config.Services.GetDocumentationProvider() as IModelDocumentationProvider);
|
||||
GeneratedModels = new Dictionary<string, ModelDescription>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public Dictionary<string, ModelDescription> GeneratedModels { get; private set; }
|
||||
|
||||
private IModelDocumentationProvider DocumentationProvider
|
||||
{
|
||||
get
|
||||
{
|
||||
return _documentationProvider.Value;
|
||||
}
|
||||
}
|
||||
|
||||
public ModelDescription GetOrCreateModelDescription(Type modelType)
|
||||
{
|
||||
if (modelType == null)
|
||||
{
|
||||
throw new ArgumentNullException("modelType");
|
||||
}
|
||||
|
||||
Type underlyingType = Nullable.GetUnderlyingType(modelType);
|
||||
if (underlyingType != null)
|
||||
{
|
||||
modelType = underlyingType;
|
||||
}
|
||||
|
||||
ModelDescription modelDescription;
|
||||
string modelName = ModelNameHelper.GetModelName(modelType);
|
||||
if (GeneratedModels.TryGetValue(modelName, out modelDescription))
|
||||
{
|
||||
if (modelType != modelDescription.ModelType)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
String.Format(
|
||||
CultureInfo.CurrentCulture,
|
||||
"A model description could not be created. Duplicate model name '{0}' was found for types '{1}' and '{2}'. " +
|
||||
"Use the [ModelName] attribute to change the model name for at least one of the types so that it has a unique name.",
|
||||
modelName,
|
||||
modelDescription.ModelType.FullName,
|
||||
modelType.FullName));
|
||||
}
|
||||
|
||||
return modelDescription;
|
||||
}
|
||||
|
||||
if (DefaultTypeDocumentation.ContainsKey(modelType))
|
||||
{
|
||||
return GenerateSimpleTypeModelDescription(modelType);
|
||||
}
|
||||
|
||||
if (modelType.IsEnum)
|
||||
{
|
||||
return GenerateEnumTypeModelDescription(modelType);
|
||||
}
|
||||
|
||||
if (modelType.IsGenericType)
|
||||
{
|
||||
Type[] genericArguments = modelType.GetGenericArguments();
|
||||
|
||||
if (genericArguments.Length == 1)
|
||||
{
|
||||
Type enumerableType = typeof(IEnumerable<>).MakeGenericType(genericArguments);
|
||||
if (enumerableType.IsAssignableFrom(modelType))
|
||||
{
|
||||
return GenerateCollectionModelDescription(modelType, genericArguments[0]);
|
||||
}
|
||||
}
|
||||
if (genericArguments.Length == 2)
|
||||
{
|
||||
Type dictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments);
|
||||
if (dictionaryType.IsAssignableFrom(modelType))
|
||||
{
|
||||
return GenerateDictionaryModelDescription(modelType, genericArguments[0], genericArguments[1]);
|
||||
}
|
||||
|
||||
Type keyValuePairType = typeof(KeyValuePair<,>).MakeGenericType(genericArguments);
|
||||
if (keyValuePairType.IsAssignableFrom(modelType))
|
||||
{
|
||||
return GenerateKeyValuePairModelDescription(modelType, genericArguments[0], genericArguments[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (modelType.IsArray)
|
||||
{
|
||||
Type elementType = modelType.GetElementType();
|
||||
return GenerateCollectionModelDescription(modelType, elementType);
|
||||
}
|
||||
|
||||
if (modelType == typeof(NameValueCollection))
|
||||
{
|
||||
return GenerateDictionaryModelDescription(modelType, typeof(string), typeof(string));
|
||||
}
|
||||
|
||||
if (typeof(IDictionary).IsAssignableFrom(modelType))
|
||||
{
|
||||
return GenerateDictionaryModelDescription(modelType, typeof(object), typeof(object));
|
||||
}
|
||||
|
||||
if (typeof(IEnumerable).IsAssignableFrom(modelType))
|
||||
{
|
||||
return GenerateCollectionModelDescription(modelType, typeof(object));
|
||||
}
|
||||
|
||||
return GenerateComplexTypeModelDescription(modelType);
|
||||
}
|
||||
|
||||
// Change this to provide different name for the member.
|
||||
private static string GetMemberName(MemberInfo member, bool hasDataContractAttribute)
|
||||
{
|
||||
JsonPropertyAttribute jsonProperty = member.GetCustomAttribute<JsonPropertyAttribute>();
|
||||
if (jsonProperty != null && !String.IsNullOrEmpty(jsonProperty.PropertyName))
|
||||
{
|
||||
return jsonProperty.PropertyName;
|
||||
}
|
||||
|
||||
if (hasDataContractAttribute)
|
||||
{
|
||||
DataMemberAttribute dataMember = member.GetCustomAttribute<DataMemberAttribute>();
|
||||
if (dataMember != null && !String.IsNullOrEmpty(dataMember.Name))
|
||||
{
|
||||
return dataMember.Name;
|
||||
}
|
||||
}
|
||||
|
||||
return member.Name;
|
||||
}
|
||||
|
||||
private static bool ShouldDisplayMember(MemberInfo member, bool hasDataContractAttribute)
|
||||
{
|
||||
JsonIgnoreAttribute jsonIgnore = member.GetCustomAttribute<JsonIgnoreAttribute>();
|
||||
XmlIgnoreAttribute xmlIgnore = member.GetCustomAttribute<XmlIgnoreAttribute>();
|
||||
IgnoreDataMemberAttribute ignoreDataMember = member.GetCustomAttribute<IgnoreDataMemberAttribute>();
|
||||
NonSerializedAttribute nonSerialized = member.GetCustomAttribute<NonSerializedAttribute>();
|
||||
ApiExplorerSettingsAttribute apiExplorerSetting = member.GetCustomAttribute<ApiExplorerSettingsAttribute>();
|
||||
|
||||
bool hasMemberAttribute = member.DeclaringType.IsEnum ?
|
||||
member.GetCustomAttribute<EnumMemberAttribute>() != null :
|
||||
member.GetCustomAttribute<DataMemberAttribute>() != null;
|
||||
|
||||
// Display member only if all the followings are true:
|
||||
// no JsonIgnoreAttribute
|
||||
// no XmlIgnoreAttribute
|
||||
// no IgnoreDataMemberAttribute
|
||||
// no NonSerializedAttribute
|
||||
// no ApiExplorerSettingsAttribute with IgnoreApi set to true
|
||||
// no DataContractAttribute without DataMemberAttribute or EnumMemberAttribute
|
||||
return jsonIgnore == null &&
|
||||
xmlIgnore == null &&
|
||||
ignoreDataMember == null &&
|
||||
nonSerialized == null &&
|
||||
(apiExplorerSetting == null || !apiExplorerSetting.IgnoreApi) &&
|
||||
(!hasDataContractAttribute || hasMemberAttribute);
|
||||
}
|
||||
|
||||
private string CreateDefaultDocumentation(Type type)
|
||||
{
|
||||
string documentation;
|
||||
if (DefaultTypeDocumentation.TryGetValue(type, out documentation))
|
||||
{
|
||||
return documentation;
|
||||
}
|
||||
if (DocumentationProvider != null)
|
||||
{
|
||||
documentation = DocumentationProvider.GetDocumentation(type);
|
||||
}
|
||||
|
||||
return documentation;
|
||||
}
|
||||
|
||||
private void GenerateAnnotations(MemberInfo property, ParameterDescription propertyModel)
|
||||
{
|
||||
List<ParameterAnnotation> annotations = new List<ParameterAnnotation>();
|
||||
|
||||
IEnumerable<Attribute> attributes = property.GetCustomAttributes();
|
||||
foreach (Attribute attribute in attributes)
|
||||
{
|
||||
Func<object, string> textGenerator;
|
||||
if (AnnotationTextGenerator.TryGetValue(attribute.GetType(), out textGenerator))
|
||||
{
|
||||
annotations.Add(
|
||||
new ParameterAnnotation
|
||||
{
|
||||
AnnotationAttribute = attribute,
|
||||
Documentation = textGenerator(attribute)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Rearrange the annotations
|
||||
annotations.Sort((x, y) =>
|
||||
{
|
||||
// Special-case RequiredAttribute so that it shows up on top
|
||||
if (x.AnnotationAttribute is RequiredAttribute)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (y.AnnotationAttribute is RequiredAttribute)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Sort the rest based on alphabetic order of the documentation
|
||||
return String.Compare(x.Documentation, y.Documentation, StringComparison.OrdinalIgnoreCase);
|
||||
});
|
||||
|
||||
foreach (ParameterAnnotation annotation in annotations)
|
||||
{
|
||||
propertyModel.Annotations.Add(annotation);
|
||||
}
|
||||
}
|
||||
|
||||
private CollectionModelDescription GenerateCollectionModelDescription(Type modelType, Type elementType)
|
||||
{
|
||||
ModelDescription collectionModelDescription = GetOrCreateModelDescription(elementType);
|
||||
if (collectionModelDescription != null)
|
||||
{
|
||||
return new CollectionModelDescription
|
||||
{
|
||||
Name = ModelNameHelper.GetModelName(modelType),
|
||||
ModelType = modelType,
|
||||
ElementDescription = collectionModelDescription
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private ModelDescription GenerateComplexTypeModelDescription(Type modelType)
|
||||
{
|
||||
ComplexTypeModelDescription complexModelDescription = new ComplexTypeModelDescription
|
||||
{
|
||||
Name = ModelNameHelper.GetModelName(modelType),
|
||||
ModelType = modelType,
|
||||
Documentation = CreateDefaultDocumentation(modelType)
|
||||
};
|
||||
|
||||
GeneratedModels.Add(complexModelDescription.Name, complexModelDescription);
|
||||
bool hasDataContractAttribute = modelType.GetCustomAttribute<DataContractAttribute>() != null;
|
||||
PropertyInfo[] properties = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
foreach (PropertyInfo property in properties)
|
||||
{
|
||||
if (ShouldDisplayMember(property, hasDataContractAttribute))
|
||||
{
|
||||
ParameterDescription propertyModel = new ParameterDescription
|
||||
{
|
||||
Name = GetMemberName(property, hasDataContractAttribute)
|
||||
};
|
||||
|
||||
if (DocumentationProvider != null)
|
||||
{
|
||||
propertyModel.Documentation = DocumentationProvider.GetDocumentation(property);
|
||||
}
|
||||
|
||||
GenerateAnnotations(property, propertyModel);
|
||||
complexModelDescription.Properties.Add(propertyModel);
|
||||
propertyModel.TypeDescription = GetOrCreateModelDescription(property.PropertyType);
|
||||
}
|
||||
}
|
||||
|
||||
FieldInfo[] fields = modelType.GetFields(BindingFlags.Public | BindingFlags.Instance);
|
||||
foreach (FieldInfo field in fields)
|
||||
{
|
||||
if (ShouldDisplayMember(field, hasDataContractAttribute))
|
||||
{
|
||||
ParameterDescription propertyModel = new ParameterDescription
|
||||
{
|
||||
Name = GetMemberName(field, hasDataContractAttribute)
|
||||
};
|
||||
|
||||
if (DocumentationProvider != null)
|
||||
{
|
||||
propertyModel.Documentation = DocumentationProvider.GetDocumentation(field);
|
||||
}
|
||||
|
||||
complexModelDescription.Properties.Add(propertyModel);
|
||||
propertyModel.TypeDescription = GetOrCreateModelDescription(field.FieldType);
|
||||
}
|
||||
}
|
||||
|
||||
return complexModelDescription;
|
||||
}
|
||||
|
||||
private DictionaryModelDescription GenerateDictionaryModelDescription(Type modelType, Type keyType, Type valueType)
|
||||
{
|
||||
ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType);
|
||||
ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType);
|
||||
|
||||
return new DictionaryModelDescription
|
||||
{
|
||||
Name = ModelNameHelper.GetModelName(modelType),
|
||||
ModelType = modelType,
|
||||
KeyModelDescription = keyModelDescription,
|
||||
ValueModelDescription = valueModelDescription
|
||||
};
|
||||
}
|
||||
|
||||
private EnumTypeModelDescription GenerateEnumTypeModelDescription(Type modelType)
|
||||
{
|
||||
EnumTypeModelDescription enumDescription = new EnumTypeModelDescription
|
||||
{
|
||||
Name = ModelNameHelper.GetModelName(modelType),
|
||||
ModelType = modelType,
|
||||
Documentation = CreateDefaultDocumentation(modelType)
|
||||
};
|
||||
bool hasDataContractAttribute = modelType.GetCustomAttribute<DataContractAttribute>() != null;
|
||||
foreach (FieldInfo field in modelType.GetFields(BindingFlags.Public | BindingFlags.Static))
|
||||
{
|
||||
if (ShouldDisplayMember(field, hasDataContractAttribute))
|
||||
{
|
||||
EnumValueDescription enumValue = new EnumValueDescription
|
||||
{
|
||||
Name = field.Name,
|
||||
Value = field.GetRawConstantValue().ToString()
|
||||
};
|
||||
if (DocumentationProvider != null)
|
||||
{
|
||||
enumValue.Documentation = DocumentationProvider.GetDocumentation(field);
|
||||
}
|
||||
enumDescription.Values.Add(enumValue);
|
||||
}
|
||||
}
|
||||
GeneratedModels.Add(enumDescription.Name, enumDescription);
|
||||
|
||||
return enumDescription;
|
||||
}
|
||||
|
||||
private KeyValuePairModelDescription GenerateKeyValuePairModelDescription(Type modelType, Type keyType, Type valueType)
|
||||
{
|
||||
ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType);
|
||||
ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType);
|
||||
|
||||
return new KeyValuePairModelDescription
|
||||
{
|
||||
Name = ModelNameHelper.GetModelName(modelType),
|
||||
ModelType = modelType,
|
||||
KeyModelDescription = keyModelDescription,
|
||||
ValueModelDescription = valueModelDescription
|
||||
};
|
||||
}
|
||||
|
||||
private ModelDescription GenerateSimpleTypeModelDescription(Type modelType)
|
||||
{
|
||||
SimpleTypeModelDescription simpleModelDescription = new SimpleTypeModelDescription
|
||||
{
|
||||
Name = ModelNameHelper.GetModelName(modelType),
|
||||
ModelType = modelType,
|
||||
Documentation = CreateDefaultDocumentation(modelType)
|
||||
};
|
||||
GeneratedModels.Add(simpleModelDescription.Name, simpleModelDescription);
|
||||
|
||||
return simpleModelDescription;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Use this attribute to change the name of the <see cref="ModelDescription"/> generated for a type.
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false, Inherited = false)]
|
||||
public sealed class ModelNameAttribute : Attribute
|
||||
{
|
||||
public ModelNameAttribute(string name)
|
||||
{
|
||||
Name = name;
|
||||
}
|
||||
|
||||
public string Name { get; private set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
internal static class ModelNameHelper
|
||||
{
|
||||
// Modify this to provide custom model name mapping.
|
||||
public static string GetModelName(Type type)
|
||||
{
|
||||
ModelNameAttribute modelNameAttribute = type.GetCustomAttribute<ModelNameAttribute>();
|
||||
if (modelNameAttribute != null && !String.IsNullOrEmpty(modelNameAttribute.Name))
|
||||
{
|
||||
return modelNameAttribute.Name;
|
||||
}
|
||||
|
||||
string modelName = type.Name;
|
||||
if (type.IsGenericType)
|
||||
{
|
||||
// Format the generic type name to something like: GenericOfAgurment1AndArgument2
|
||||
Type genericType = type.GetGenericTypeDefinition();
|
||||
Type[] genericArguments = type.GetGenericArguments();
|
||||
string genericTypeName = genericType.Name;
|
||||
|
||||
// Trim the generic parameter counts from the name
|
||||
genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`'));
|
||||
string[] argumentTypeNames = genericArguments.Select(t => GetModelName(t)).ToArray();
|
||||
modelName = String.Format(CultureInfo.InvariantCulture, "{0}Of{1}", genericTypeName, String.Join("And", argumentTypeNames));
|
||||
}
|
||||
|
||||
return modelName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class ParameterAnnotation
|
||||
{
|
||||
public Attribute AnnotationAttribute { get; set; }
|
||||
|
||||
public string Documentation { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class ParameterDescription
|
||||
{
|
||||
public ParameterDescription()
|
||||
{
|
||||
Annotations = new Collection<ParameterAnnotation>();
|
||||
}
|
||||
|
||||
public Collection<ParameterAnnotation> Annotations { get; private set; }
|
||||
|
||||
public string Documentation { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public ModelDescription TypeDescription { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
namespace $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
{
|
||||
public class SimpleTypeModelDescription : ModelDescription
|
||||
{
|
||||
}
|
||||
}
|
||||
108
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Models/HelpPageApiModel.cs.pp
vendored
Normal file
108
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Models/HelpPageApiModel.cs.pp
vendored
Normal file
@ -0,0 +1,108 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Web.Http.Description;
|
||||
using $rootnamespace$.Areas.HelpPage.ModelDescriptions;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// The model that represents an API displayed on the help page.
|
||||
/// </summary>
|
||||
public class HelpPageApiModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="HelpPageApiModel"/> class.
|
||||
/// </summary>
|
||||
public HelpPageApiModel()
|
||||
{
|
||||
UriParameters = new Collection<ParameterDescription>();
|
||||
SampleRequests = new Dictionary<MediaTypeHeaderValue, object>();
|
||||
SampleResponses = new Dictionary<MediaTypeHeaderValue, object>();
|
||||
ErrorMessages = new Collection<string>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the <see cref="ApiDescription"/> that describes the API.
|
||||
/// </summary>
|
||||
public ApiDescription ApiDescription { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the <see cref="ParameterDescription"/> collection that describes the URI parameters for the API.
|
||||
/// </summary>
|
||||
public Collection<ParameterDescription> UriParameters { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the documentation for the request.
|
||||
/// </summary>
|
||||
public string RequestDocumentation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the <see cref="ModelDescription"/> that describes the request body.
|
||||
/// </summary>
|
||||
public ModelDescription RequestModelDescription { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the request body parameter descriptions.
|
||||
/// </summary>
|
||||
public IList<ParameterDescription> RequestBodyParameters
|
||||
{
|
||||
get
|
||||
{
|
||||
return GetParameterDescriptions(RequestModelDescription);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the <see cref="ModelDescription"/> that describes the resource.
|
||||
/// </summary>
|
||||
public ModelDescription ResourceDescription { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the resource property descriptions.
|
||||
/// </summary>
|
||||
public IList<ParameterDescription> ResourceProperties
|
||||
{
|
||||
get
|
||||
{
|
||||
return GetParameterDescriptions(ResourceDescription);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sample requests associated with the API.
|
||||
/// </summary>
|
||||
public IDictionary<MediaTypeHeaderValue, object> SampleRequests { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sample responses associated with the API.
|
||||
/// </summary>
|
||||
public IDictionary<MediaTypeHeaderValue, object> SampleResponses { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the error messages associated with this model.
|
||||
/// </summary>
|
||||
public Collection<string> ErrorMessages { get; private set; }
|
||||
|
||||
private static IList<ParameterDescription> GetParameterDescriptions(ModelDescription modelDescription)
|
||||
{
|
||||
ComplexTypeModelDescription complexTypeModelDescription = modelDescription as ComplexTypeModelDescription;
|
||||
if (complexTypeModelDescription != null)
|
||||
{
|
||||
return complexTypeModelDescription.Properties;
|
||||
}
|
||||
|
||||
CollectionModelDescription collectionModelDescription = modelDescription as CollectionModelDescription;
|
||||
if (collectionModelDescription != null)
|
||||
{
|
||||
complexTypeModelDescription = collectionModelDescription.ElementDescription as ComplexTypeModelDescription;
|
||||
if (complexTypeModelDescription != null)
|
||||
{
|
||||
return complexTypeModelDescription.Properties;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,444 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Formatting;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Web.Http.Description;
|
||||
using System.Xml.Linq;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// This class will generate the samples for the help page.
|
||||
/// </summary>
|
||||
public class HelpPageSampleGenerator
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="HelpPageSampleGenerator"/> class.
|
||||
/// </summary>
|
||||
public HelpPageSampleGenerator()
|
||||
{
|
||||
ActualHttpMessageTypes = new Dictionary<HelpPageSampleKey, Type>();
|
||||
ActionSamples = new Dictionary<HelpPageSampleKey, object>();
|
||||
SampleObjects = new Dictionary<Type, object>();
|
||||
SampleObjectFactories = new List<Func<HelpPageSampleGenerator, Type, object>>
|
||||
{
|
||||
DefaultSampleObjectFactory,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets CLR types that are used as the content of <see cref="HttpRequestMessage"/> or <see cref="HttpResponseMessage"/>.
|
||||
/// </summary>
|
||||
public IDictionary<HelpPageSampleKey, Type> ActualHttpMessageTypes { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the objects that are used directly as samples for certain actions.
|
||||
/// </summary>
|
||||
public IDictionary<HelpPageSampleKey, object> ActionSamples { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the objects that are serialized as samples by the supported formatters.
|
||||
/// </summary>
|
||||
public IDictionary<Type, object> SampleObjects { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets factories for the objects that the supported formatters will serialize as samples. Processed in order,
|
||||
/// stopping when the factory successfully returns a non-<see langref="null"/> object.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Collection includes just <see cref="ObjectGenerator.GenerateObject(Type)"/> initially. Use
|
||||
/// <code>SampleObjectFactories.Insert(0, func)</code> to provide an override and
|
||||
/// <code>SampleObjectFactories.Add(func)</code> to provide a fallback.</remarks>
|
||||
[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures",
|
||||
Justification = "This is an appropriate nesting of generic types")]
|
||||
public IList<Func<HelpPageSampleGenerator, Type, object>> SampleObjectFactories { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the request body samples for a given <see cref="ApiDescription"/>.
|
||||
/// </summary>
|
||||
/// <param name="api">The <see cref="ApiDescription"/>.</param>
|
||||
/// <returns>The samples keyed by media type.</returns>
|
||||
public IDictionary<MediaTypeHeaderValue, object> GetSampleRequests(ApiDescription api)
|
||||
{
|
||||
return GetSample(api, SampleDirection.Request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the response body samples for a given <see cref="ApiDescription"/>.
|
||||
/// </summary>
|
||||
/// <param name="api">The <see cref="ApiDescription"/>.</param>
|
||||
/// <returns>The samples keyed by media type.</returns>
|
||||
public IDictionary<MediaTypeHeaderValue, object> GetSampleResponses(ApiDescription api)
|
||||
{
|
||||
return GetSample(api, SampleDirection.Response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the request or response body samples.
|
||||
/// </summary>
|
||||
/// <param name="api">The <see cref="ApiDescription"/>.</param>
|
||||
/// <param name="sampleDirection">The value indicating whether the sample is for a request or for a response.</param>
|
||||
/// <returns>The samples keyed by media type.</returns>
|
||||
public virtual IDictionary<MediaTypeHeaderValue, object> GetSample(ApiDescription api, SampleDirection sampleDirection)
|
||||
{
|
||||
if (api == null)
|
||||
{
|
||||
throw new ArgumentNullException("api");
|
||||
}
|
||||
string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName;
|
||||
string actionName = api.ActionDescriptor.ActionName;
|
||||
IEnumerable<string> parameterNames = api.ParameterDescriptions.Select(p => p.Name);
|
||||
Collection<MediaTypeFormatter> formatters;
|
||||
Type type = ResolveType(api, controllerName, actionName, parameterNames, sampleDirection, out formatters);
|
||||
var samples = new Dictionary<MediaTypeHeaderValue, object>();
|
||||
|
||||
// Use the samples provided directly for actions
|
||||
var actionSamples = GetAllActionSamples(controllerName, actionName, parameterNames, sampleDirection);
|
||||
foreach (var actionSample in actionSamples)
|
||||
{
|
||||
samples.Add(actionSample.Key.MediaType, WrapSampleIfString(actionSample.Value));
|
||||
}
|
||||
|
||||
// Do the sample generation based on formatters only if an action doesn't return an HttpResponseMessage.
|
||||
// Here we cannot rely on formatters because we don't know what's in the HttpResponseMessage, it might not even use formatters.
|
||||
if (type != null && !typeof(HttpResponseMessage).IsAssignableFrom(type))
|
||||
{
|
||||
object sampleObject = GetSampleObject(type);
|
||||
foreach (var formatter in formatters)
|
||||
{
|
||||
foreach (MediaTypeHeaderValue mediaType in formatter.SupportedMediaTypes)
|
||||
{
|
||||
if (!samples.ContainsKey(mediaType))
|
||||
{
|
||||
object sample = GetActionSample(controllerName, actionName, parameterNames, type, formatter, mediaType, sampleDirection);
|
||||
|
||||
// If no sample found, try generate sample using formatter and sample object
|
||||
if (sample == null && sampleObject != null)
|
||||
{
|
||||
sample = WriteSampleObjectUsingFormatter(formatter, sampleObject, type, mediaType);
|
||||
}
|
||||
|
||||
samples.Add(mediaType, WrapSampleIfString(sample));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return samples;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Search for samples that are provided directly through <see cref="ActionSamples"/>.
|
||||
/// </summary>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
/// <param name="type">The CLR type.</param>
|
||||
/// <param name="formatter">The formatter.</param>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="sampleDirection">The value indicating whether the sample is for a request or for a response.</param>
|
||||
/// <returns>The sample that matches the parameters.</returns>
|
||||
public virtual object GetActionSample(string controllerName, string actionName, IEnumerable<string> parameterNames, Type type, MediaTypeFormatter formatter, MediaTypeHeaderValue mediaType, SampleDirection sampleDirection)
|
||||
{
|
||||
object sample;
|
||||
|
||||
// First, try to get the sample provided for the specified mediaType, sampleDirection, controllerName, actionName and parameterNames.
|
||||
// If not found, try to get the sample provided for the specified mediaType, sampleDirection, controllerName and actionName regardless of the parameterNames.
|
||||
// If still not found, try to get the sample provided for the specified mediaType and type.
|
||||
// Finally, try to get the sample provided for the specified mediaType.
|
||||
if (ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, parameterNames), out sample) ||
|
||||
ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, new[] { "*" }), out sample) ||
|
||||
ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, type), out sample) ||
|
||||
ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType), out sample))
|
||||
{
|
||||
return sample;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sample object that will be serialized by the formatters.
|
||||
/// First, it will look at the <see cref="SampleObjects"/>. If no sample object is found, it will try to create
|
||||
/// one using <see cref="DefaultSampleObjectFactory"/> (which wraps an <see cref="ObjectGenerator"/>) and other
|
||||
/// factories in <see cref="SampleObjectFactories"/>.
|
||||
/// </summary>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <returns>The sample object.</returns>
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes",
|
||||
Justification = "Even if all items in SampleObjectFactories throw, problem will be visible as missing sample.")]
|
||||
public virtual object GetSampleObject(Type type)
|
||||
{
|
||||
object sampleObject;
|
||||
|
||||
if (!SampleObjects.TryGetValue(type, out sampleObject))
|
||||
{
|
||||
// No specific object available, try our factories.
|
||||
foreach (Func<HelpPageSampleGenerator, Type, object> factory in SampleObjectFactories)
|
||||
{
|
||||
if (factory == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
sampleObject = factory(this, type);
|
||||
if (sampleObject != null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Ignore any problems encountered in the factory; go on to the next one (if any).
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sampleObject;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolves the actual type of <see cref="System.Net.Http.ObjectContent{T}"/> passed to the <see cref="System.Net.Http.HttpRequestMessage"/> in an action.
|
||||
/// </summary>
|
||||
/// <param name="api">The <see cref="ApiDescription"/>.</param>
|
||||
/// <returns>The type.</returns>
|
||||
public virtual Type ResolveHttpRequestMessageType(ApiDescription api)
|
||||
{
|
||||
string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName;
|
||||
string actionName = api.ActionDescriptor.ActionName;
|
||||
IEnumerable<string> parameterNames = api.ParameterDescriptions.Select(p => p.Name);
|
||||
Collection<MediaTypeFormatter> formatters;
|
||||
return ResolveType(api, controllerName, actionName, parameterNames, SampleDirection.Request, out formatters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolves the type of the action parameter or return value when <see cref="HttpRequestMessage"/> or <see cref="HttpResponseMessage"/> is used.
|
||||
/// </summary>
|
||||
/// <param name="api">The <see cref="ApiDescription"/>.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
/// <param name="sampleDirection">The value indicating whether the sample is for a request or a response.</param>
|
||||
/// <param name="formatters">The formatters.</param>
|
||||
[SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", Justification = "This is only used in advanced scenarios.")]
|
||||
public virtual Type ResolveType(ApiDescription api, string controllerName, string actionName, IEnumerable<string> parameterNames, SampleDirection sampleDirection, out Collection<MediaTypeFormatter> formatters)
|
||||
{
|
||||
if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))
|
||||
{
|
||||
throw new InvalidEnumArgumentException("sampleDirection", (int)sampleDirection, typeof(SampleDirection));
|
||||
}
|
||||
if (api == null)
|
||||
{
|
||||
throw new ArgumentNullException("api");
|
||||
}
|
||||
Type type;
|
||||
if (ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, parameterNames), out type) ||
|
||||
ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, new[] { "*" }), out type))
|
||||
{
|
||||
// Re-compute the supported formatters based on type
|
||||
Collection<MediaTypeFormatter> newFormatters = new Collection<MediaTypeFormatter>();
|
||||
foreach (var formatter in api.ActionDescriptor.Configuration.Formatters)
|
||||
{
|
||||
if (IsFormatSupported(sampleDirection, formatter, type))
|
||||
{
|
||||
newFormatters.Add(formatter);
|
||||
}
|
||||
}
|
||||
formatters = newFormatters;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (sampleDirection)
|
||||
{
|
||||
case SampleDirection.Request:
|
||||
ApiParameterDescription requestBodyParameter = api.ParameterDescriptions.FirstOrDefault(p => p.Source == ApiParameterSource.FromBody);
|
||||
type = requestBodyParameter == null ? null : requestBodyParameter.ParameterDescriptor.ParameterType;
|
||||
formatters = api.SupportedRequestBodyFormatters;
|
||||
break;
|
||||
case SampleDirection.Response:
|
||||
default:
|
||||
type = api.ResponseDescription.ResponseType ?? api.ResponseDescription.DeclaredType;
|
||||
formatters = api.SupportedResponseFormatters;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the sample object using formatter.
|
||||
/// </summary>
|
||||
/// <param name="formatter">The formatter.</param>
|
||||
/// <param name="value">The value.</param>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <param name="mediaType">Type of the media.</param>
|
||||
/// <returns></returns>
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "The exception is recorded as InvalidSample.")]
|
||||
public virtual object WriteSampleObjectUsingFormatter(MediaTypeFormatter formatter, object value, Type type, MediaTypeHeaderValue mediaType)
|
||||
{
|
||||
if (formatter == null)
|
||||
{
|
||||
throw new ArgumentNullException("formatter");
|
||||
}
|
||||
if (mediaType == null)
|
||||
{
|
||||
throw new ArgumentNullException("mediaType");
|
||||
}
|
||||
|
||||
object sample = String.Empty;
|
||||
MemoryStream ms = null;
|
||||
HttpContent content = null;
|
||||
try
|
||||
{
|
||||
if (formatter.CanWriteType(type))
|
||||
{
|
||||
ms = new MemoryStream();
|
||||
content = new ObjectContent(type, value, formatter, mediaType);
|
||||
formatter.WriteToStreamAsync(type, value, ms, content, null).Wait();
|
||||
ms.Position = 0;
|
||||
StreamReader reader = new StreamReader(ms);
|
||||
string serializedSampleString = reader.ReadToEnd();
|
||||
if (mediaType.MediaType.ToUpperInvariant().Contains("XML"))
|
||||
{
|
||||
serializedSampleString = TryFormatXml(serializedSampleString);
|
||||
}
|
||||
else if (mediaType.MediaType.ToUpperInvariant().Contains("JSON"))
|
||||
{
|
||||
serializedSampleString = TryFormatJson(serializedSampleString);
|
||||
}
|
||||
|
||||
sample = new TextSample(serializedSampleString);
|
||||
}
|
||||
else
|
||||
{
|
||||
sample = new InvalidSample(String.Format(
|
||||
CultureInfo.CurrentCulture,
|
||||
"Failed to generate the sample for media type '{0}'. Cannot use formatter '{1}' to write type '{2}'.",
|
||||
mediaType,
|
||||
formatter.GetType().Name,
|
||||
type.Name));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
sample = new InvalidSample(String.Format(
|
||||
CultureInfo.CurrentCulture,
|
||||
"An exception has occurred while using the formatter '{0}' to generate sample for media type '{1}'. Exception message: {2}",
|
||||
formatter.GetType().Name,
|
||||
mediaType.MediaType,
|
||||
UnwrapException(e).Message));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (ms != null)
|
||||
{
|
||||
ms.Dispose();
|
||||
}
|
||||
if (content != null)
|
||||
{
|
||||
content.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
return sample;
|
||||
}
|
||||
|
||||
internal static Exception UnwrapException(Exception exception)
|
||||
{
|
||||
AggregateException aggregateException = exception as AggregateException;
|
||||
if (aggregateException != null)
|
||||
{
|
||||
return aggregateException.Flatten().InnerException;
|
||||
}
|
||||
return exception;
|
||||
}
|
||||
|
||||
// Default factory for sample objects
|
||||
private static object DefaultSampleObjectFactory(HelpPageSampleGenerator sampleGenerator, Type type)
|
||||
{
|
||||
// Try to create a default sample object
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
return objectGenerator.GenerateObject(type);
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Handling the failure by returning the original string.")]
|
||||
private static string TryFormatJson(string str)
|
||||
{
|
||||
try
|
||||
{
|
||||
object parsedJson = JsonConvert.DeserializeObject(str);
|
||||
return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// can't parse JSON, return the original string
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Handling the failure by returning the original string.")]
|
||||
private static string TryFormatXml(string str)
|
||||
{
|
||||
try
|
||||
{
|
||||
XDocument xml = XDocument.Parse(str);
|
||||
return xml.ToString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// can't parse XML, return the original string
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsFormatSupported(SampleDirection sampleDirection, MediaTypeFormatter formatter, Type type)
|
||||
{
|
||||
switch (sampleDirection)
|
||||
{
|
||||
case SampleDirection.Request:
|
||||
return formatter.CanReadType(type);
|
||||
case SampleDirection.Response:
|
||||
return formatter.CanWriteType(type);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private IEnumerable<KeyValuePair<HelpPageSampleKey, object>> GetAllActionSamples(string controllerName, string actionName, IEnumerable<string> parameterNames, SampleDirection sampleDirection)
|
||||
{
|
||||
HashSet<string> parameterNamesSet = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var sample in ActionSamples)
|
||||
{
|
||||
HelpPageSampleKey sampleKey = sample.Key;
|
||||
if (String.Equals(controllerName, sampleKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&
|
||||
String.Equals(actionName, sampleKey.ActionName, StringComparison.OrdinalIgnoreCase) &&
|
||||
(sampleKey.ParameterNames.SetEquals(new[] { "*" }) || parameterNamesSet.SetEquals(sampleKey.ParameterNames)) &&
|
||||
sampleDirection == sampleKey.SampleDirection)
|
||||
{
|
||||
yield return sample;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static object WrapSampleIfString(object sample)
|
||||
{
|
||||
string stringSample = sample as string;
|
||||
if (stringSample != null)
|
||||
{
|
||||
return new TextSample(stringSample);
|
||||
}
|
||||
|
||||
return sample;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,172 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// This is used to identify the place where the sample should be applied.
|
||||
/// </summary>
|
||||
public class HelpPageSampleKey
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="HelpPageSampleKey"/> based on media type.
|
||||
/// </summary>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
public HelpPageSampleKey(MediaTypeHeaderValue mediaType)
|
||||
{
|
||||
if (mediaType == null)
|
||||
{
|
||||
throw new ArgumentNullException("mediaType");
|
||||
}
|
||||
|
||||
ActionName = String.Empty;
|
||||
ControllerName = String.Empty;
|
||||
MediaType = mediaType;
|
||||
ParameterNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="HelpPageSampleKey"/> based on media type and CLR type.
|
||||
/// </summary>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="type">The CLR type.</param>
|
||||
public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type)
|
||||
: this(mediaType)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
throw new ArgumentNullException("type");
|
||||
}
|
||||
|
||||
ParameterType = type;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="HelpPageSampleKey"/> based on <see cref="SampleDirection"/>, controller name, action name and parameter names.
|
||||
/// </summary>
|
||||
/// <param name="sampleDirection">The <see cref="SampleDirection"/>.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
public HelpPageSampleKey(SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)
|
||||
{
|
||||
if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))
|
||||
{
|
||||
throw new InvalidEnumArgumentException("sampleDirection", (int)sampleDirection, typeof(SampleDirection));
|
||||
}
|
||||
if (controllerName == null)
|
||||
{
|
||||
throw new ArgumentNullException("controllerName");
|
||||
}
|
||||
if (actionName == null)
|
||||
{
|
||||
throw new ArgumentNullException("actionName");
|
||||
}
|
||||
if (parameterNames == null)
|
||||
{
|
||||
throw new ArgumentNullException("parameterNames");
|
||||
}
|
||||
|
||||
ControllerName = controllerName;
|
||||
ActionName = actionName;
|
||||
ParameterNames = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);
|
||||
SampleDirection = sampleDirection;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="HelpPageSampleKey"/> based on media type, <see cref="SampleDirection"/>, controller name, action name and parameter names.
|
||||
/// </summary>
|
||||
/// <param name="mediaType">The media type.</param>
|
||||
/// <param name="sampleDirection">The <see cref="SampleDirection"/>.</param>
|
||||
/// <param name="controllerName">Name of the controller.</param>
|
||||
/// <param name="actionName">Name of the action.</param>
|
||||
/// <param name="parameterNames">The parameter names.</param>
|
||||
public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)
|
||||
: this(sampleDirection, controllerName, actionName, parameterNames)
|
||||
{
|
||||
if (mediaType == null)
|
||||
{
|
||||
throw new ArgumentNullException("mediaType");
|
||||
}
|
||||
|
||||
MediaType = mediaType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the controller.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The name of the controller.
|
||||
/// </value>
|
||||
public string ControllerName { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the action.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The name of the action.
|
||||
/// </value>
|
||||
public string ActionName { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the media type.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The media type.
|
||||
/// </value>
|
||||
public MediaTypeHeaderValue MediaType { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the parameter names.
|
||||
/// </summary>
|
||||
public HashSet<string> ParameterNames { get; private set; }
|
||||
|
||||
public Type ParameterType { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="SampleDirection"/>.
|
||||
/// </summary>
|
||||
public SampleDirection? SampleDirection { get; private set; }
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
HelpPageSampleKey otherKey = obj as HelpPageSampleKey;
|
||||
if (otherKey == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return String.Equals(ControllerName, otherKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&
|
||||
String.Equals(ActionName, otherKey.ActionName, StringComparison.OrdinalIgnoreCase) &&
|
||||
(MediaType == otherKey.MediaType || (MediaType != null && MediaType.Equals(otherKey.MediaType))) &&
|
||||
ParameterType == otherKey.ParameterType &&
|
||||
SampleDirection == otherKey.SampleDirection &&
|
||||
ParameterNames.SetEquals(otherKey.ParameterNames);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
int hashCode = ControllerName.ToUpperInvariant().GetHashCode() ^ ActionName.ToUpperInvariant().GetHashCode();
|
||||
if (MediaType != null)
|
||||
{
|
||||
hashCode ^= MediaType.GetHashCode();
|
||||
}
|
||||
if (SampleDirection != null)
|
||||
{
|
||||
hashCode ^= SampleDirection.GetHashCode();
|
||||
}
|
||||
if (ParameterType != null)
|
||||
{
|
||||
hashCode ^= ParameterType.GetHashCode();
|
||||
}
|
||||
foreach (string parameterName in ParameterNames)
|
||||
{
|
||||
hashCode ^= parameterName.ToUpperInvariant().GetHashCode();
|
||||
}
|
||||
|
||||
return hashCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
using System;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// This represents an image sample on the help page. There's a display template named ImageSample associated with this class.
|
||||
/// </summary>
|
||||
public class ImageSample
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ImageSample"/> class.
|
||||
/// </summary>
|
||||
/// <param name="src">The URL of an image.</param>
|
||||
public ImageSample(string src)
|
||||
{
|
||||
if (src == null)
|
||||
{
|
||||
throw new ArgumentNullException("src");
|
||||
}
|
||||
Src = src;
|
||||
}
|
||||
|
||||
public string Src { get; private set; }
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
ImageSample other = obj as ImageSample;
|
||||
return other != null && Src == other.Src;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Src.GetHashCode();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Src;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
using System;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// This represents an invalid sample on the help page. There's a display template named InvalidSample associated with this class.
|
||||
/// </summary>
|
||||
public class InvalidSample
|
||||
{
|
||||
public InvalidSample(string errorMessage)
|
||||
{
|
||||
if (errorMessage == null)
|
||||
{
|
||||
throw new ArgumentNullException("errorMessage");
|
||||
}
|
||||
ErrorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public string ErrorMessage { get; private set; }
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
InvalidSample other = obj as InvalidSample;
|
||||
return other != null && ErrorMessage == other.ErrorMessage;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return ErrorMessage.GetHashCode();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return ErrorMessage;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,456 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// This class will create an object of a given type and populate it with sample data.
|
||||
/// </summary>
|
||||
public class ObjectGenerator
|
||||
{
|
||||
internal const int DefaultCollectionSize = 2;
|
||||
private readonly SimpleTypeObjectGenerator SimpleObjectGenerator = new SimpleTypeObjectGenerator();
|
||||
|
||||
/// <summary>
|
||||
/// Generates an object for a given type. The type needs to be public, have a public default constructor and settable public properties/fields. Currently it supports the following types:
|
||||
/// Simple types: <see cref="int"/>, <see cref="string"/>, <see cref="Enum"/>, <see cref="DateTime"/>, <see cref="Uri"/>, etc.
|
||||
/// Complex types: POCO types.
|
||||
/// Nullables: <see cref="Nullable{T}"/>.
|
||||
/// Arrays: arrays of simple types or complex types.
|
||||
/// Key value pairs: <see cref="KeyValuePair{TKey,TValue}"/>
|
||||
/// Tuples: <see cref="Tuple{T1}"/>, <see cref="Tuple{T1,T2}"/>, etc
|
||||
/// Dictionaries: <see cref="IDictionary{TKey,TValue}"/> or anything deriving from <see cref="IDictionary{TKey,TValue}"/>.
|
||||
/// Collections: <see cref="IList{T}"/>, <see cref="IEnumerable{T}"/>, <see cref="ICollection{T}"/>, <see cref="IList"/>, <see cref="IEnumerable"/>, <see cref="ICollection"/> or anything deriving from <see cref="ICollection{T}"/> or <see cref="IList"/>.
|
||||
/// Queryables: <see cref="IQueryable"/>, <see cref="IQueryable{T}"/>.
|
||||
/// </summary>
|
||||
/// <param name="type">The type.</param>
|
||||
/// <returns>An object of the given type.</returns>
|
||||
public object GenerateObject(Type type)
|
||||
{
|
||||
return GenerateObject(type, new Dictionary<Type, object>());
|
||||
}
|
||||
|
||||
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Here we just want to return null if anything goes wrong.")]
|
||||
private object GenerateObject(Type type, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (SimpleTypeObjectGenerator.CanGenerateObject(type))
|
||||
{
|
||||
return SimpleObjectGenerator.GenerateObject(type);
|
||||
}
|
||||
|
||||
if (type.IsArray)
|
||||
{
|
||||
return GenerateArray(type, DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (type.IsGenericType)
|
||||
{
|
||||
return GenerateGenericType(type, DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (type == typeof(IDictionary))
|
||||
{
|
||||
return GenerateDictionary(typeof(Hashtable), DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (typeof(IDictionary).IsAssignableFrom(type))
|
||||
{
|
||||
return GenerateDictionary(type, DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (type == typeof(IList) ||
|
||||
type == typeof(IEnumerable) ||
|
||||
type == typeof(ICollection))
|
||||
{
|
||||
return GenerateCollection(typeof(ArrayList), DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (typeof(IList).IsAssignableFrom(type))
|
||||
{
|
||||
return GenerateCollection(type, DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (type == typeof(IQueryable))
|
||||
{
|
||||
return GenerateQueryable(type, DefaultCollectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (type.IsEnum)
|
||||
{
|
||||
return GenerateEnum(type);
|
||||
}
|
||||
|
||||
if (type.IsPublic || type.IsNestedPublic)
|
||||
{
|
||||
return GenerateComplexObject(type, createdObjectReferences);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Returns null if anything fails
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static object GenerateGenericType(Type type, int collectionSize, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type genericTypeDefinition = type.GetGenericTypeDefinition();
|
||||
if (genericTypeDefinition == typeof(Nullable<>))
|
||||
{
|
||||
return GenerateNullable(type, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (genericTypeDefinition == typeof(KeyValuePair<,>))
|
||||
{
|
||||
return GenerateKeyValuePair(type, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (IsTuple(genericTypeDefinition))
|
||||
{
|
||||
return GenerateTuple(type, createdObjectReferences);
|
||||
}
|
||||
|
||||
Type[] genericArguments = type.GetGenericArguments();
|
||||
if (genericArguments.Length == 1)
|
||||
{
|
||||
if (genericTypeDefinition == typeof(IList<>) ||
|
||||
genericTypeDefinition == typeof(IEnumerable<>) ||
|
||||
genericTypeDefinition == typeof(ICollection<>))
|
||||
{
|
||||
Type collectionType = typeof(List<>).MakeGenericType(genericArguments);
|
||||
return GenerateCollection(collectionType, collectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
if (genericTypeDefinition == typeof(IQueryable<>))
|
||||
{
|
||||
return GenerateQueryable(type, collectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
Type closedCollectionType = typeof(ICollection<>).MakeGenericType(genericArguments[0]);
|
||||
if (closedCollectionType.IsAssignableFrom(type))
|
||||
{
|
||||
return GenerateCollection(type, collectionSize, createdObjectReferences);
|
||||
}
|
||||
}
|
||||
|
||||
if (genericArguments.Length == 2)
|
||||
{
|
||||
if (genericTypeDefinition == typeof(IDictionary<,>))
|
||||
{
|
||||
Type dictionaryType = typeof(Dictionary<,>).MakeGenericType(genericArguments);
|
||||
return GenerateDictionary(dictionaryType, collectionSize, createdObjectReferences);
|
||||
}
|
||||
|
||||
Type closedDictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments[0], genericArguments[1]);
|
||||
if (closedDictionaryType.IsAssignableFrom(type))
|
||||
{
|
||||
return GenerateDictionary(type, collectionSize, createdObjectReferences);
|
||||
}
|
||||
}
|
||||
|
||||
if (type.IsPublic || type.IsNestedPublic)
|
||||
{
|
||||
return GenerateComplexObject(type, createdObjectReferences);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static object GenerateTuple(Type type, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type[] genericArgs = type.GetGenericArguments();
|
||||
object[] parameterValues = new object[genericArgs.Length];
|
||||
bool failedToCreateTuple = true;
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
for (int i = 0; i < genericArgs.Length; i++)
|
||||
{
|
||||
parameterValues[i] = objectGenerator.GenerateObject(genericArgs[i], createdObjectReferences);
|
||||
failedToCreateTuple &= parameterValues[i] == null;
|
||||
}
|
||||
if (failedToCreateTuple)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
object result = Activator.CreateInstance(type, parameterValues);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool IsTuple(Type genericTypeDefinition)
|
||||
{
|
||||
return genericTypeDefinition == typeof(Tuple<>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,,>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,,,>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,,,,>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,,,,,>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,,,,,,>) ||
|
||||
genericTypeDefinition == typeof(Tuple<,,,,,,,>);
|
||||
}
|
||||
|
||||
private static object GenerateKeyValuePair(Type keyValuePairType, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type[] genericArgs = keyValuePairType.GetGenericArguments();
|
||||
Type typeK = genericArgs[0];
|
||||
Type typeV = genericArgs[1];
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
object keyObject = objectGenerator.GenerateObject(typeK, createdObjectReferences);
|
||||
object valueObject = objectGenerator.GenerateObject(typeV, createdObjectReferences);
|
||||
if (keyObject == null && valueObject == null)
|
||||
{
|
||||
// Failed to create key and values
|
||||
return null;
|
||||
}
|
||||
object result = Activator.CreateInstance(keyValuePairType, keyObject, valueObject);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static object GenerateArray(Type arrayType, int size, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type type = arrayType.GetElementType();
|
||||
Array result = Array.CreateInstance(type, size);
|
||||
bool areAllElementsNull = true;
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
object element = objectGenerator.GenerateObject(type, createdObjectReferences);
|
||||
result.SetValue(element, i);
|
||||
areAllElementsNull &= element == null;
|
||||
}
|
||||
|
||||
if (areAllElementsNull)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static object GenerateDictionary(Type dictionaryType, int size, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type typeK = typeof(object);
|
||||
Type typeV = typeof(object);
|
||||
if (dictionaryType.IsGenericType)
|
||||
{
|
||||
Type[] genericArgs = dictionaryType.GetGenericArguments();
|
||||
typeK = genericArgs[0];
|
||||
typeV = genericArgs[1];
|
||||
}
|
||||
|
||||
object result = Activator.CreateInstance(dictionaryType);
|
||||
MethodInfo addMethod = dictionaryType.GetMethod("Add") ?? dictionaryType.GetMethod("TryAdd");
|
||||
MethodInfo containsMethod = dictionaryType.GetMethod("Contains") ?? dictionaryType.GetMethod("ContainsKey");
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
object newKey = objectGenerator.GenerateObject(typeK, createdObjectReferences);
|
||||
if (newKey == null)
|
||||
{
|
||||
// Cannot generate a valid key
|
||||
return null;
|
||||
}
|
||||
|
||||
bool containsKey = (bool)containsMethod.Invoke(result, new object[] { newKey });
|
||||
if (!containsKey)
|
||||
{
|
||||
object newValue = objectGenerator.GenerateObject(typeV, createdObjectReferences);
|
||||
addMethod.Invoke(result, new object[] { newKey, newValue });
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static object GenerateEnum(Type enumType)
|
||||
{
|
||||
Array possibleValues = Enum.GetValues(enumType);
|
||||
if (possibleValues.Length > 0)
|
||||
{
|
||||
return possibleValues.GetValue(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static object GenerateQueryable(Type queryableType, int size, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
bool isGeneric = queryableType.IsGenericType;
|
||||
object list;
|
||||
if (isGeneric)
|
||||
{
|
||||
Type listType = typeof(List<>).MakeGenericType(queryableType.GetGenericArguments());
|
||||
list = GenerateCollection(listType, size, createdObjectReferences);
|
||||
}
|
||||
else
|
||||
{
|
||||
list = GenerateArray(typeof(object[]), size, createdObjectReferences);
|
||||
}
|
||||
if (list == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (isGeneric)
|
||||
{
|
||||
Type argumentType = typeof(IEnumerable<>).MakeGenericType(queryableType.GetGenericArguments());
|
||||
MethodInfo asQueryableMethod = typeof(Queryable).GetMethod("AsQueryable", new[] { argumentType });
|
||||
return asQueryableMethod.Invoke(null, new[] { list });
|
||||
}
|
||||
|
||||
return Queryable.AsQueryable((IEnumerable)list);
|
||||
}
|
||||
|
||||
private static object GenerateCollection(Type collectionType, int size, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type type = collectionType.IsGenericType ?
|
||||
collectionType.GetGenericArguments()[0] :
|
||||
typeof(object);
|
||||
object result = Activator.CreateInstance(collectionType);
|
||||
MethodInfo addMethod = collectionType.GetMethod("Add");
|
||||
bool areAllElementsNull = true;
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
object element = objectGenerator.GenerateObject(type, createdObjectReferences);
|
||||
addMethod.Invoke(result, new object[] { element });
|
||||
areAllElementsNull &= element == null;
|
||||
}
|
||||
|
||||
if (areAllElementsNull)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static object GenerateNullable(Type nullableType, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
Type type = nullableType.GetGenericArguments()[0];
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
return objectGenerator.GenerateObject(type, createdObjectReferences);
|
||||
}
|
||||
|
||||
private static object GenerateComplexObject(Type type, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
object result = null;
|
||||
|
||||
if (createdObjectReferences.TryGetValue(type, out result))
|
||||
{
|
||||
// The object has been created already, just return it. This will handle the circular reference case.
|
||||
return result;
|
||||
}
|
||||
|
||||
if (type.IsValueType)
|
||||
{
|
||||
result = Activator.CreateInstance(type);
|
||||
}
|
||||
else
|
||||
{
|
||||
ConstructorInfo defaultCtor = type.GetConstructor(Type.EmptyTypes);
|
||||
if (defaultCtor == null)
|
||||
{
|
||||
// Cannot instantiate the type because it doesn't have a default constructor
|
||||
return null;
|
||||
}
|
||||
|
||||
result = defaultCtor.Invoke(new object[0]);
|
||||
}
|
||||
createdObjectReferences.Add(type, result);
|
||||
SetPublicProperties(type, result, createdObjectReferences);
|
||||
SetPublicFields(type, result, createdObjectReferences);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void SetPublicProperties(Type type, object obj, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
foreach (PropertyInfo property in properties)
|
||||
{
|
||||
if (property.CanWrite)
|
||||
{
|
||||
object propertyValue = objectGenerator.GenerateObject(property.PropertyType, createdObjectReferences);
|
||||
property.SetValue(obj, propertyValue, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetPublicFields(Type type, object obj, Dictionary<Type, object> createdObjectReferences)
|
||||
{
|
||||
FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
|
||||
ObjectGenerator objectGenerator = new ObjectGenerator();
|
||||
foreach (FieldInfo field in fields)
|
||||
{
|
||||
object fieldValue = objectGenerator.GenerateObject(field.FieldType, createdObjectReferences);
|
||||
field.SetValue(obj, fieldValue);
|
||||
}
|
||||
}
|
||||
|
||||
private class SimpleTypeObjectGenerator
|
||||
{
|
||||
private long _index = 0;
|
||||
private static readonly Dictionary<Type, Func<long, object>> DefaultGenerators = InitializeGenerators();
|
||||
|
||||
[SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "These are simple type factories and cannot be split up.")]
|
||||
private static Dictionary<Type, Func<long, object>> InitializeGenerators()
|
||||
{
|
||||
return new Dictionary<Type, Func<long, object>>
|
||||
{
|
||||
{ typeof(Boolean), index => true },
|
||||
{ typeof(Byte), index => (Byte)64 },
|
||||
{ typeof(Char), index => (Char)65 },
|
||||
{ typeof(DateTime), index => DateTime.Now },
|
||||
{ typeof(DateTimeOffset), index => new DateTimeOffset(DateTime.Now) },
|
||||
{ typeof(DBNull), index => DBNull.Value },
|
||||
{ typeof(Decimal), index => (Decimal)index },
|
||||
{ typeof(Double), index => (Double)(index + 0.1) },
|
||||
{ typeof(Guid), index => Guid.NewGuid() },
|
||||
{ typeof(Int16), index => (Int16)(index % Int16.MaxValue) },
|
||||
{ typeof(Int32), index => (Int32)(index % Int32.MaxValue) },
|
||||
{ typeof(Int64), index => (Int64)index },
|
||||
{ typeof(Object), index => new object() },
|
||||
{ typeof(SByte), index => (SByte)64 },
|
||||
{ typeof(Single), index => (Single)(index + 0.1) },
|
||||
{
|
||||
typeof(String), index =>
|
||||
{
|
||||
return String.Format(CultureInfo.CurrentCulture, "sample string {0}", index);
|
||||
}
|
||||
},
|
||||
{
|
||||
typeof(TimeSpan), index =>
|
||||
{
|
||||
return TimeSpan.FromTicks(1234567);
|
||||
}
|
||||
},
|
||||
{ typeof(UInt16), index => (UInt16)(index % UInt16.MaxValue) },
|
||||
{ typeof(UInt32), index => (UInt32)(index % UInt32.MaxValue) },
|
||||
{ typeof(UInt64), index => (UInt64)index },
|
||||
{
|
||||
typeof(Uri), index =>
|
||||
{
|
||||
return new Uri(String.Format(CultureInfo.CurrentCulture, "http://webapihelppage{0}.com", index));
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
public static bool CanGenerateObject(Type type)
|
||||
{
|
||||
return DefaultGenerators.ContainsKey(type);
|
||||
}
|
||||
|
||||
public object GenerateObject(Type type)
|
||||
{
|
||||
return DefaultGenerators[type](++_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// Indicates whether the sample is used for request or response
|
||||
/// </summary>
|
||||
public enum SampleDirection
|
||||
{
|
||||
Request = 0,
|
||||
Response
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
using System;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// This represents a preformatted text sample on the help page. There's a display template named TextSample associated with this class.
|
||||
/// </summary>
|
||||
public class TextSample
|
||||
{
|
||||
public TextSample(string text)
|
||||
{
|
||||
if (text == null)
|
||||
{
|
||||
throw new ArgumentNullException("text");
|
||||
}
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public string Text { get; private set; }
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
TextSample other = obj as TextSample;
|
||||
return other != null && Text == other.Text;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Text.GetHashCode();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
22
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/Api.cshtml.pp
vendored
Normal file
22
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Help/Api.cshtml.pp
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
@using System.Web.Http
|
||||
@using $rootnamespace$.Areas.HelpPage.Models
|
||||
@model HelpPageApiModel
|
||||
|
||||
@{
|
||||
var description = Model.ApiDescription;
|
||||
ViewBag.Title = description.HttpMethod.Method + " " + description.RelativePath;
|
||||
}
|
||||
|
||||
<link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
|
||||
<div id="body" class="help-page">
|
||||
<section class="featured">
|
||||
<div class="content-wrapper">
|
||||
<p>
|
||||
@Html.ActionLink("Help Page Home", "Index")
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="content-wrapper main-content clear-fix">
|
||||
@Html.DisplayForModel()
|
||||
</section>
|
||||
</div>
|
||||
@ -0,0 +1,41 @@
|
||||
@using System.Web.Http
|
||||
@using System.Web.Http.Controllers
|
||||
@using System.Web.Http.Description
|
||||
@using $rootnamespace$.Areas.HelpPage
|
||||
@using $rootnamespace$.Areas.HelpPage.Models
|
||||
@model IGrouping<HttpControllerDescriptor, ApiDescription>
|
||||
|
||||
@{
|
||||
var controllerDocumentation = ViewBag.DocumentationProvider != null ?
|
||||
ViewBag.DocumentationProvider.GetDocumentation(Model.Key) :
|
||||
null;
|
||||
}
|
||||
|
||||
<h2 id="@Model.Key.ControllerName">@Model.Key.ControllerName</h2>
|
||||
@if (!String.IsNullOrEmpty(controllerDocumentation))
|
||||
{
|
||||
<p>@controllerDocumentation</p>
|
||||
}
|
||||
<table class="help-page-table">
|
||||
<thead>
|
||||
<tr><th>API</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var api in Model)
|
||||
{
|
||||
<tr>
|
||||
<td class="api-name"><a href="@Url.Action("Api", "Help", new { apiId = api.GetFriendlyId() })">@api.HttpMethod.Method @api.RelativePath</a></td>
|
||||
<td class="api-documentation">
|
||||
@if (api.Documentation != null)
|
||||
{
|
||||
<p>@api.Documentation</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>No documentation available.</p>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@ -0,0 +1,6 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model CollectionModelDescription
|
||||
@if (Model.ElementDescription is ComplexTypeModelDescription)
|
||||
{
|
||||
@Html.DisplayFor(m => m.ElementDescription)
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model ComplexTypeModelDescription
|
||||
@Html.DisplayFor(m => m.Properties, "Parameters")
|
||||
@ -0,0 +1,4 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model DictionaryModelDescription
|
||||
Dictionary of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.KeyModelDescription }) [key]
|
||||
and @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ValueModelDescription }) [value]
|
||||
@ -0,0 +1,24 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model EnumTypeModelDescription
|
||||
|
||||
<p>Possible enumeration values:</p>
|
||||
|
||||
<table class="help-page-table">
|
||||
<thead>
|
||||
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (EnumValueDescription value in Model.Values)
|
||||
{
|
||||
<tr>
|
||||
<td class="enum-name"><b>@value.Name</b></td>
|
||||
<td class="enum-value">
|
||||
<p>@value.Value</p>
|
||||
</td>
|
||||
<td class="enum-description">
|
||||
<p>@value.Documentation</p>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@ -0,0 +1,67 @@
|
||||
@using System.Web.Http
|
||||
@using System.Web.Http.Description
|
||||
@using $rootnamespace$.Areas.HelpPage.Models
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model HelpPageApiModel
|
||||
|
||||
@{
|
||||
ApiDescription description = Model.ApiDescription;
|
||||
}
|
||||
<h1>@description.HttpMethod.Method @description.RelativePath</h1>
|
||||
<div>
|
||||
<p>@description.Documentation</p>
|
||||
|
||||
<h2>Request Information</h2>
|
||||
|
||||
<h3>URI Parameters</h3>
|
||||
@Html.DisplayFor(m => m.UriParameters, "Parameters")
|
||||
|
||||
<h3>Body Parameters</h3>
|
||||
|
||||
<p>@Model.RequestDocumentation</p>
|
||||
|
||||
@if (Model.RequestModelDescription != null)
|
||||
{
|
||||
@Html.DisplayFor(m => m.RequestModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.RequestModelDescription })
|
||||
if (Model.RequestBodyParameters != null)
|
||||
{
|
||||
@Html.DisplayFor(m => m.RequestBodyParameters, "Parameters")
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>None.</p>
|
||||
}
|
||||
|
||||
@if (Model.SampleRequests.Count > 0)
|
||||
{
|
||||
<h3>Request Formats</h3>
|
||||
@Html.DisplayFor(m => m.SampleRequests, "Samples")
|
||||
}
|
||||
|
||||
<h2>Response Information</h2>
|
||||
|
||||
<h3>Resource Description</h3>
|
||||
|
||||
<p>@description.ResponseDescription.Documentation</p>
|
||||
|
||||
@if (Model.ResourceDescription != null)
|
||||
{
|
||||
@Html.DisplayFor(m => m.ResourceDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ResourceDescription })
|
||||
if (Model.ResourceProperties != null)
|
||||
{
|
||||
@Html.DisplayFor(m => m.ResourceProperties, "Parameters")
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>None.</p>
|
||||
}
|
||||
|
||||
@if (Model.SampleResponses.Count > 0)
|
||||
{
|
||||
<h3>Response Formats</h3>
|
||||
@Html.DisplayFor(m => m.SampleResponses, "Samples")
|
||||
}
|
||||
|
||||
</div>
|
||||
@ -0,0 +1,4 @@
|
||||
@using $rootnamespace$.Areas.HelpPage
|
||||
@model ImageSample
|
||||
|
||||
<img src="@Model.Src" />
|
||||
@ -0,0 +1,13 @@
|
||||
@using $rootnamespace$.Areas.HelpPage
|
||||
@model InvalidSample
|
||||
|
||||
@if (HttpContext.Current.IsDebuggingEnabled)
|
||||
{
|
||||
<div class="warning-message-container">
|
||||
<p>@Model.ErrorMessage</p>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>Sample not available.</p>
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model KeyValuePairModelDescription
|
||||
Pair of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.KeyModelDescription }) [key]
|
||||
and @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ValueModelDescription }) [value]
|
||||
@ -0,0 +1,26 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model Type
|
||||
@{
|
||||
ModelDescription modelDescription = ViewBag.modelDescription;
|
||||
if (modelDescription is ComplexTypeModelDescription || modelDescription is EnumTypeModelDescription)
|
||||
{
|
||||
if (Model == typeof(Object))
|
||||
{
|
||||
@:Object
|
||||
}
|
||||
else
|
||||
{
|
||||
@Html.ActionLink(modelDescription.Name, "ResourceModel", "Help", new { modelName = modelDescription.Name }, null)
|
||||
}
|
||||
}
|
||||
else if (modelDescription is CollectionModelDescription)
|
||||
{
|
||||
var collectionDescription = modelDescription as CollectionModelDescription;
|
||||
var elementDescription = collectionDescription.ElementDescription;
|
||||
@:Collection of @Html.DisplayFor(m => elementDescription.ModelType, "ModelDescriptionLink", new { modelDescription = elementDescription })
|
||||
}
|
||||
else
|
||||
{
|
||||
@Html.DisplayFor(m => modelDescription)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
@using System.Collections.Generic
|
||||
@using System.Collections.ObjectModel
|
||||
@using System.Web.Http.Description
|
||||
@using System.Threading
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model IList<ParameterDescription>
|
||||
|
||||
@if (Model.Count > 0)
|
||||
{
|
||||
<table class="help-page-table">
|
||||
<thead>
|
||||
<tr><th>Name</th><th>Description</th><th>Type</th><th>Additional information</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (ParameterDescription parameter in Model)
|
||||
{
|
||||
ModelDescription modelDescription = parameter.TypeDescription;
|
||||
<tr>
|
||||
<td class="parameter-name">@parameter.Name</td>
|
||||
<td class="parameter-documentation">
|
||||
<p>@parameter.Documentation</p>
|
||||
</td>
|
||||
<td class="parameter-type">
|
||||
@Html.DisplayFor(m => modelDescription.ModelType, "ModelDescriptionLink", new { modelDescription = modelDescription })
|
||||
</td>
|
||||
<td class="parameter-annotations">
|
||||
@if (parameter.Annotations.Count > 0)
|
||||
{
|
||||
foreach (var annotation in parameter.Annotations)
|
||||
{
|
||||
<p>@annotation.Documentation</p>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>None.</p>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>None.</p>
|
||||
}
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
@using System.Net.Http.Headers
|
||||
@model Dictionary<MediaTypeHeaderValue, object>
|
||||
|
||||
@{
|
||||
// Group the samples into a single tab if they are the same.
|
||||
Dictionary<string, object> samples = Model.GroupBy(pair => pair.Value).ToDictionary(
|
||||
pair => String.Join(", ", pair.Select(m => m.Key.ToString()).ToArray()),
|
||||
pair => pair.Key);
|
||||
var mediaTypes = samples.Keys;
|
||||
}
|
||||
<div>
|
||||
@foreach (var mediaType in mediaTypes)
|
||||
{
|
||||
<h4 class="sample-header">@mediaType</h4>
|
||||
<div class="sample-content">
|
||||
<span><b>Sample:</b></span>
|
||||
@{
|
||||
var sample = samples[mediaType];
|
||||
if (sample == null)
|
||||
{
|
||||
<p>Sample not available.</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
@Html.DisplayFor(s => sample);
|
||||
}
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
@ -0,0 +1,3 @@
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model SimpleTypeModelDescription
|
||||
@Model.Documentation
|
||||
@ -0,0 +1,6 @@
|
||||
@using $rootnamespace$.Areas.HelpPage
|
||||
@model TextSample
|
||||
|
||||
<pre class="wrapped">
|
||||
@Model.Text
|
||||
</pre>
|
||||
@ -0,0 +1,38 @@
|
||||
@using System.Web.Http
|
||||
@using System.Web.Http.Controllers
|
||||
@using System.Web.Http.Description
|
||||
@using System.Collections.ObjectModel
|
||||
@using $rootnamespace$.Areas.HelpPage.Models
|
||||
@model Collection<ApiDescription>
|
||||
|
||||
@{
|
||||
ViewBag.Title = "ASP.NET Web API Help Page";
|
||||
|
||||
// Group APIs by controller
|
||||
ILookup<HttpControllerDescriptor, ApiDescription> apiGroups = Model.ToLookup(api => api.ActionDescriptor.ControllerDescriptor);
|
||||
}
|
||||
|
||||
<link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
|
||||
<header class="help-page">
|
||||
<div class="content-wrapper">
|
||||
<div class="float-left">
|
||||
<h1>@ViewBag.Title</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div id="body" class="help-page">
|
||||
<section class="featured">
|
||||
<div class="content-wrapper">
|
||||
<h2>Introduction</h2>
|
||||
<p>
|
||||
Provide a general description of your APIs here.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="content-wrapper main-content clear-fix">
|
||||
@foreach (var group in apiGroups)
|
||||
{
|
||||
@Html.DisplayFor(m => group, "ApiGroup")
|
||||
}
|
||||
</section>
|
||||
</div>
|
||||
@ -0,0 +1,19 @@
|
||||
@using System.Web.Http
|
||||
@using $rootnamespace$.Areas.HelpPage.ModelDescriptions
|
||||
@model ModelDescription
|
||||
|
||||
<link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
|
||||
<div id="body" class="help-page">
|
||||
<section class="featured">
|
||||
<div class="content-wrapper">
|
||||
<p>
|
||||
@Html.ActionLink("Help Page Home", "Index")
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<h1>@Model.Name</h1>
|
||||
<p>@Model.Documentation</p>
|
||||
<section class="content-wrapper main-content clear-fix">
|
||||
@Html.DisplayFor(m => Model)
|
||||
</section>
|
||||
</div>
|
||||
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<title>@ViewBag.Title</title>
|
||||
@RenderSection("scripts", required: false)
|
||||
</head>
|
||||
<body>
|
||||
@RenderBody()
|
||||
</body>
|
||||
</html>
|
||||
41
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Web.config
vendored
Normal file
41
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Content/Areas/HelpPage/Views/Web.config
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
||||
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
|
||||
<system.web.webPages.razor>
|
||||
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
|
||||
<pages pageBaseType="System.Web.Mvc.WebViewPage">
|
||||
<namespaces>
|
||||
<add namespace="System.Web.Mvc" />
|
||||
<add namespace="System.Web.Mvc.Ajax" />
|
||||
<add namespace="System.Web.Mvc.Html" />
|
||||
<add namespace="System.Web.Routing" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
</system.web.webPages.razor>
|
||||
|
||||
<appSettings>
|
||||
<add key="webpages:Enabled" value="false" />
|
||||
</appSettings>
|
||||
|
||||
<system.web>
|
||||
<compilation debug="true">
|
||||
<assemblies>
|
||||
<add assembly="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
</assemblies>
|
||||
</compilation>
|
||||
</system.web>
|
||||
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<remove name="BlockViewHandler"/>
|
||||
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
|
||||
</handlers>
|
||||
</system.webServer>
|
||||
</configuration>
|
||||
@ -0,0 +1,4 @@
|
||||
@{
|
||||
// Change the Layout path below to blend the look and feel of the help page with your existing web pages.
|
||||
Layout = "~/Areas/HelpPage/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
@ -0,0 +1,161 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Web.Http.Controllers;
|
||||
using System.Web.Http.Description;
|
||||
using System.Xml.XPath;
|
||||
using $rootnamespace$.Areas.HelpPage.ModelDescriptions;
|
||||
|
||||
namespace $rootnamespace$.Areas.HelpPage
|
||||
{
|
||||
/// <summary>
|
||||
/// A custom <see cref="IDocumentationProvider"/> that reads the API documentation from an XML documentation file.
|
||||
/// </summary>
|
||||
public class XmlDocumentationProvider : IDocumentationProvider, IModelDocumentationProvider
|
||||
{
|
||||
private XPathNavigator _documentNavigator;
|
||||
private const string TypeExpression = "/doc/members/member[@name='T:{0}']";
|
||||
private const string MethodExpression = "/doc/members/member[@name='M:{0}']";
|
||||
private const string PropertyExpression = "/doc/members/member[@name='P:{0}']";
|
||||
private const string FieldExpression = "/doc/members/member[@name='F:{0}']";
|
||||
private const string ParameterExpression = "param[@name='{0}']";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="XmlDocumentationProvider"/> class.
|
||||
/// </summary>
|
||||
/// <param name="documentPath">The physical path to XML document.</param>
|
||||
public XmlDocumentationProvider(string documentPath)
|
||||
{
|
||||
if (documentPath == null)
|
||||
{
|
||||
throw new ArgumentNullException("documentPath");
|
||||
}
|
||||
XPathDocument xpath = new XPathDocument(documentPath);
|
||||
_documentNavigator = xpath.CreateNavigator();
|
||||
}
|
||||
|
||||
public string GetDocumentation(HttpControllerDescriptor controllerDescriptor)
|
||||
{
|
||||
XPathNavigator typeNode = GetTypeNode(controllerDescriptor.ControllerType);
|
||||
return GetTagValue(typeNode, "summary");
|
||||
}
|
||||
|
||||
public virtual string GetDocumentation(HttpActionDescriptor actionDescriptor)
|
||||
{
|
||||
XPathNavigator methodNode = GetMethodNode(actionDescriptor);
|
||||
return GetTagValue(methodNode, "summary");
|
||||
}
|
||||
|
||||
public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor)
|
||||
{
|
||||
ReflectedHttpParameterDescriptor reflectedParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor;
|
||||
if (reflectedParameterDescriptor != null)
|
||||
{
|
||||
XPathNavigator methodNode = GetMethodNode(reflectedParameterDescriptor.ActionDescriptor);
|
||||
if (methodNode != null)
|
||||
{
|
||||
string parameterName = reflectedParameterDescriptor.ParameterInfo.Name;
|
||||
XPathNavigator parameterNode = methodNode.SelectSingleNode(String.Format(CultureInfo.InvariantCulture, ParameterExpression, parameterName));
|
||||
if (parameterNode != null)
|
||||
{
|
||||
return parameterNode.Value.Trim();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public string GetResponseDocumentation(HttpActionDescriptor actionDescriptor)
|
||||
{
|
||||
XPathNavigator methodNode = GetMethodNode(actionDescriptor);
|
||||
return GetTagValue(methodNode, "returns");
|
||||
}
|
||||
|
||||
public string GetDocumentation(MemberInfo member)
|
||||
{
|
||||
string memberName = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", GetTypeName(member.DeclaringType), member.Name);
|
||||
string expression = member.MemberType == MemberTypes.Field ? FieldExpression : PropertyExpression;
|
||||
string selectExpression = String.Format(CultureInfo.InvariantCulture, expression, memberName);
|
||||
XPathNavigator propertyNode = _documentNavigator.SelectSingleNode(selectExpression);
|
||||
return GetTagValue(propertyNode, "summary");
|
||||
}
|
||||
|
||||
public string GetDocumentation(Type type)
|
||||
{
|
||||
XPathNavigator typeNode = GetTypeNode(type);
|
||||
return GetTagValue(typeNode, "summary");
|
||||
}
|
||||
|
||||
private XPathNavigator GetMethodNode(HttpActionDescriptor actionDescriptor)
|
||||
{
|
||||
ReflectedHttpActionDescriptor reflectedActionDescriptor = actionDescriptor as ReflectedHttpActionDescriptor;
|
||||
if (reflectedActionDescriptor != null)
|
||||
{
|
||||
string selectExpression = String.Format(CultureInfo.InvariantCulture, MethodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo));
|
||||
return _documentNavigator.SelectSingleNode(selectExpression);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static string GetMemberName(MethodInfo method)
|
||||
{
|
||||
string name = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", GetTypeName(method.DeclaringType), method.Name);
|
||||
ParameterInfo[] parameters = method.GetParameters();
|
||||
if (parameters.Length != 0)
|
||||
{
|
||||
string[] parameterTypeNames = parameters.Select(param => GetTypeName(param.ParameterType)).ToArray();
|
||||
name += String.Format(CultureInfo.InvariantCulture, "({0})", String.Join(",", parameterTypeNames));
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
private static string GetTagValue(XPathNavigator parentNode, string tagName)
|
||||
{
|
||||
if (parentNode != null)
|
||||
{
|
||||
XPathNavigator node = parentNode.SelectSingleNode(tagName);
|
||||
if (node != null)
|
||||
{
|
||||
return node.Value.Trim();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private XPathNavigator GetTypeNode(Type type)
|
||||
{
|
||||
string controllerTypeName = GetTypeName(type);
|
||||
string selectExpression = String.Format(CultureInfo.InvariantCulture, TypeExpression, controllerTypeName);
|
||||
return _documentNavigator.SelectSingleNode(selectExpression);
|
||||
}
|
||||
|
||||
private static string GetTypeName(Type type)
|
||||
{
|
||||
string name = type.FullName;
|
||||
if (type.IsGenericType)
|
||||
{
|
||||
// Format the generic type name to something like: Generic{System.Int32,System.String}
|
||||
Type genericType = type.GetGenericTypeDefinition();
|
||||
Type[] genericArguments = type.GetGenericArguments();
|
||||
string genericTypeName = genericType.FullName;
|
||||
|
||||
// Trim the generic parameter counts from the name
|
||||
genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`'));
|
||||
string[] argumentTypeNames = genericArguments.Select(t => GetTypeName(t)).ToArray();
|
||||
name = String.Format(CultureInfo.InvariantCulture, "{0}{{{1}}}", genericTypeName, String.Join(",", argumentTypeNames));
|
||||
}
|
||||
if (type.IsNested)
|
||||
{
|
||||
// Changing the nested type name from OuterType+InnerType to OuterType.InnerType to match the XML documentation syntax.
|
||||
name = name.Replace("+", ".");
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Microsoft.AspNet.WebApi.HelpPage.5.2.7.nupkg
vendored
Normal file
BIN
packages/Microsoft.AspNet.WebApi.HelpPage.5.2.7/Microsoft.AspNet.WebApi.HelpPage.5.2.7.nupkg
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user