├── .gitattributes ├── 9781484262542.jpg ├── CommandAPIClient ├── .vscode │ ├── launch.json │ └── tasks.json ├── AuthConfig.cs ├── CommandAPIClient.csproj ├── Program.cs ├── appsettings.json ├── bin │ └── Debug │ │ └── netcoreapp3.1 │ │ ├── CommandAPIClient.deps.json │ │ ├── CommandAPIClient.dll │ │ ├── CommandAPIClient.exe │ │ ├── CommandAPIClient.pdb │ │ ├── CommandAPIClient.runtimeconfig.dev.json │ │ ├── CommandAPIClient.runtimeconfig.json │ │ ├── Microsoft.Extensions.Configuration.Abstractions.dll │ │ ├── Microsoft.Extensions.Configuration.Binder.dll │ │ ├── Microsoft.Extensions.Configuration.FileExtensions.dll │ │ ├── Microsoft.Extensions.Configuration.Json.dll │ │ ├── Microsoft.Extensions.Configuration.dll │ │ ├── Microsoft.Extensions.FileProviders.Abstractions.dll │ │ ├── Microsoft.Extensions.FileProviders.Physical.dll │ │ ├── Microsoft.Extensions.FileSystemGlobbing.dll │ │ ├── Microsoft.Extensions.Primitives.dll │ │ └── Microsoft.Identity.Client.dll └── obj │ ├── CommandAPIClient.csproj.nuget.dgspec.json │ ├── CommandAPIClient.csproj.nuget.g.props │ ├── CommandAPIClient.csproj.nuget.g.targets │ ├── Debug │ └── netcoreapp3.1 │ │ ├── .NETCoreApp,Version=v3.1.AssemblyAttributes.cs │ │ ├── CommandAPIClient │ │ ├── CommandAPIClient.AssemblyInfo.cs │ │ ├── CommandAPIClient.AssemblyInfoInputs.cache │ │ ├── CommandAPIClient.assets.cache │ │ ├── CommandAPIClient.csproj.CopyComplete │ │ ├── CommandAPIClient.csproj.CoreCompileInputs.cache │ │ ├── CommandAPIClient.csproj.FileListAbsolute.txt │ │ ├── CommandAPIClient.csprojAssemblyReference.cache │ │ ├── CommandAPIClient.dll │ │ ├── CommandAPIClient.exe │ │ ├── CommandAPIClient.genruntimeconfig.cache │ │ └── CommandAPIClient.pdb │ ├── project.assets.json │ └── project.nuget.cache ├── CommandAPISolution ├── .gitignore ├── .vscode │ ├── launch.json │ └── tasks.json ├── CommandAPISolution.sln ├── azure-pipelines.yml ├── src │ └── CommandAPI │ │ ├── CommandAPI.csproj │ │ ├── Controllers │ │ └── CommandsController.cs │ │ ├── Data │ │ ├── CommandContext.cs │ │ ├── ICommandAPIRepo.cs │ │ ├── MockCommandAPIRepo.cs │ │ └── SqlCommandAPIRepo.cs │ │ ├── Dtos │ │ ├── CommandCreateDto.cs │ │ ├── CommandReadDto.cs │ │ └── CommandUpdateDto.cs │ │ ├── Migrations │ │ ├── 20200524224711_AddCommandsToDB.Designer.cs │ │ ├── 20200524224711_AddCommandsToDB.cs │ │ └── CommandContextModelSnapshot.cs │ │ ├── Models │ │ └── Command.cs │ │ ├── Profiles │ │ └── CommandsProfile.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json └── test │ └── CommandAPI.Tests │ ├── CommandAPI.Tests.csproj │ ├── CommandTests.cs │ └── CommandsControllerTests.cs ├── Contributing.md ├── LICENSE.txt └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /9781484262542.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/9781484262542.jpg -------------------------------------------------------------------------------- /CommandAPIClient/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to find out which attributes exist for C# debugging 3 | // Use hover for the description of the existing attributes 4 | // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": ".NET Core Launch (console)", 9 | "type": "coreclr", 10 | "request": "launch", 11 | "preLaunchTask": "build", 12 | // If you have changed target frameworks, make sure to update the program path. 13 | "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/CommandAPIClient.dll", 14 | "args": [], 15 | "cwd": "${workspaceFolder}", 16 | // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console 17 | "console": "internalConsole", 18 | "stopAtEntry": false 19 | }, 20 | { 21 | "name": ".NET Core Attach", 22 | "type": "coreclr", 23 | "request": "attach", 24 | "processId": "${command:pickProcess}" 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /CommandAPIClient/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "build", 6 | "command": "dotnet", 7 | "type": "process", 8 | "args": [ 9 | "build", 10 | "${workspaceFolder}/CommandAPIClient.csproj", 11 | "/property:GenerateFullPaths=true", 12 | "/consoleloggerparameters:NoSummary" 13 | ], 14 | "problemMatcher": "$msCompile" 15 | }, 16 | { 17 | "label": "publish", 18 | "command": "dotnet", 19 | "type": "process", 20 | "args": [ 21 | "publish", 22 | "${workspaceFolder}/CommandAPIClient.csproj", 23 | "/property:GenerateFullPaths=true", 24 | "/consoleloggerparameters:NoSummary" 25 | ], 26 | "problemMatcher": "$msCompile" 27 | }, 28 | { 29 | "label": "watch", 30 | "command": "dotnet", 31 | "type": "process", 32 | "args": [ 33 | "watch", 34 | "run", 35 | "${workspaceFolder}/CommandAPIClient.csproj", 36 | "/property:GenerateFullPaths=true", 37 | "/consoleloggerparameters:NoSummary" 38 | ], 39 | "problemMatcher": "$msCompile" 40 | } 41 | ] 42 | } -------------------------------------------------------------------------------- /CommandAPIClient/AuthConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Globalization; 4 | using Microsoft.Extensions.Configuration; 5 | 6 | namespace CommandAPIClient 7 | { 8 | public class AuthConfig 9 | { 10 | public string Instance {get; set;} = 11 | "https://login.microsoftonline.com/{0}"; 12 | public string TenantId {get; set;} 13 | public string ClientId {get; set;} 14 | public string Authority 15 | { 16 | get 17 | { 18 | return String.Format(CultureInfo.InvariantCulture, 19 | Instance, TenantId); 20 | } 21 | } 22 | public string ClientSecret {get; set;} 23 | public string BaseAddress {get; set;} 24 | public string ResourceID {get; set;} 25 | 26 | public static AuthConfig ReadFromJsonFile(string path) 27 | { 28 | IConfiguration Configuration; 29 | 30 | var builder = new ConfigurationBuilder() 31 | .SetBasePath(Directory.GetCurrentDirectory()) 32 | .AddJsonFile(path); 33 | 34 | Configuration = builder.Build(); 35 | 36 | return Configuration.Get(); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /CommandAPIClient/CommandAPIClient.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /CommandAPIClient/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Microsoft.Identity.Client; 4 | 5 | 6 | namespace CommandAPIClient 7 | { 8 | class Program 9 | { 10 | static void Main(string[] args) 11 | { 12 | Console.WriteLine("Making the call..."); 13 | RunAsync().GetAwaiter().GetResult(); 14 | } 15 | 16 | private static async Task RunAsync() 17 | { 18 | AuthConfig config = AuthConfig.ReadFromJsonFile("appsettings.json"); 19 | 20 | IConfidentialClientApplication app; 21 | 22 | app = ConfidentialClientApplicationBuilder.Create(config.ClientId) 23 | .WithClientSecret(config.ClientSecret) 24 | .WithAuthority(new Uri(config.Authority)) 25 | .Build(); 26 | 27 | string[] ResourceIds = new string[] { config.ResourceID }; 28 | 29 | AuthenticationResult result = null; 30 | try 31 | { 32 | result = await app.AcquireTokenForClient(ResourceIds).ExecuteAsync(); 33 | Console.ForegroundColor = ConsoleColor.Green; 34 | Console.WriteLine("Token acquired \n"); 35 | Console.WriteLine(result.AccessToken); 36 | Console.ResetColor(); 37 | } 38 | catch (MsalClientException ex) 39 | { 40 | Console.ForegroundColor = ConsoleColor.Red; 41 | Console.WriteLine(ex.Message); 42 | Console.ResetColor(); 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /CommandAPIClient/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Instance": "https://login.microsoftonline.com/{0}", 3 | "TenantId": "eea3aec8-2537-43fb-b476-2549abbc080d", 4 | "ClientId": "3371ecb2-c14d-474b-a1f8-f12d3e0e882c", 5 | "ClientSecret": "RFjRqDeI4t90DrNRkN~Q2Ewf4yKW8.K_S-", 6 | "BaseAddress": "https://localhost:5001/api/Commands/1", 7 | "ResourceId": "api://614c75ea-6b39-4bf4-b400-7a60bc3aa5a6/.default" 8 | } 9 | -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.deps.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeTarget": { 3 | "name": ".NETCoreApp,Version=v3.1", 4 | "signature": "" 5 | }, 6 | "compilationOptions": {}, 7 | "targets": { 8 | ".NETCoreApp,Version=v3.1": { 9 | "CommandAPIClient/1.0.0": { 10 | "dependencies": { 11 | "Microsoft.Extensions.Configuration": "3.1.5", 12 | "Microsoft.Extensions.Configuration.Binder": "3.1.5", 13 | "Microsoft.Extensions.Configuration.Json": "3.1.5", 14 | "Microsoft.Identity.Client": "4.15.0" 15 | }, 16 | "runtime": { 17 | "CommandAPIClient.dll": {} 18 | } 19 | }, 20 | "Microsoft.CSharp/4.5.0": {}, 21 | "Microsoft.Extensions.Configuration/3.1.5": { 22 | "dependencies": { 23 | "Microsoft.Extensions.Configuration.Abstractions": "3.1.5" 24 | }, 25 | "runtime": { 26 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.dll": { 27 | "assemblyVersion": "3.1.5.0", 28 | "fileVersion": "3.100.520.27009" 29 | } 30 | } 31 | }, 32 | "Microsoft.Extensions.Configuration.Abstractions/3.1.5": { 33 | "dependencies": { 34 | "Microsoft.Extensions.Primitives": "3.1.5" 35 | }, 36 | "runtime": { 37 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll": { 38 | "assemblyVersion": "3.1.5.0", 39 | "fileVersion": "3.100.520.27009" 40 | } 41 | } 42 | }, 43 | "Microsoft.Extensions.Configuration.Binder/3.1.5": { 44 | "dependencies": { 45 | "Microsoft.Extensions.Configuration": "3.1.5" 46 | }, 47 | "runtime": { 48 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll": { 49 | "assemblyVersion": "3.1.5.0", 50 | "fileVersion": "3.100.520.27009" 51 | } 52 | } 53 | }, 54 | "Microsoft.Extensions.Configuration.FileExtensions/3.1.5": { 55 | "dependencies": { 56 | "Microsoft.Extensions.Configuration": "3.1.5", 57 | "Microsoft.Extensions.FileProviders.Physical": "3.1.5" 58 | }, 59 | "runtime": { 60 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll": { 61 | "assemblyVersion": "3.1.5.0", 62 | "fileVersion": "3.100.520.27009" 63 | } 64 | } 65 | }, 66 | "Microsoft.Extensions.Configuration.Json/3.1.5": { 67 | "dependencies": { 68 | "Microsoft.Extensions.Configuration": "3.1.5", 69 | "Microsoft.Extensions.Configuration.FileExtensions": "3.1.5" 70 | }, 71 | "runtime": { 72 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll": { 73 | "assemblyVersion": "3.1.5.0", 74 | "fileVersion": "3.100.520.27009" 75 | } 76 | } 77 | }, 78 | "Microsoft.Extensions.FileProviders.Abstractions/3.1.5": { 79 | "dependencies": { 80 | "Microsoft.Extensions.Primitives": "3.1.5" 81 | }, 82 | "runtime": { 83 | "lib/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll": { 84 | "assemblyVersion": "3.1.5.0", 85 | "fileVersion": "3.100.520.27009" 86 | } 87 | } 88 | }, 89 | "Microsoft.Extensions.FileProviders.Physical/3.1.5": { 90 | "dependencies": { 91 | "Microsoft.Extensions.FileProviders.Abstractions": "3.1.5", 92 | "Microsoft.Extensions.FileSystemGlobbing": "3.1.5" 93 | }, 94 | "runtime": { 95 | "lib/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll": { 96 | "assemblyVersion": "3.1.5.0", 97 | "fileVersion": "3.100.520.27009" 98 | } 99 | } 100 | }, 101 | "Microsoft.Extensions.FileSystemGlobbing/3.1.5": { 102 | "runtime": { 103 | "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll": { 104 | "assemblyVersion": "3.1.5.0", 105 | "fileVersion": "3.100.520.27009" 106 | } 107 | } 108 | }, 109 | "Microsoft.Extensions.Primitives/3.1.5": { 110 | "runtime": { 111 | "lib/netcoreapp3.1/Microsoft.Extensions.Primitives.dll": { 112 | "assemblyVersion": "3.1.5.0", 113 | "fileVersion": "3.100.520.27009" 114 | } 115 | } 116 | }, 117 | "Microsoft.Identity.Client/4.15.0": { 118 | "dependencies": { 119 | "Microsoft.CSharp": "4.5.0", 120 | "System.ComponentModel.TypeConverter": "4.3.0", 121 | "System.Net.NameResolution": "4.3.0", 122 | "System.Private.Uri": "4.3.2", 123 | "System.Runtime.Serialization.Formatters": "4.3.0", 124 | "System.Runtime.Serialization.Json": "4.3.0", 125 | "System.Runtime.Serialization.Primitives": "4.3.0", 126 | "System.Security.SecureString": "4.3.0", 127 | "System.Xml.XDocument": "4.3.0" 128 | }, 129 | "runtime": { 130 | "lib/netcoreapp2.1/Microsoft.Identity.Client.dll": { 131 | "assemblyVersion": "4.15.0.0", 132 | "fileVersion": "4.15.0.0" 133 | } 134 | } 135 | }, 136 | "Microsoft.NETCore.Platforms/1.1.1": {}, 137 | "Microsoft.NETCore.Targets/1.1.3": {}, 138 | "Microsoft.Win32.Primitives/4.3.0": { 139 | "dependencies": { 140 | "Microsoft.NETCore.Platforms": "1.1.1", 141 | "Microsoft.NETCore.Targets": "1.1.3", 142 | "System.Runtime": "4.3.0" 143 | } 144 | }, 145 | "runtime.native.System/4.3.0": { 146 | "dependencies": { 147 | "Microsoft.NETCore.Platforms": "1.1.1", 148 | "Microsoft.NETCore.Targets": "1.1.3" 149 | } 150 | }, 151 | "System.Collections/4.3.0": { 152 | "dependencies": { 153 | "Microsoft.NETCore.Platforms": "1.1.1", 154 | "Microsoft.NETCore.Targets": "1.1.3", 155 | "System.Runtime": "4.3.0" 156 | } 157 | }, 158 | "System.Collections.Concurrent/4.3.0": { 159 | "dependencies": { 160 | "System.Collections": "4.3.0", 161 | "System.Diagnostics.Debug": "4.3.0", 162 | "System.Diagnostics.Tracing": "4.3.0", 163 | "System.Globalization": "4.3.0", 164 | "System.Reflection": "4.3.0", 165 | "System.Resources.ResourceManager": "4.3.0", 166 | "System.Runtime": "4.3.0", 167 | "System.Runtime.Extensions": "4.3.0", 168 | "System.Threading": "4.3.0", 169 | "System.Threading.Tasks": "4.3.0" 170 | } 171 | }, 172 | "System.Collections.NonGeneric/4.3.0": { 173 | "dependencies": { 174 | "System.Diagnostics.Debug": "4.3.0", 175 | "System.Globalization": "4.3.0", 176 | "System.Resources.ResourceManager": "4.3.0", 177 | "System.Runtime": "4.3.0", 178 | "System.Runtime.Extensions": "4.3.0", 179 | "System.Threading": "4.3.0" 180 | } 181 | }, 182 | "System.Collections.Specialized/4.3.0": { 183 | "dependencies": { 184 | "System.Collections.NonGeneric": "4.3.0", 185 | "System.Globalization": "4.3.0", 186 | "System.Globalization.Extensions": "4.3.0", 187 | "System.Resources.ResourceManager": "4.3.0", 188 | "System.Runtime": "4.3.0", 189 | "System.Runtime.Extensions": "4.3.0", 190 | "System.Threading": "4.3.0" 191 | } 192 | }, 193 | "System.ComponentModel/4.3.0": { 194 | "dependencies": { 195 | "System.Runtime": "4.3.0" 196 | } 197 | }, 198 | "System.ComponentModel.Primitives/4.3.0": { 199 | "dependencies": { 200 | "System.ComponentModel": "4.3.0", 201 | "System.Resources.ResourceManager": "4.3.0", 202 | "System.Runtime": "4.3.0" 203 | } 204 | }, 205 | "System.ComponentModel.TypeConverter/4.3.0": { 206 | "dependencies": { 207 | "System.Collections": "4.3.0", 208 | "System.Collections.NonGeneric": "4.3.0", 209 | "System.Collections.Specialized": "4.3.0", 210 | "System.ComponentModel": "4.3.0", 211 | "System.ComponentModel.Primitives": "4.3.0", 212 | "System.Globalization": "4.3.0", 213 | "System.Linq": "4.3.0", 214 | "System.Reflection": "4.3.0", 215 | "System.Reflection.Extensions": "4.3.0", 216 | "System.Reflection.Primitives": "4.3.0", 217 | "System.Reflection.TypeExtensions": "4.3.0", 218 | "System.Resources.ResourceManager": "4.3.0", 219 | "System.Runtime": "4.3.0", 220 | "System.Runtime.Extensions": "4.3.0", 221 | "System.Threading": "4.3.0" 222 | } 223 | }, 224 | "System.Diagnostics.Debug/4.3.0": { 225 | "dependencies": { 226 | "Microsoft.NETCore.Platforms": "1.1.1", 227 | "Microsoft.NETCore.Targets": "1.1.3", 228 | "System.Runtime": "4.3.0" 229 | } 230 | }, 231 | "System.Diagnostics.Tools/4.3.0": { 232 | "dependencies": { 233 | "Microsoft.NETCore.Platforms": "1.1.1", 234 | "Microsoft.NETCore.Targets": "1.1.3", 235 | "System.Runtime": "4.3.0" 236 | } 237 | }, 238 | "System.Diagnostics.Tracing/4.3.0": { 239 | "dependencies": { 240 | "Microsoft.NETCore.Platforms": "1.1.1", 241 | "Microsoft.NETCore.Targets": "1.1.3", 242 | "System.Runtime": "4.3.0" 243 | } 244 | }, 245 | "System.Globalization/4.3.0": { 246 | "dependencies": { 247 | "Microsoft.NETCore.Platforms": "1.1.1", 248 | "Microsoft.NETCore.Targets": "1.1.3", 249 | "System.Runtime": "4.3.0" 250 | } 251 | }, 252 | "System.Globalization.Extensions/4.3.0": { 253 | "dependencies": { 254 | "Microsoft.NETCore.Platforms": "1.1.1", 255 | "System.Globalization": "4.3.0", 256 | "System.Resources.ResourceManager": "4.3.0", 257 | "System.Runtime": "4.3.0", 258 | "System.Runtime.Extensions": "4.3.0", 259 | "System.Runtime.InteropServices": "4.3.0" 260 | } 261 | }, 262 | "System.IO/4.3.0": { 263 | "dependencies": { 264 | "Microsoft.NETCore.Platforms": "1.1.1", 265 | "Microsoft.NETCore.Targets": "1.1.3", 266 | "System.Runtime": "4.3.0", 267 | "System.Text.Encoding": "4.3.0", 268 | "System.Threading.Tasks": "4.3.0" 269 | } 270 | }, 271 | "System.IO.FileSystem/4.3.0": { 272 | "dependencies": { 273 | "Microsoft.NETCore.Platforms": "1.1.1", 274 | "Microsoft.NETCore.Targets": "1.1.3", 275 | "System.IO": "4.3.0", 276 | "System.IO.FileSystem.Primitives": "4.3.0", 277 | "System.Runtime": "4.3.0", 278 | "System.Runtime.Handles": "4.3.0", 279 | "System.Text.Encoding": "4.3.0", 280 | "System.Threading.Tasks": "4.3.0" 281 | } 282 | }, 283 | "System.IO.FileSystem.Primitives/4.3.0": { 284 | "dependencies": { 285 | "System.Runtime": "4.3.0" 286 | } 287 | }, 288 | "System.Linq/4.3.0": { 289 | "dependencies": { 290 | "System.Collections": "4.3.0", 291 | "System.Diagnostics.Debug": "4.3.0", 292 | "System.Resources.ResourceManager": "4.3.0", 293 | "System.Runtime": "4.3.0", 294 | "System.Runtime.Extensions": "4.3.0" 295 | } 296 | }, 297 | "System.Net.NameResolution/4.3.0": { 298 | "dependencies": { 299 | "Microsoft.NETCore.Platforms": "1.1.1", 300 | "System.Collections": "4.3.0", 301 | "System.Diagnostics.Tracing": "4.3.0", 302 | "System.Globalization": "4.3.0", 303 | "System.Net.Primitives": "4.3.0", 304 | "System.Resources.ResourceManager": "4.3.0", 305 | "System.Runtime": "4.3.0", 306 | "System.Runtime.Extensions": "4.3.0", 307 | "System.Runtime.Handles": "4.3.0", 308 | "System.Runtime.InteropServices": "4.3.0", 309 | "System.Security.Principal.Windows": "4.3.0", 310 | "System.Threading": "4.3.0", 311 | "System.Threading.Tasks": "4.3.0", 312 | "runtime.native.System": "4.3.0" 313 | } 314 | }, 315 | "System.Net.Primitives/4.3.0": { 316 | "dependencies": { 317 | "Microsoft.NETCore.Platforms": "1.1.1", 318 | "Microsoft.NETCore.Targets": "1.1.3", 319 | "System.Runtime": "4.3.0", 320 | "System.Runtime.Handles": "4.3.0" 321 | } 322 | }, 323 | "System.Private.DataContractSerialization/4.3.0": { 324 | "dependencies": { 325 | "System.Collections": "4.3.0", 326 | "System.Collections.Concurrent": "4.3.0", 327 | "System.Diagnostics.Debug": "4.3.0", 328 | "System.Globalization": "4.3.0", 329 | "System.IO": "4.3.0", 330 | "System.Linq": "4.3.0", 331 | "System.Reflection": "4.3.0", 332 | "System.Reflection.Emit.ILGeneration": "4.3.0", 333 | "System.Reflection.Emit.Lightweight": "4.3.0", 334 | "System.Reflection.Extensions": "4.3.0", 335 | "System.Reflection.Primitives": "4.3.0", 336 | "System.Reflection.TypeExtensions": "4.3.0", 337 | "System.Resources.ResourceManager": "4.3.0", 338 | "System.Runtime": "4.3.0", 339 | "System.Runtime.Extensions": "4.3.0", 340 | "System.Runtime.Serialization.Primitives": "4.3.0", 341 | "System.Text.Encoding": "4.3.0", 342 | "System.Text.Encoding.Extensions": "4.3.0", 343 | "System.Text.RegularExpressions": "4.3.0", 344 | "System.Threading": "4.3.0", 345 | "System.Threading.Tasks": "4.3.0", 346 | "System.Xml.ReaderWriter": "4.3.0", 347 | "System.Xml.XDocument": "4.3.0", 348 | "System.Xml.XmlDocument": "4.3.0", 349 | "System.Xml.XmlSerializer": "4.3.0" 350 | } 351 | }, 352 | "System.Private.Uri/4.3.2": { 353 | "dependencies": { 354 | "Microsoft.NETCore.Platforms": "1.1.1", 355 | "Microsoft.NETCore.Targets": "1.1.3" 356 | } 357 | }, 358 | "System.Reflection/4.3.0": { 359 | "dependencies": { 360 | "Microsoft.NETCore.Platforms": "1.1.1", 361 | "Microsoft.NETCore.Targets": "1.1.3", 362 | "System.IO": "4.3.0", 363 | "System.Reflection.Primitives": "4.3.0", 364 | "System.Runtime": "4.3.0" 365 | } 366 | }, 367 | "System.Reflection.Emit/4.3.0": { 368 | "dependencies": { 369 | "System.IO": "4.3.0", 370 | "System.Reflection": "4.3.0", 371 | "System.Reflection.Emit.ILGeneration": "4.3.0", 372 | "System.Reflection.Primitives": "4.3.0", 373 | "System.Runtime": "4.3.0" 374 | } 375 | }, 376 | "System.Reflection.Emit.ILGeneration/4.3.0": { 377 | "dependencies": { 378 | "System.Reflection": "4.3.0", 379 | "System.Reflection.Primitives": "4.3.0", 380 | "System.Runtime": "4.3.0" 381 | } 382 | }, 383 | "System.Reflection.Emit.Lightweight/4.3.0": { 384 | "dependencies": { 385 | "System.Reflection": "4.3.0", 386 | "System.Reflection.Emit.ILGeneration": "4.3.0", 387 | "System.Reflection.Primitives": "4.3.0", 388 | "System.Runtime": "4.3.0" 389 | } 390 | }, 391 | "System.Reflection.Extensions/4.3.0": { 392 | "dependencies": { 393 | "Microsoft.NETCore.Platforms": "1.1.1", 394 | "Microsoft.NETCore.Targets": "1.1.3", 395 | "System.Reflection": "4.3.0", 396 | "System.Runtime": "4.3.0" 397 | } 398 | }, 399 | "System.Reflection.Primitives/4.3.0": { 400 | "dependencies": { 401 | "Microsoft.NETCore.Platforms": "1.1.1", 402 | "Microsoft.NETCore.Targets": "1.1.3", 403 | "System.Runtime": "4.3.0" 404 | } 405 | }, 406 | "System.Reflection.TypeExtensions/4.3.0": { 407 | "dependencies": { 408 | "System.Reflection": "4.3.0", 409 | "System.Runtime": "4.3.0" 410 | } 411 | }, 412 | "System.Resources.ResourceManager/4.3.0": { 413 | "dependencies": { 414 | "Microsoft.NETCore.Platforms": "1.1.1", 415 | "Microsoft.NETCore.Targets": "1.1.3", 416 | "System.Globalization": "4.3.0", 417 | "System.Reflection": "4.3.0", 418 | "System.Runtime": "4.3.0" 419 | } 420 | }, 421 | "System.Runtime/4.3.0": { 422 | "dependencies": { 423 | "Microsoft.NETCore.Platforms": "1.1.1", 424 | "Microsoft.NETCore.Targets": "1.1.3" 425 | } 426 | }, 427 | "System.Runtime.Extensions/4.3.0": { 428 | "dependencies": { 429 | "Microsoft.NETCore.Platforms": "1.1.1", 430 | "Microsoft.NETCore.Targets": "1.1.3", 431 | "System.Runtime": "4.3.0" 432 | } 433 | }, 434 | "System.Runtime.Handles/4.3.0": { 435 | "dependencies": { 436 | "Microsoft.NETCore.Platforms": "1.1.1", 437 | "Microsoft.NETCore.Targets": "1.1.3", 438 | "System.Runtime": "4.3.0" 439 | } 440 | }, 441 | "System.Runtime.InteropServices/4.3.0": { 442 | "dependencies": { 443 | "Microsoft.NETCore.Platforms": "1.1.1", 444 | "Microsoft.NETCore.Targets": "1.1.3", 445 | "System.Reflection": "4.3.0", 446 | "System.Reflection.Primitives": "4.3.0", 447 | "System.Runtime": "4.3.0", 448 | "System.Runtime.Handles": "4.3.0" 449 | } 450 | }, 451 | "System.Runtime.Serialization.Formatters/4.3.0": { 452 | "dependencies": { 453 | "System.Collections": "4.3.0", 454 | "System.Reflection": "4.3.0", 455 | "System.Resources.ResourceManager": "4.3.0", 456 | "System.Runtime": "4.3.0", 457 | "System.Runtime.Serialization.Primitives": "4.3.0" 458 | } 459 | }, 460 | "System.Runtime.Serialization.Json/4.3.0": { 461 | "dependencies": { 462 | "System.IO": "4.3.0", 463 | "System.Private.DataContractSerialization": "4.3.0", 464 | "System.Runtime": "4.3.0" 465 | } 466 | }, 467 | "System.Runtime.Serialization.Primitives/4.3.0": { 468 | "dependencies": { 469 | "System.Resources.ResourceManager": "4.3.0", 470 | "System.Runtime": "4.3.0" 471 | } 472 | }, 473 | "System.Security.Claims/4.3.0": { 474 | "dependencies": { 475 | "System.Collections": "4.3.0", 476 | "System.Globalization": "4.3.0", 477 | "System.IO": "4.3.0", 478 | "System.Resources.ResourceManager": "4.3.0", 479 | "System.Runtime": "4.3.0", 480 | "System.Runtime.Extensions": "4.3.0", 481 | "System.Security.Principal": "4.3.0" 482 | } 483 | }, 484 | "System.Security.Cryptography.Primitives/4.3.0": { 485 | "dependencies": { 486 | "System.Diagnostics.Debug": "4.3.0", 487 | "System.Globalization": "4.3.0", 488 | "System.IO": "4.3.0", 489 | "System.Resources.ResourceManager": "4.3.0", 490 | "System.Runtime": "4.3.0", 491 | "System.Threading": "4.3.0", 492 | "System.Threading.Tasks": "4.3.0" 493 | } 494 | }, 495 | "System.Security.Principal/4.3.0": { 496 | "dependencies": { 497 | "System.Runtime": "4.3.0" 498 | } 499 | }, 500 | "System.Security.Principal.Windows/4.3.0": { 501 | "dependencies": { 502 | "Microsoft.NETCore.Platforms": "1.1.1", 503 | "Microsoft.Win32.Primitives": "4.3.0", 504 | "System.Collections": "4.3.0", 505 | "System.Diagnostics.Debug": "4.3.0", 506 | "System.Reflection": "4.3.0", 507 | "System.Resources.ResourceManager": "4.3.0", 508 | "System.Runtime": "4.3.0", 509 | "System.Runtime.Extensions": "4.3.0", 510 | "System.Runtime.Handles": "4.3.0", 511 | "System.Runtime.InteropServices": "4.3.0", 512 | "System.Security.Claims": "4.3.0", 513 | "System.Security.Principal": "4.3.0", 514 | "System.Text.Encoding": "4.3.0", 515 | "System.Threading": "4.3.0" 516 | } 517 | }, 518 | "System.Security.SecureString/4.3.0": { 519 | "dependencies": { 520 | "Microsoft.NETCore.Platforms": "1.1.1", 521 | "System.Resources.ResourceManager": "4.3.0", 522 | "System.Runtime": "4.3.0", 523 | "System.Runtime.Handles": "4.3.0", 524 | "System.Runtime.InteropServices": "4.3.0", 525 | "System.Security.Cryptography.Primitives": "4.3.0", 526 | "System.Text.Encoding": "4.3.0", 527 | "System.Threading": "4.3.0" 528 | } 529 | }, 530 | "System.Text.Encoding/4.3.0": { 531 | "dependencies": { 532 | "Microsoft.NETCore.Platforms": "1.1.1", 533 | "Microsoft.NETCore.Targets": "1.1.3", 534 | "System.Runtime": "4.3.0" 535 | } 536 | }, 537 | "System.Text.Encoding.Extensions/4.3.0": { 538 | "dependencies": { 539 | "Microsoft.NETCore.Platforms": "1.1.1", 540 | "Microsoft.NETCore.Targets": "1.1.3", 541 | "System.Runtime": "4.3.0", 542 | "System.Text.Encoding": "4.3.0" 543 | } 544 | }, 545 | "System.Text.RegularExpressions/4.3.0": { 546 | "dependencies": { 547 | "System.Runtime": "4.3.0" 548 | } 549 | }, 550 | "System.Threading/4.3.0": { 551 | "dependencies": { 552 | "System.Runtime": "4.3.0", 553 | "System.Threading.Tasks": "4.3.0" 554 | } 555 | }, 556 | "System.Threading.Tasks/4.3.0": { 557 | "dependencies": { 558 | "Microsoft.NETCore.Platforms": "1.1.1", 559 | "Microsoft.NETCore.Targets": "1.1.3", 560 | "System.Runtime": "4.3.0" 561 | } 562 | }, 563 | "System.Threading.Tasks.Extensions/4.3.0": { 564 | "dependencies": { 565 | "System.Collections": "4.3.0", 566 | "System.Runtime": "4.3.0", 567 | "System.Threading.Tasks": "4.3.0" 568 | } 569 | }, 570 | "System.Xml.ReaderWriter/4.3.0": { 571 | "dependencies": { 572 | "System.Collections": "4.3.0", 573 | "System.Diagnostics.Debug": "4.3.0", 574 | "System.Globalization": "4.3.0", 575 | "System.IO": "4.3.0", 576 | "System.IO.FileSystem": "4.3.0", 577 | "System.IO.FileSystem.Primitives": "4.3.0", 578 | "System.Resources.ResourceManager": "4.3.0", 579 | "System.Runtime": "4.3.0", 580 | "System.Runtime.Extensions": "4.3.0", 581 | "System.Runtime.InteropServices": "4.3.0", 582 | "System.Text.Encoding": "4.3.0", 583 | "System.Text.Encoding.Extensions": "4.3.0", 584 | "System.Text.RegularExpressions": "4.3.0", 585 | "System.Threading.Tasks": "4.3.0", 586 | "System.Threading.Tasks.Extensions": "4.3.0" 587 | } 588 | }, 589 | "System.Xml.XDocument/4.3.0": { 590 | "dependencies": { 591 | "System.Collections": "4.3.0", 592 | "System.Diagnostics.Debug": "4.3.0", 593 | "System.Diagnostics.Tools": "4.3.0", 594 | "System.Globalization": "4.3.0", 595 | "System.IO": "4.3.0", 596 | "System.Reflection": "4.3.0", 597 | "System.Resources.ResourceManager": "4.3.0", 598 | "System.Runtime": "4.3.0", 599 | "System.Runtime.Extensions": "4.3.0", 600 | "System.Text.Encoding": "4.3.0", 601 | "System.Threading": "4.3.0", 602 | "System.Xml.ReaderWriter": "4.3.0" 603 | } 604 | }, 605 | "System.Xml.XmlDocument/4.3.0": { 606 | "dependencies": { 607 | "System.Collections": "4.3.0", 608 | "System.Diagnostics.Debug": "4.3.0", 609 | "System.Globalization": "4.3.0", 610 | "System.IO": "4.3.0", 611 | "System.Resources.ResourceManager": "4.3.0", 612 | "System.Runtime": "4.3.0", 613 | "System.Runtime.Extensions": "4.3.0", 614 | "System.Text.Encoding": "4.3.0", 615 | "System.Threading": "4.3.0", 616 | "System.Xml.ReaderWriter": "4.3.0" 617 | } 618 | }, 619 | "System.Xml.XmlSerializer/4.3.0": { 620 | "dependencies": { 621 | "System.Collections": "4.3.0", 622 | "System.Globalization": "4.3.0", 623 | "System.IO": "4.3.0", 624 | "System.Linq": "4.3.0", 625 | "System.Reflection": "4.3.0", 626 | "System.Reflection.Emit": "4.3.0", 627 | "System.Reflection.Emit.ILGeneration": "4.3.0", 628 | "System.Reflection.Extensions": "4.3.0", 629 | "System.Reflection.Primitives": "4.3.0", 630 | "System.Reflection.TypeExtensions": "4.3.0", 631 | "System.Resources.ResourceManager": "4.3.0", 632 | "System.Runtime": "4.3.0", 633 | "System.Runtime.Extensions": "4.3.0", 634 | "System.Text.RegularExpressions": "4.3.0", 635 | "System.Threading": "4.3.0", 636 | "System.Xml.ReaderWriter": "4.3.0", 637 | "System.Xml.XmlDocument": "4.3.0" 638 | } 639 | } 640 | } 641 | }, 642 | "libraries": { 643 | "CommandAPIClient/1.0.0": { 644 | "type": "project", 645 | "serviceable": false, 646 | "sha512": "" 647 | }, 648 | "Microsoft.CSharp/4.5.0": { 649 | "type": "package", 650 | "serviceable": true, 651 | "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==", 652 | "path": "microsoft.csharp/4.5.0", 653 | "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512" 654 | }, 655 | "Microsoft.Extensions.Configuration/3.1.5": { 656 | "type": "package", 657 | "serviceable": true, 658 | "sha512": "sha512-LZfdAP8flK4hkaniUv6TlstDX9FXLmJMX1A4mpLghAsZxTaJIgf+nzBNiPRdy/B5Vrs74gRONX3JrIUJQrebmA==", 659 | "path": "microsoft.extensions.configuration/3.1.5", 660 | "hashPath": "microsoft.extensions.configuration.3.1.5.nupkg.sha512" 661 | }, 662 | "Microsoft.Extensions.Configuration.Abstractions/3.1.5": { 663 | "type": "package", 664 | "serviceable": true, 665 | "sha512": "sha512-VBcAk6s9izZr04WCzNqOh1Sxz2RbVSh0G79MfpHSDv16cUJtSEYEHody9ZnF71LBEktzdu6cvDFBOFMh43q0iA==", 666 | "path": "microsoft.extensions.configuration.abstractions/3.1.5", 667 | "hashPath": "microsoft.extensions.configuration.abstractions.3.1.5.nupkg.sha512" 668 | }, 669 | "Microsoft.Extensions.Configuration.Binder/3.1.5": { 670 | "type": "package", 671 | "serviceable": true, 672 | "sha512": "sha512-ZR/zjBxkvdnnWhRoBHDT95uz1ZgJFhv1QazmKCIcDqy/RXqi+6dJ/PfxDhEnzPvk9HbkcGfFsPEu1vSIyxDqBQ==", 673 | "path": "microsoft.extensions.configuration.binder/3.1.5", 674 | "hashPath": "microsoft.extensions.configuration.binder.3.1.5.nupkg.sha512" 675 | }, 676 | "Microsoft.Extensions.Configuration.FileExtensions/3.1.5": { 677 | "type": "package", 678 | "serviceable": true, 679 | "sha512": "sha512-zDXWDDaHMKX2ArwhrPprKgZfpCDuaqrcaGX5IG9EybQ6IGYZ7aMJftLan/bfxteI5bnga912y5nIYrTuXaxpug==", 680 | "path": "microsoft.extensions.configuration.fileextensions/3.1.5", 681 | "hashPath": "microsoft.extensions.configuration.fileextensions.3.1.5.nupkg.sha512" 682 | }, 683 | "Microsoft.Extensions.Configuration.Json/3.1.5": { 684 | "type": "package", 685 | "serviceable": true, 686 | "sha512": "sha512-Yk7+e+13JKN9rvoUrWCil3Jdbrbx5owGhl5z2u5kgpEIuAn+eqWq624/wvou0/zzPxC8QyID/cSi1oLf9ngNhQ==", 687 | "path": "microsoft.extensions.configuration.json/3.1.5", 688 | "hashPath": "microsoft.extensions.configuration.json.3.1.5.nupkg.sha512" 689 | }, 690 | "Microsoft.Extensions.FileProviders.Abstractions/3.1.5": { 691 | "type": "package", 692 | "serviceable": true, 693 | "sha512": "sha512-LrEQ97jhSWw84Y1m+CJfvh9qTUUswt27au54QYn2x5PCMPPgR+yAv/4VTJKMGSSI9T4scSLBXZ/fVhT4fPTCtA==", 694 | "path": "microsoft.extensions.fileproviders.abstractions/3.1.5", 695 | "hashPath": "microsoft.extensions.fileproviders.abstractions.3.1.5.nupkg.sha512" 696 | }, 697 | "Microsoft.Extensions.FileProviders.Physical/3.1.5": { 698 | "type": "package", 699 | "serviceable": true, 700 | "sha512": "sha512-JemaaSSQosZ59flEfNzqvQRHDt1u4aEwV/pR4eFQEXpaX7lHI13gSbQbQ7TMGDdmY9F2t2+6RPp44Mmf9O1DsQ==", 701 | "path": "microsoft.extensions.fileproviders.physical/3.1.5", 702 | "hashPath": "microsoft.extensions.fileproviders.physical.3.1.5.nupkg.sha512" 703 | }, 704 | "Microsoft.Extensions.FileSystemGlobbing/3.1.5": { 705 | "type": "package", 706 | "serviceable": true, 707 | "sha512": "sha512-ObdbZ/L3X89KOHI0K/zlwufnlHESYSp2L/Z1XgYp3Odekmzevl06iffrtIBP9Qgw2RxBVAyTEVNrIouCuik6yg==", 708 | "path": "microsoft.extensions.filesystemglobbing/3.1.5", 709 | "hashPath": "microsoft.extensions.filesystemglobbing.3.1.5.nupkg.sha512" 710 | }, 711 | "Microsoft.Extensions.Primitives/3.1.5": { 712 | "type": "package", 713 | "serviceable": true, 714 | "sha512": "sha512-6bLdjSAQix82oP2tsuX9MM2yjgUFFOkSZYyRSKoUULilw2cg0Y0H+dnugwYlfj8Jd7yjd/+QSdNBqEyYhTYv0w==", 715 | "path": "microsoft.extensions.primitives/3.1.5", 716 | "hashPath": "microsoft.extensions.primitives.3.1.5.nupkg.sha512" 717 | }, 718 | "Microsoft.Identity.Client/4.15.0": { 719 | "type": "package", 720 | "serviceable": true, 721 | "sha512": "sha512-dVSPFOe/TnSLqwKUpA8opa9+nEQqZ6HRvJk8x9MtQAk/QL6dsGrbjXOyhhS08eo59fboNWmGRxXXKvVNgBUXmw==", 722 | "path": "microsoft.identity.client/4.15.0", 723 | "hashPath": "microsoft.identity.client.4.15.0.nupkg.sha512" 724 | }, 725 | "Microsoft.NETCore.Platforms/1.1.1": { 726 | "type": "package", 727 | "serviceable": true, 728 | "sha512": "sha512-TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==", 729 | "path": "microsoft.netcore.platforms/1.1.1", 730 | "hashPath": "microsoft.netcore.platforms.1.1.1.nupkg.sha512" 731 | }, 732 | "Microsoft.NETCore.Targets/1.1.3": { 733 | "type": "package", 734 | "serviceable": true, 735 | "sha512": "sha512-3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==", 736 | "path": "microsoft.netcore.targets/1.1.3", 737 | "hashPath": "microsoft.netcore.targets.1.1.3.nupkg.sha512" 738 | }, 739 | "Microsoft.Win32.Primitives/4.3.0": { 740 | "type": "package", 741 | "serviceable": true, 742 | "sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", 743 | "path": "microsoft.win32.primitives/4.3.0", 744 | "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" 745 | }, 746 | "runtime.native.System/4.3.0": { 747 | "type": "package", 748 | "serviceable": true, 749 | "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", 750 | "path": "runtime.native.system/4.3.0", 751 | "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" 752 | }, 753 | "System.Collections/4.3.0": { 754 | "type": "package", 755 | "serviceable": true, 756 | "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", 757 | "path": "system.collections/4.3.0", 758 | "hashPath": "system.collections.4.3.0.nupkg.sha512" 759 | }, 760 | "System.Collections.Concurrent/4.3.0": { 761 | "type": "package", 762 | "serviceable": true, 763 | "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", 764 | "path": "system.collections.concurrent/4.3.0", 765 | "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" 766 | }, 767 | "System.Collections.NonGeneric/4.3.0": { 768 | "type": "package", 769 | "serviceable": true, 770 | "sha512": "sha512-prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", 771 | "path": "system.collections.nongeneric/4.3.0", 772 | "hashPath": "system.collections.nongeneric.4.3.0.nupkg.sha512" 773 | }, 774 | "System.Collections.Specialized/4.3.0": { 775 | "type": "package", 776 | "serviceable": true, 777 | "sha512": "sha512-Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==", 778 | "path": "system.collections.specialized/4.3.0", 779 | "hashPath": "system.collections.specialized.4.3.0.nupkg.sha512" 780 | }, 781 | "System.ComponentModel/4.3.0": { 782 | "type": "package", 783 | "serviceable": true, 784 | "sha512": "sha512-VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", 785 | "path": "system.componentmodel/4.3.0", 786 | "hashPath": "system.componentmodel.4.3.0.nupkg.sha512" 787 | }, 788 | "System.ComponentModel.Primitives/4.3.0": { 789 | "type": "package", 790 | "serviceable": true, 791 | "sha512": "sha512-j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", 792 | "path": "system.componentmodel.primitives/4.3.0", 793 | "hashPath": "system.componentmodel.primitives.4.3.0.nupkg.sha512" 794 | }, 795 | "System.ComponentModel.TypeConverter/4.3.0": { 796 | "type": "package", 797 | "serviceable": true, 798 | "sha512": "sha512-16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==", 799 | "path": "system.componentmodel.typeconverter/4.3.0", 800 | "hashPath": "system.componentmodel.typeconverter.4.3.0.nupkg.sha512" 801 | }, 802 | "System.Diagnostics.Debug/4.3.0": { 803 | "type": "package", 804 | "serviceable": true, 805 | "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", 806 | "path": "system.diagnostics.debug/4.3.0", 807 | "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" 808 | }, 809 | "System.Diagnostics.Tools/4.3.0": { 810 | "type": "package", 811 | "serviceable": true, 812 | "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", 813 | "path": "system.diagnostics.tools/4.3.0", 814 | "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" 815 | }, 816 | "System.Diagnostics.Tracing/4.3.0": { 817 | "type": "package", 818 | "serviceable": true, 819 | "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", 820 | "path": "system.diagnostics.tracing/4.3.0", 821 | "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" 822 | }, 823 | "System.Globalization/4.3.0": { 824 | "type": "package", 825 | "serviceable": true, 826 | "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", 827 | "path": "system.globalization/4.3.0", 828 | "hashPath": "system.globalization.4.3.0.nupkg.sha512" 829 | }, 830 | "System.Globalization.Extensions/4.3.0": { 831 | "type": "package", 832 | "serviceable": true, 833 | "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", 834 | "path": "system.globalization.extensions/4.3.0", 835 | "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" 836 | }, 837 | "System.IO/4.3.0": { 838 | "type": "package", 839 | "serviceable": true, 840 | "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", 841 | "path": "system.io/4.3.0", 842 | "hashPath": "system.io.4.3.0.nupkg.sha512" 843 | }, 844 | "System.IO.FileSystem/4.3.0": { 845 | "type": "package", 846 | "serviceable": true, 847 | "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", 848 | "path": "system.io.filesystem/4.3.0", 849 | "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" 850 | }, 851 | "System.IO.FileSystem.Primitives/4.3.0": { 852 | "type": "package", 853 | "serviceable": true, 854 | "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", 855 | "path": "system.io.filesystem.primitives/4.3.0", 856 | "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" 857 | }, 858 | "System.Linq/4.3.0": { 859 | "type": "package", 860 | "serviceable": true, 861 | "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", 862 | "path": "system.linq/4.3.0", 863 | "hashPath": "system.linq.4.3.0.nupkg.sha512" 864 | }, 865 | "System.Net.NameResolution/4.3.0": { 866 | "type": "package", 867 | "serviceable": true, 868 | "sha512": "sha512-AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==", 869 | "path": "system.net.nameresolution/4.3.0", 870 | "hashPath": "system.net.nameresolution.4.3.0.nupkg.sha512" 871 | }, 872 | "System.Net.Primitives/4.3.0": { 873 | "type": "package", 874 | "serviceable": true, 875 | "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", 876 | "path": "system.net.primitives/4.3.0", 877 | "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" 878 | }, 879 | "System.Private.DataContractSerialization/4.3.0": { 880 | "type": "package", 881 | "serviceable": true, 882 | "sha512": "sha512-yDaJ2x3mMmjdZEDB4IbezSnCsnjQ4BxinKhRAaP6kEgL6Bb6jANWphs5SzyD8imqeC/3FxgsuXT6ykkiH1uUmA==", 883 | "path": "system.private.datacontractserialization/4.3.0", 884 | "hashPath": "system.private.datacontractserialization.4.3.0.nupkg.sha512" 885 | }, 886 | "System.Private.Uri/4.3.2": { 887 | "type": "package", 888 | "serviceable": true, 889 | "sha512": "sha512-o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", 890 | "path": "system.private.uri/4.3.2", 891 | "hashPath": "system.private.uri.4.3.2.nupkg.sha512" 892 | }, 893 | "System.Reflection/4.3.0": { 894 | "type": "package", 895 | "serviceable": true, 896 | "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", 897 | "path": "system.reflection/4.3.0", 898 | "hashPath": "system.reflection.4.3.0.nupkg.sha512" 899 | }, 900 | "System.Reflection.Emit/4.3.0": { 901 | "type": "package", 902 | "serviceable": true, 903 | "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", 904 | "path": "system.reflection.emit/4.3.0", 905 | "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" 906 | }, 907 | "System.Reflection.Emit.ILGeneration/4.3.0": { 908 | "type": "package", 909 | "serviceable": true, 910 | "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", 911 | "path": "system.reflection.emit.ilgeneration/4.3.0", 912 | "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" 913 | }, 914 | "System.Reflection.Emit.Lightweight/4.3.0": { 915 | "type": "package", 916 | "serviceable": true, 917 | "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", 918 | "path": "system.reflection.emit.lightweight/4.3.0", 919 | "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" 920 | }, 921 | "System.Reflection.Extensions/4.3.0": { 922 | "type": "package", 923 | "serviceable": true, 924 | "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", 925 | "path": "system.reflection.extensions/4.3.0", 926 | "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" 927 | }, 928 | "System.Reflection.Primitives/4.3.0": { 929 | "type": "package", 930 | "serviceable": true, 931 | "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", 932 | "path": "system.reflection.primitives/4.3.0", 933 | "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" 934 | }, 935 | "System.Reflection.TypeExtensions/4.3.0": { 936 | "type": "package", 937 | "serviceable": true, 938 | "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", 939 | "path": "system.reflection.typeextensions/4.3.0", 940 | "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" 941 | }, 942 | "System.Resources.ResourceManager/4.3.0": { 943 | "type": "package", 944 | "serviceable": true, 945 | "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", 946 | "path": "system.resources.resourcemanager/4.3.0", 947 | "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" 948 | }, 949 | "System.Runtime/4.3.0": { 950 | "type": "package", 951 | "serviceable": true, 952 | "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", 953 | "path": "system.runtime/4.3.0", 954 | "hashPath": "system.runtime.4.3.0.nupkg.sha512" 955 | }, 956 | "System.Runtime.Extensions/4.3.0": { 957 | "type": "package", 958 | "serviceable": true, 959 | "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", 960 | "path": "system.runtime.extensions/4.3.0", 961 | "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" 962 | }, 963 | "System.Runtime.Handles/4.3.0": { 964 | "type": "package", 965 | "serviceable": true, 966 | "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", 967 | "path": "system.runtime.handles/4.3.0", 968 | "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" 969 | }, 970 | "System.Runtime.InteropServices/4.3.0": { 971 | "type": "package", 972 | "serviceable": true, 973 | "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", 974 | "path": "system.runtime.interopservices/4.3.0", 975 | "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" 976 | }, 977 | "System.Runtime.Serialization.Formatters/4.3.0": { 978 | "type": "package", 979 | "serviceable": true, 980 | "sha512": "sha512-KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==", 981 | "path": "system.runtime.serialization.formatters/4.3.0", 982 | "hashPath": "system.runtime.serialization.formatters.4.3.0.nupkg.sha512" 983 | }, 984 | "System.Runtime.Serialization.Json/4.3.0": { 985 | "type": "package", 986 | "serviceable": true, 987 | "sha512": "sha512-CpVfOH0M/uZ5PH+M9+Gu56K0j9lJw3M+PKRegTkcrY/stOIvRUeonggxNrfBYLA5WOHL2j15KNJuTuld3x4o9w==", 988 | "path": "system.runtime.serialization.json/4.3.0", 989 | "hashPath": "system.runtime.serialization.json.4.3.0.nupkg.sha512" 990 | }, 991 | "System.Runtime.Serialization.Primitives/4.3.0": { 992 | "type": "package", 993 | "serviceable": true, 994 | "sha512": "sha512-Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==", 995 | "path": "system.runtime.serialization.primitives/4.3.0", 996 | "hashPath": "system.runtime.serialization.primitives.4.3.0.nupkg.sha512" 997 | }, 998 | "System.Security.Claims/4.3.0": { 999 | "type": "package", 1000 | "serviceable": true, 1001 | "sha512": "sha512-P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", 1002 | "path": "system.security.claims/4.3.0", 1003 | "hashPath": "system.security.claims.4.3.0.nupkg.sha512" 1004 | }, 1005 | "System.Security.Cryptography.Primitives/4.3.0": { 1006 | "type": "package", 1007 | "serviceable": true, 1008 | "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", 1009 | "path": "system.security.cryptography.primitives/4.3.0", 1010 | "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" 1011 | }, 1012 | "System.Security.Principal/4.3.0": { 1013 | "type": "package", 1014 | "serviceable": true, 1015 | "sha512": "sha512-I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", 1016 | "path": "system.security.principal/4.3.0", 1017 | "hashPath": "system.security.principal.4.3.0.nupkg.sha512" 1018 | }, 1019 | "System.Security.Principal.Windows/4.3.0": { 1020 | "type": "package", 1021 | "serviceable": true, 1022 | "sha512": "sha512-HVL1rvqYtnRCxFsYag/2le/ZfKLK4yMw79+s6FmKXbSCNN0JeAhrYxnRAHFoWRa0dEojsDcbBSpH3l22QxAVyw==", 1023 | "path": "system.security.principal.windows/4.3.0", 1024 | "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512" 1025 | }, 1026 | "System.Security.SecureString/4.3.0": { 1027 | "type": "package", 1028 | "serviceable": true, 1029 | "sha512": "sha512-PnXp38O9q/2Oe4iZHMH60kinScv6QiiL2XH54Pj2t0Y6c2zKPEiAZsM/M3wBOHLNTBDFP0zfy13WN2M0qFz5jg==", 1030 | "path": "system.security.securestring/4.3.0", 1031 | "hashPath": "system.security.securestring.4.3.0.nupkg.sha512" 1032 | }, 1033 | "System.Text.Encoding/4.3.0": { 1034 | "type": "package", 1035 | "serviceable": true, 1036 | "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", 1037 | "path": "system.text.encoding/4.3.0", 1038 | "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" 1039 | }, 1040 | "System.Text.Encoding.Extensions/4.3.0": { 1041 | "type": "package", 1042 | "serviceable": true, 1043 | "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", 1044 | "path": "system.text.encoding.extensions/4.3.0", 1045 | "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" 1046 | }, 1047 | "System.Text.RegularExpressions/4.3.0": { 1048 | "type": "package", 1049 | "serviceable": true, 1050 | "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", 1051 | "path": "system.text.regularexpressions/4.3.0", 1052 | "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" 1053 | }, 1054 | "System.Threading/4.3.0": { 1055 | "type": "package", 1056 | "serviceable": true, 1057 | "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", 1058 | "path": "system.threading/4.3.0", 1059 | "hashPath": "system.threading.4.3.0.nupkg.sha512" 1060 | }, 1061 | "System.Threading.Tasks/4.3.0": { 1062 | "type": "package", 1063 | "serviceable": true, 1064 | "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", 1065 | "path": "system.threading.tasks/4.3.0", 1066 | "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" 1067 | }, 1068 | "System.Threading.Tasks.Extensions/4.3.0": { 1069 | "type": "package", 1070 | "serviceable": true, 1071 | "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", 1072 | "path": "system.threading.tasks.extensions/4.3.0", 1073 | "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" 1074 | }, 1075 | "System.Xml.ReaderWriter/4.3.0": { 1076 | "type": "package", 1077 | "serviceable": true, 1078 | "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", 1079 | "path": "system.xml.readerwriter/4.3.0", 1080 | "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" 1081 | }, 1082 | "System.Xml.XDocument/4.3.0": { 1083 | "type": "package", 1084 | "serviceable": true, 1085 | "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", 1086 | "path": "system.xml.xdocument/4.3.0", 1087 | "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" 1088 | }, 1089 | "System.Xml.XmlDocument/4.3.0": { 1090 | "type": "package", 1091 | "serviceable": true, 1092 | "sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==", 1093 | "path": "system.xml.xmldocument/4.3.0", 1094 | "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" 1095 | }, 1096 | "System.Xml.XmlSerializer/4.3.0": { 1097 | "type": "package", 1098 | "serviceable": true, 1099 | "sha512": "sha512-MYoTCP7EZ98RrANESW05J5ZwskKDoN0AuZ06ZflnowE50LTpbR5yRg3tHckTVm5j/m47stuGgCrCHWePyHS70Q==", 1100 | "path": "system.xml.xmlserializer/4.3.0", 1101 | "hashPath": "system.xml.xmlserializer.4.3.0.nupkg.sha512" 1102 | } 1103 | } 1104 | } -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.exe -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.pdb -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.dev.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "additionalProbingPaths": [ 4 | "C:\\Users\\lesja\\.dotnet\\store\\|arch|\\|tfm|", 5 | "C:\\Users\\lesja\\.nuget\\packages", 6 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" 7 | ] 8 | } 9 | } -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "tfm": "netcoreapp3.1", 4 | "framework": { 5 | "name": "Microsoft.NETCore.App", 6 | "version": "3.1.0" 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileSystemGlobbing.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileSystemGlobbing.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll -------------------------------------------------------------------------------- /CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Identity.Client.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Identity.Client.dll -------------------------------------------------------------------------------- /CommandAPIClient/obj/CommandAPIClient.csproj.nuget.dgspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "format": 1, 3 | "restore": { 4 | "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj": {} 5 | }, 6 | "projects": { 7 | "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj": { 8 | "version": "1.0.0", 9 | "restore": { 10 | "projectUniqueName": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj", 11 | "projectName": "CommandAPIClient", 12 | "projectPath": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj", 13 | "packagesPath": "C:\\Users\\lesja\\.nuget\\packages\\", 14 | "outputPath": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\obj\\", 15 | "projectStyle": "PackageReference", 16 | "fallbackFolders": [ 17 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" 18 | ], 19 | "configFilePaths": [ 20 | "C:\\Users\\lesja\\AppData\\Roaming\\NuGet\\NuGet.Config", 21 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 22 | ], 23 | "originalTargetFrameworks": [ 24 | "netcoreapp3.1" 25 | ], 26 | "sources": { 27 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 28 | "https://api.nuget.org/v3/index.json": {} 29 | }, 30 | "frameworks": { 31 | "netcoreapp3.1": { 32 | "projectReferences": {} 33 | } 34 | }, 35 | "warningProperties": { 36 | "warnAsError": [ 37 | "NU1605" 38 | ] 39 | } 40 | }, 41 | "frameworks": { 42 | "netcoreapp3.1": { 43 | "dependencies": { 44 | "Microsoft.Extensions.Configuration": { 45 | "target": "Package", 46 | "version": "[3.1.5, )" 47 | }, 48 | "Microsoft.Extensions.Configuration.Binder": { 49 | "target": "Package", 50 | "version": "[3.1.5, )" 51 | }, 52 | "Microsoft.Extensions.Configuration.Json": { 53 | "target": "Package", 54 | "version": "[3.1.5, )" 55 | }, 56 | "Microsoft.Identity.Client": { 57 | "target": "Package", 58 | "version": "[4.15.0, )" 59 | } 60 | }, 61 | "imports": [ 62 | "net461", 63 | "net462", 64 | "net47", 65 | "net471", 66 | "net472", 67 | "net48" 68 | ], 69 | "assetTargetFallback": true, 70 | "warn": true, 71 | "frameworkReferences": { 72 | "Microsoft.NETCore.App": { 73 | "privateAssets": "all" 74 | } 75 | }, 76 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\3.1.301\\RuntimeIdentifierGraph.json" 77 | } 78 | } 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /CommandAPIClient/obj/CommandAPIClient.csproj.nuget.g.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | True 5 | NuGet 6 | $(MSBuildThisFileDirectory)project.assets.json 7 | $(UserProfile)\.nuget\packages\ 8 | C:\Users\lesja\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder 9 | PackageReference 10 | 5.6.0 11 | 12 | 13 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 14 | 15 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/CommandAPIClient.csproj.nuget.g.targets: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | 6 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | // 2 | using System; 3 | using System.Reflection; 4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")] 5 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | using System; 12 | using System.Reflection; 13 | 14 | [assembly: System.Reflection.AssemblyCompanyAttribute("CommandAPIClient")] 15 | [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] 16 | [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] 17 | [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] 18 | [assembly: System.Reflection.AssemblyProductAttribute("CommandAPIClient")] 19 | [assembly: System.Reflection.AssemblyTitleAttribute("CommandAPIClient")] 20 | [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] 21 | 22 | // Generated by the MSBuild WriteCodeFragment class. 23 | 24 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfoInputs.cache: -------------------------------------------------------------------------------- 1 | 7c7558353174d3baae864bd1a48da8cae824b9a2 2 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.assets.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.assets.cache -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CopyComplete: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CopyComplete -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CoreCompileInputs.cache: -------------------------------------------------------------------------------- 1 | 887b4607ea5ff3f6ba269a4ae19b990087764611 2 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.FileListAbsolute.txt: -------------------------------------------------------------------------------- 1 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.exe 2 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.deps.json 3 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.json 4 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.dev.json 5 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.dll 6 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.pdb 7 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.dll 8 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll 9 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll 10 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll 11 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll 12 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll 13 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll 14 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileSystemGlobbing.dll 15 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll 16 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Identity.Client.dll 17 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache 18 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfoInputs.cache 19 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfo.cs 20 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CoreCompileInputs.cache 21 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CopyComplete 22 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll 23 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb 24 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.genruntimeconfig.cache 25 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache 26 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfoInputs.cache 27 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfo.cs 28 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CoreCompileInputs.cache 29 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll 30 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb 31 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.exe -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.genruntimeconfig.cache: -------------------------------------------------------------------------------- 1 | 86c8e15dd33445635927cfaf398408205fd11473 2 | -------------------------------------------------------------------------------- /CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/complete-asp.net-core-3-api-tutorial/0dc4795615abe4c08383ab31f10d86772e460504/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb -------------------------------------------------------------------------------- /CommandAPIClient/obj/project.nuget.cache: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "dgSpecHash": "pEoU7DK2ckkt50SOAc156p8F3q3xno2RS/Y6Bdujdp6rPuV5MRjnJ60eVAvV+HsgyUDctNvJHtP62tP7v6JwSw==", 4 | "success": true, 5 | "projectFilePath": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj", 6 | "expectedPackageFiles": [ 7 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.csharp\\4.5.0\\microsoft.csharp.4.5.0.nupkg.sha512", 8 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration\\3.1.5\\microsoft.extensions.configuration.3.1.5.nupkg.sha512", 9 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\3.1.5\\microsoft.extensions.configuration.abstractions.3.1.5.nupkg.sha512", 10 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.binder\\3.1.5\\microsoft.extensions.configuration.binder.3.1.5.nupkg.sha512", 11 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\3.1.5\\microsoft.extensions.configuration.fileextensions.3.1.5.nupkg.sha512", 12 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.json\\3.1.5\\microsoft.extensions.configuration.json.3.1.5.nupkg.sha512", 13 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\3.1.5\\microsoft.extensions.fileproviders.abstractions.3.1.5.nupkg.sha512", 14 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\3.1.5\\microsoft.extensions.fileproviders.physical.3.1.5.nupkg.sha512", 15 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\3.1.5\\microsoft.extensions.filesystemglobbing.3.1.5.nupkg.sha512", 16 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.primitives\\3.1.5\\microsoft.extensions.primitives.3.1.5.nupkg.sha512", 17 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.identity.client\\4.15.0\\microsoft.identity.client.4.15.0.nupkg.sha512", 18 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.1\\microsoft.netcore.platforms.1.1.1.nupkg.sha512", 19 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.netcore.targets\\1.1.3\\microsoft.netcore.targets.1.1.3.nupkg.sha512", 20 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512", 21 | "C:\\Users\\lesja\\.nuget\\packages\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512", 22 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", 23 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512", 24 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections.nongeneric\\4.3.0\\system.collections.nongeneric.4.3.0.nupkg.sha512", 25 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections.specialized\\4.3.0\\system.collections.specialized.4.3.0.nupkg.sha512", 26 | "C:\\Users\\lesja\\.nuget\\packages\\system.componentmodel\\4.3.0\\system.componentmodel.4.3.0.nupkg.sha512", 27 | "C:\\Users\\lesja\\.nuget\\packages\\system.componentmodel.primitives\\4.3.0\\system.componentmodel.primitives.4.3.0.nupkg.sha512", 28 | "C:\\Users\\lesja\\.nuget\\packages\\system.componentmodel.typeconverter\\4.3.0\\system.componentmodel.typeconverter.4.3.0.nupkg.sha512", 29 | "C:\\Users\\lesja\\.nuget\\packages\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512", 30 | "C:\\Users\\lesja\\.nuget\\packages\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512", 31 | "C:\\Users\\lesja\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512", 32 | "C:\\Users\\lesja\\.nuget\\packages\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", 33 | "C:\\Users\\lesja\\.nuget\\packages\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512", 34 | "C:\\Users\\lesja\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", 35 | "C:\\Users\\lesja\\.nuget\\packages\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512", 36 | "C:\\Users\\lesja\\.nuget\\packages\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512", 37 | "C:\\Users\\lesja\\.nuget\\packages\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512", 38 | "C:\\Users\\lesja\\.nuget\\packages\\system.net.nameresolution\\4.3.0\\system.net.nameresolution.4.3.0.nupkg.sha512", 39 | "C:\\Users\\lesja\\.nuget\\packages\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512", 40 | "C:\\Users\\lesja\\.nuget\\packages\\system.private.datacontractserialization\\4.3.0\\system.private.datacontractserialization.4.3.0.nupkg.sha512", 41 | "C:\\Users\\lesja\\.nuget\\packages\\system.private.uri\\4.3.2\\system.private.uri.4.3.2.nupkg.sha512", 42 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", 43 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.emit\\4.3.0\\system.reflection.emit.4.3.0.nupkg.sha512", 44 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512", 45 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512", 46 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512", 47 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", 48 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.typeextensions\\4.3.0\\system.reflection.typeextensions.4.3.0.nupkg.sha512", 49 | "C:\\Users\\lesja\\.nuget\\packages\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", 50 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", 51 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", 52 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", 53 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", 54 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.serialization.formatters\\4.3.0\\system.runtime.serialization.formatters.4.3.0.nupkg.sha512", 55 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.serialization.json\\4.3.0\\system.runtime.serialization.json.4.3.0.nupkg.sha512", 56 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.serialization.primitives\\4.3.0\\system.runtime.serialization.primitives.4.3.0.nupkg.sha512", 57 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.claims\\4.3.0\\system.security.claims.4.3.0.nupkg.sha512", 58 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512", 59 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.principal\\4.3.0\\system.security.principal.4.3.0.nupkg.sha512", 60 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.principal.windows\\4.3.0\\system.security.principal.windows.4.3.0.nupkg.sha512", 61 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.securestring\\4.3.0\\system.security.securestring.4.3.0.nupkg.sha512", 62 | "C:\\Users\\lesja\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", 63 | "C:\\Users\\lesja\\.nuget\\packages\\system.text.encoding.extensions\\4.3.0\\system.text.encoding.extensions.4.3.0.nupkg.sha512", 64 | "C:\\Users\\lesja\\.nuget\\packages\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512", 65 | "C:\\Users\\lesja\\.nuget\\packages\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512", 66 | "C:\\Users\\lesja\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", 67 | "C:\\Users\\lesja\\.nuget\\packages\\system.threading.tasks.extensions\\4.3.0\\system.threading.tasks.extensions.4.3.0.nupkg.sha512", 68 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.readerwriter\\4.3.0\\system.xml.readerwriter.4.3.0.nupkg.sha512", 69 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.xdocument\\4.3.0\\system.xml.xdocument.4.3.0.nupkg.sha512", 70 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.xmldocument\\4.3.0\\system.xml.xmldocument.4.3.0.nupkg.sha512", 71 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.xmlserializer\\4.3.0\\system.xml.xmlserializer.4.3.0.nupkg.sha512" 72 | ], 73 | "logs": [] 74 | } -------------------------------------------------------------------------------- /CommandAPISolution/.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.*~ 3 | project.lock.json 4 | .DS_Store 5 | *.pyc 6 | 7 | # Visual Studio Code 8 | .VS Code 9 | 10 | # User-specific files 11 | *.suo 12 | *.user 13 | *.userosscache 14 | *.sln.docstates 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | build/ 24 | bld/ 25 | [Bb]in/ 26 | [Oo]bj/ 27 | msbuild.log 28 | msbuild.err 29 | msbuild.wrn 30 | 31 | # Visual Studio 32 | .vs/ 33 | 34 | # Compiled Source 35 | *.com 36 | *.class 37 | *.dll 38 | *.exe 39 | *.o 40 | *.so 41 | -------------------------------------------------------------------------------- /CommandAPISolution/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": ".NET Core Launch (console)", 9 | "type": "coreclr", 10 | "request": "launch", 11 | "preLaunchTask": "build", 12 | "program": "${workspaceFolder}/test/CommandAPI.Tests/bin/Debug/netcoreapp3.1/CommandAPI.Tests.dll", 13 | "args": [], 14 | "cwd": "${workspaceFolder}/test/CommandAPI.Tests", 15 | "console": "internalConsole", 16 | "stopAtEntry": false 17 | }, 18 | { 19 | "name": ".NET Core Attach", 20 | "type": "coreclr", 21 | "request": "attach", 22 | "processId": "${command:pickProcess}" 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /CommandAPISolution/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "build", 6 | "command": "dotnet", 7 | "type": "process", 8 | "args": [ 9 | "build", 10 | "${workspaceFolder}/test/CommandAPI.Tests/CommandAPI.Tests.csproj", 11 | "/property:GenerateFullPaths=true", 12 | "/consoleloggerparameters:NoSummary" 13 | ], 14 | "problemMatcher": "$msCompile" 15 | }, 16 | { 17 | "label": "publish", 18 | "command": "dotnet", 19 | "type": "process", 20 | "args": [ 21 | "publish", 22 | "${workspaceFolder}/test/CommandAPI.Tests/CommandAPI.Tests.csproj", 23 | "/property:GenerateFullPaths=true", 24 | "/consoleloggerparameters:NoSummary" 25 | ], 26 | "problemMatcher": "$msCompile" 27 | }, 28 | { 29 | "label": "watch", 30 | "command": "dotnet", 31 | "type": "process", 32 | "args": [ 33 | "watch", 34 | "run", 35 | "${workspaceFolder}/test/CommandAPI.Tests/CommandAPI.Tests.csproj", 36 | "/property:GenerateFullPaths=true", 37 | "/consoleloggerparameters:NoSummary" 38 | ], 39 | "problemMatcher": "$msCompile" 40 | } 41 | ] 42 | } -------------------------------------------------------------------------------- /CommandAPISolution/CommandAPISolution.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26124.0 5 | MinimumVisualStudioVersion = 15.0.26124.0 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B6E4FE01-9307-4F3F-BEFE-EC991E035353}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandAPI", "src\CommandAPI\CommandAPI.csproj", "{9845AF6A-A083-44AF-B483-C853467CC662}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{48FF3F06-F3B1-4E65-A2E6-A5E52999C6B7}" 11 | EndProject 12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandAPI.Tests", "test\CommandAPI.Tests\CommandAPI.Tests.csproj", "{57755B67-D6D1-43A5-A8AF-4C41FDC598EF}" 13 | EndProject 14 | Global 15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 16 | Debug|Any CPU = Debug|Any CPU 17 | Debug|x64 = Debug|x64 18 | Debug|x86 = Debug|x86 19 | Release|Any CPU = Release|Any CPU 20 | Release|x64 = Release|x64 21 | Release|x86 = Release|x86 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 27 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 28 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|Any CPU.Build.0 = Debug|Any CPU 29 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x64.ActiveCfg = Debug|Any CPU 30 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x64.Build.0 = Debug|Any CPU 31 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x86.ActiveCfg = Debug|Any CPU 32 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x86.Build.0 = Debug|Any CPU 33 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|Any CPU.ActiveCfg = Release|Any CPU 34 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|Any CPU.Build.0 = Release|Any CPU 35 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x64.ActiveCfg = Release|Any CPU 36 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x64.Build.0 = Release|Any CPU 37 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x86.ActiveCfg = Release|Any CPU 38 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x86.Build.0 = Release|Any CPU 39 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 40 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|Any CPU.Build.0 = Debug|Any CPU 41 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x64.ActiveCfg = Debug|Any CPU 42 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x64.Build.0 = Debug|Any CPU 43 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x86.ActiveCfg = Debug|Any CPU 44 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x86.Build.0 = Debug|Any CPU 45 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|Any CPU.ActiveCfg = Release|Any CPU 46 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|Any CPU.Build.0 = Release|Any CPU 47 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x64.ActiveCfg = Release|Any CPU 48 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x64.Build.0 = Release|Any CPU 49 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x86.ActiveCfg = Release|Any CPU 50 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x86.Build.0 = Release|Any CPU 51 | EndGlobalSection 52 | GlobalSection(NestedProjects) = preSolution 53 | {9845AF6A-A083-44AF-B483-C853467CC662} = {B6E4FE01-9307-4F3F-BEFE-EC991E035353} 54 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF} = {48FF3F06-F3B1-4E65-A2E6-A5E52999C6B7} 55 | EndGlobalSection 56 | EndGlobal 57 | -------------------------------------------------------------------------------- /CommandAPISolution/azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | trigger: 2 | - master 3 | 4 | pool: 5 | vmImage: 'ubuntu-latest' 6 | 7 | variables: 8 | buildConfiguration: 'Release' 9 | 10 | steps: 11 | - task: UseDotNet@2 12 | - script: dotnet build --configuration $(buildConfiguration) 13 | displayName: 'dotnet build $(buildConfiguration)' 14 | - task: DotNetCoreCLI@2 15 | displayName: 'dotnet test' 16 | inputs: 17 | command: test 18 | projects: '**/*Tests/*.csproj' 19 | testRunTitle: 'xUNit Test Run' 20 | 21 | - task: DotNetCoreCLI@2 22 | displayName: 'dotnet publish' 23 | inputs: 24 | command: publish 25 | publishWebProjects: false 26 | projects: 'src/CommandAPI/*.csproj' 27 | arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)' 28 | 29 | - task: PublishBuildArtifacts@1 30 | displayName: 'publish artifacts' 31 | 32 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/CommandAPI.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | cabd2435-bee0-47b0-8990-0889111a5d36 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | runtime; build; native; contentfiles; analyzers; buildtransitive 16 | all 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Controllers/CommandsController.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using AutoMapper; 3 | using CommandAPI.Dtos; 4 | using CommandAPI.Data; 5 | using CommandAPI.Models; 6 | using System.Linq; 7 | using Microsoft.AspNetCore.Mvc; 8 | using Microsoft.AspNetCore.JsonPatch; 9 | using Microsoft.AspNetCore.Authorization; 10 | 11 | namespace CommandAPI.Controllers 12 | { 13 | [Route("api/[controller]")] 14 | [ApiController] 15 | public class CommandsController : ControllerBase 16 | { 17 | 18 | private readonly ICommandAPIRepo _repository; 19 | private readonly IMapper _mapper; 20 | 21 | public CommandsController(ICommandAPIRepo repository, IMapper mapper) 22 | { 23 | _repository = repository; 24 | _mapper = mapper; 25 | } 26 | 27 | 28 | //GET api/commands 29 | 30 | [HttpGet] 31 | public ActionResult> GetAllCommands() 32 | { 33 | var commandItems = _repository.GetAllCommands(); 34 | 35 | return Ok(_mapper.Map>(commandItems)); 36 | } 37 | 38 | //GET api/commands/{id} 39 | [Authorize] //Apply this attribute to lockdown this ActionResult (or others) 40 | [HttpGet("{id}", Name = "GetCommandById")] 41 | public ActionResult GetCommandById(int id) 42 | { 43 | var commandItem = _repository.GetCommandById(id); 44 | if (commandItem == null) 45 | { 46 | return NotFound(); 47 | } 48 | return Ok(_mapper.Map(commandItem)); 49 | } 50 | 51 | //POST api/commands/ 52 | [HttpPost] 53 | public ActionResult CreateCommand(CommandCreateDto commandCreateDto) 54 | { 55 | var commandModel = _mapper.Map(commandCreateDto); 56 | _repository.CreateCommand(commandModel); 57 | _repository.SaveChanges(); 58 | 59 | var commandReadDto = _mapper.Map(commandModel); 60 | 61 | return CreatedAtRoute(nameof(GetCommandById), new { Id = commandReadDto.Id }, commandReadDto); 62 | } 63 | 64 | //PUT api/commands/{id} 65 | [HttpPut("{id}")] 66 | public ActionResult UpdateCommand(int id, CommandUpdateDto commandUpdateDto) 67 | { 68 | var commandModelFromRepo = _repository.GetCommandById(id); 69 | if (commandModelFromRepo == null) 70 | { 71 | return NotFound(); 72 | } 73 | _mapper.Map(commandUpdateDto, commandModelFromRepo); 74 | 75 | _repository.UpdateCommand(commandModelFromRepo); 76 | 77 | _repository.SaveChanges(); 78 | 79 | return NoContent(); 80 | } 81 | 82 | //PATCH api/commands/{id} 83 | [HttpPatch("{id}")] 84 | public ActionResult PartialCommandUpdate(int id, JsonPatchDocument patchDoc) 85 | { 86 | var commandModelFromRepo = _repository.GetCommandById(id); 87 | if(commandModelFromRepo == null) 88 | { 89 | return NotFound(); 90 | } 91 | 92 | var commandToPatch = _mapper.Map(commandModelFromRepo); 93 | patchDoc.ApplyTo(commandToPatch, ModelState); 94 | 95 | if(!TryValidateModel(commandToPatch)) 96 | { 97 | return ValidationProblem(ModelState); 98 | } 99 | 100 | _mapper.Map(commandToPatch, commandModelFromRepo); 101 | 102 | _repository.UpdateCommand(commandModelFromRepo); 103 | 104 | _repository.SaveChanges(); 105 | 106 | return NoContent(); 107 | } 108 | 109 | //DELETE api/commands/{id} 110 | [HttpDelete("{id}")] 111 | public ActionResult DeleteCommand(int id) 112 | { 113 | var commandModelFromRepo = _repository.GetCommandById(id); 114 | if(commandModelFromRepo == null) 115 | { 116 | return NotFound(); 117 | } 118 | _repository.DeleteCommand(commandModelFromRepo); 119 | _repository.SaveChanges(); 120 | 121 | return NoContent(); 122 | } 123 | } 124 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Data/CommandContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | using CommandAPI.Models; 3 | 4 | namespace CommandAPI.Data 5 | { 6 | public class CommandContext : DbContext 7 | { 8 | public CommandContext(DbContextOptions options) : base(options) 9 | { 10 | 11 | } 12 | 13 | public DbSet CommandItems {get; set;} 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Data/ICommandAPIRepo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using CommandAPI.Models; 3 | 4 | namespace CommandAPI.Data 5 | { 6 | public interface ICommandAPIRepo 7 | { 8 | bool SaveChanges(); 9 | 10 | IEnumerable GetAllCommands(); 11 | Command GetCommandById(int id); 12 | void CreateCommand(Command cmd); 13 | void UpdateCommand(Command cmd); 14 | void DeleteCommand(Command cmd); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Data/MockCommandAPIRepo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using CommandAPI.Models; 3 | 4 | namespace CommandAPI.Data 5 | { 6 | public class MockCommandAPIRepo : ICommandAPIRepo 7 | { 8 | public void CreateCommand(Command cmd) 9 | { 10 | throw new System.NotImplementedException(); 11 | } 12 | 13 | public void DeleteCommand(Command cmd) 14 | { 15 | throw new System.NotImplementedException(); 16 | } 17 | 18 | public IEnumerable GetAllCommands() 19 | { 20 | var commands = new List 21 | { 22 | new Command{ 23 | Id=0, HowTo="How to genrate a migration", 24 | CommandLine="dotnet ef migrations add ", 25 | Platform=".Net Core EF"}, 26 | new Command{ 27 | Id=1, HowTo="Run Migrations", 28 | CommandLine="dotnet ef database update", 29 | Platform=".Net Core EF"}, 30 | new Command{ 31 | Id=2, HowTo="List active migrations", 32 | CommandLine="dotnet ef migrations list", 33 | Platform=".Net Core EF"} 34 | }; 35 | 36 | return commands; 37 | } 38 | 39 | public Command GetCommandById(int id) 40 | { 41 | return new Command{ 42 | Id=0, HowTo="How to genrate a migration", 43 | CommandLine="dotnet ef migrations add ", 44 | Platform=".Net Core EF"}; 45 | } 46 | 47 | public bool SaveChanges() 48 | { 49 | throw new System.NotImplementedException(); 50 | } 51 | 52 | public void UpdateCommand(Command cmd) 53 | { 54 | throw new System.NotImplementedException(); 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Data/SqlCommandAPIRepo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using CommandAPI.Models; 5 | 6 | namespace CommandAPI.Data 7 | { 8 | public class SqlCommandAPIRepo : ICommandAPIRepo 9 | { 10 | private readonly CommandContext _context; 11 | 12 | public SqlCommandAPIRepo(CommandContext context) 13 | { 14 | _context = context; 15 | } 16 | 17 | public void CreateCommand(Command cmd) 18 | { 19 | if(cmd == null) 20 | { 21 | throw new ArgumentNullException(nameof(cmd)); 22 | } 23 | 24 | _context.CommandItems.Add(cmd); 25 | } 26 | 27 | public void DeleteCommand(Command cmd) 28 | { 29 | if(cmd == null) 30 | { 31 | throw new ArgumentNullException(nameof(cmd)); 32 | } 33 | _context.CommandItems.Remove(cmd); 34 | } 35 | 36 | public IEnumerable GetAllCommands() 37 | { 38 | return _context.CommandItems.ToList(); 39 | } 40 | 41 | public Command GetCommandById(int id) 42 | { 43 | return _context.CommandItems.FirstOrDefault(p => p.Id == id); 44 | } 45 | 46 | public bool SaveChanges() 47 | { 48 | return (_context.SaveChanges() >= 0); 49 | } 50 | 51 | public void UpdateCommand(Command cmd) 52 | { 53 | //This does nothing 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Dtos/CommandCreateDto.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace CommandAPI.Dtos 4 | { 5 | public class CommandCreateDto 6 | { 7 | [Required] 8 | [MaxLength(250)] 9 | public string HowTo {get; set;} 10 | 11 | [Required] 12 | public string Platform {get; set;} 13 | 14 | [Required] 15 | public string CommandLine {get; set;} 16 | } 17 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Dtos/CommandReadDto.cs: -------------------------------------------------------------------------------- 1 | namespace CommandAPI.Dtos 2 | { 3 | public class CommandReadDto 4 | { 5 | public int Id {get; set;} 6 | 7 | public string HowTo {get; set;} 8 | 9 | public string Platform {get; set;} 10 | 11 | public string CommandLine {get; set;} 12 | } 13 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Dtos/CommandUpdateDto.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace CommandAPI.Dtos 4 | { 5 | public class CommandUpdateDto 6 | { 7 | [Required] 8 | [MaxLength(250)] 9 | public string HowTo {get; set;} 10 | 11 | [Required] 12 | public string Platform {get; set;} 13 | 14 | [Required] 15 | public string CommandLine {get; set;} 16 | } 17 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Migrations/20200524224711_AddCommandsToDB.Designer.cs: -------------------------------------------------------------------------------- 1 | // 2 | using CommandAPI.Data; 3 | using Microsoft.EntityFrameworkCore; 4 | using Microsoft.EntityFrameworkCore.Infrastructure; 5 | using Microsoft.EntityFrameworkCore.Migrations; 6 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; 7 | using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; 8 | 9 | namespace CommandAPI.Migrations 10 | { 11 | [DbContext(typeof(CommandContext))] 12 | [Migration("20200524224711_AddCommandsToDB")] 13 | partial class AddCommandsToDB 14 | { 15 | protected override void BuildTargetModel(ModelBuilder modelBuilder) 16 | { 17 | #pragma warning disable 612, 618 18 | modelBuilder 19 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn) 20 | .HasAnnotation("ProductVersion", "3.1.4") 21 | .HasAnnotation("Relational:MaxIdentifierLength", 63); 22 | 23 | modelBuilder.Entity("CommandAPI.Models.Command", b => 24 | { 25 | b.Property("Id") 26 | .ValueGeneratedOnAdd() 27 | .HasColumnType("integer") 28 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); 29 | 30 | b.Property("CommandLine") 31 | .IsRequired() 32 | .HasColumnType("text"); 33 | 34 | b.Property("HowTo") 35 | .IsRequired() 36 | .HasColumnType("character varying(250)") 37 | .HasMaxLength(250); 38 | 39 | b.Property("Platform") 40 | .IsRequired() 41 | .HasColumnType("text"); 42 | 43 | b.HasKey("Id"); 44 | 45 | b.ToTable("CommandItems"); 46 | }); 47 | #pragma warning restore 612, 618 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Migrations/20200524224711_AddCommandsToDB.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore.Migrations; 2 | using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; 3 | 4 | namespace CommandAPI.Migrations 5 | { 6 | public partial class AddCommandsToDB : Migration 7 | { 8 | protected override void Up(MigrationBuilder migrationBuilder) 9 | { 10 | migrationBuilder.CreateTable( 11 | name: "CommandItems", 12 | columns: table => new 13 | { 14 | Id = table.Column(nullable: false) 15 | .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), 16 | HowTo = table.Column(maxLength: 250, nullable: false), 17 | Platform = table.Column(nullable: false), 18 | CommandLine = table.Column(nullable: false) 19 | }, 20 | constraints: table => 21 | { 22 | table.PrimaryKey("PK_CommandItems", x => x.Id); 23 | }); 24 | } 25 | 26 | protected override void Down(MigrationBuilder migrationBuilder) 27 | { 28 | migrationBuilder.DropTable( 29 | name: "CommandItems"); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Migrations/CommandContextModelSnapshot.cs: -------------------------------------------------------------------------------- 1 | // 2 | using CommandAPI.Data; 3 | using Microsoft.EntityFrameworkCore; 4 | using Microsoft.EntityFrameworkCore.Infrastructure; 5 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; 6 | using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; 7 | 8 | namespace CommandAPI.Migrations 9 | { 10 | [DbContext(typeof(CommandContext))] 11 | partial class CommandContextModelSnapshot : ModelSnapshot 12 | { 13 | protected override void BuildModel(ModelBuilder modelBuilder) 14 | { 15 | #pragma warning disable 612, 618 16 | modelBuilder 17 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn) 18 | .HasAnnotation("ProductVersion", "3.1.4") 19 | .HasAnnotation("Relational:MaxIdentifierLength", 63); 20 | 21 | modelBuilder.Entity("CommandAPI.Models.Command", b => 22 | { 23 | b.Property("Id") 24 | .ValueGeneratedOnAdd() 25 | .HasColumnType("integer") 26 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); 27 | 28 | b.Property("CommandLine") 29 | .IsRequired() 30 | .HasColumnType("text"); 31 | 32 | b.Property("HowTo") 33 | .IsRequired() 34 | .HasColumnType("character varying(250)") 35 | .HasMaxLength(250); 36 | 37 | b.Property("Platform") 38 | .IsRequired() 39 | .HasColumnType("text"); 40 | 41 | b.HasKey("Id"); 42 | 43 | b.ToTable("CommandItems"); 44 | }); 45 | #pragma warning restore 612, 618 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Models/Command.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace CommandAPI.Models 4 | { 5 | public class Command 6 | { 7 | [Key] 8 | [Required] 9 | public int Id {get; set;} 10 | 11 | [Required] 12 | [MaxLength(250)] 13 | public string HowTo {get; set;} 14 | 15 | [Required] 16 | public string Platform {get; set;} 17 | 18 | [Required] 19 | public string CommandLine {get; set;} 20 | } 21 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Profiles/CommandsProfile.cs: -------------------------------------------------------------------------------- 1 | using AutoMapper; 2 | using CommandAPI.Dtos; 3 | using CommandAPI.Models; 4 | 5 | namespace CommandAPI.Profiles 6 | { 7 | public class CommandsProfile : Profile 8 | { 9 | public CommandsProfile() 10 | { 11 | //Source -> Target 12 | CreateMap(); 13 | CreateMap(); 14 | CreateMap(); 15 | CreateMap(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Hosting; 6 | using Microsoft.Extensions.Configuration; 7 | using Microsoft.Extensions.Hosting; 8 | using Microsoft.Extensions.Logging; 9 | 10 | namespace CommandAPI 11 | { 12 | public class Program 13 | { 14 | public static void Main(string[] args) 15 | { 16 | CreateHostBuilder(args).Build().Run(); 17 | } 18 | 19 | public static IHostBuilder CreateHostBuilder(string[] args) => 20 | Host.CreateDefaultBuilder(args) 21 | .ConfigureWebHostDefaults(webBuilder => 22 | { 23 | webBuilder.UseStartup(); 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:10197", 7 | "sslPort": 44339 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "CommandAPI": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "applicationUrl": "https://localhost:5001;http://localhost:5000", 22 | "environmentVariables": { 23 | "ASPNETCORE_ENVIRONMENT": "Development" 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/Startup.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using CommandAPI.Data; 6 | using Microsoft.AspNetCore.Builder; 7 | using Microsoft.AspNetCore.Hosting; 8 | using Microsoft.AspNetCore.Http; 9 | using Microsoft.Extensions.Configuration; 10 | using Microsoft.Extensions.DependencyInjection; 11 | using Microsoft.Extensions.Hosting; 12 | using Microsoft.EntityFrameworkCore; 13 | using Npgsql; 14 | using AutoMapper; 15 | using Newtonsoft.Json.Serialization; 16 | using Microsoft.AspNetCore.Authentication.JwtBearer; 17 | 18 | namespace CommandAPI 19 | { 20 | public class Startup 21 | { 22 | public IConfiguration Configuration {get;} 23 | public Startup(IConfiguration configuration) 24 | { 25 | Configuration = configuration; 26 | } 27 | 28 | public void ConfigureServices(IServiceCollection services) 29 | { 30 | var builder = new NpgsqlConnectionStringBuilder(); 31 | builder.ConnectionString = 32 | Configuration.GetConnectionString("PostgreSqlConnection"); 33 | builder.Username = Configuration["UserID"]; 34 | builder.Password = Configuration["Password"]; 35 | 36 | services.AddDbContext(opt => opt.UseNpgsql(builder.ConnectionString)); 37 | 38 | services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(opt => 39 | { 40 | opt.Audience = Configuration["ResourceID"]; 41 | opt.Authority = $"{Configuration["Instance"]}{Configuration["TenantId"]}"; 42 | }); 43 | 44 | services.AddControllers().AddNewtonsoftJson(s => { 45 | s.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 46 | }); 47 | 48 | services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); 49 | 50 | services.AddScoped(); 51 | } 52 | 53 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env, CommandContext context) 54 | { 55 | context.Database.Migrate(); 56 | if (env.IsDevelopment()) 57 | { 58 | app.UseDeveloperExceptionPage(); 59 | } 60 | 61 | app.UseRouting(); 62 | 63 | app.UseAuthentication(); 64 | app.UseAuthorization(); 65 | 66 | app.UseEndpoints(endpoints => 67 | { 68 | endpoints.MapControllers(); 69 | }); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | }, 9 | "ConnectionStrings": { 10 | "PostgreSqlConnection":"Host=localhost;Port=5432;Database=CmdAPI;Pooling=true;" 11 | } 12 | } 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /CommandAPISolution/src/CommandAPI/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | }, 9 | "AllowedHosts": "*" 10 | } -------------------------------------------------------------------------------- /CommandAPISolution/test/CommandAPI.Tests/CommandAPI.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /CommandAPISolution/test/CommandAPI.Tests/CommandTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Xunit; 3 | using CommandAPI.Models; 4 | 5 | namespace CommandAPI.Tests 6 | { 7 | public class CommandTests : IDisposable 8 | { 9 | Command testCommand; 10 | 11 | public CommandTests() 12 | { 13 | testCommand = new Command 14 | { 15 | HowTo = "Do something", 16 | Platform = "Some platform", 17 | CommandLine = "Some commandline" 18 | }; 19 | } 20 | 21 | public void Dispose() 22 | { 23 | testCommand = null; 24 | } 25 | 26 | 27 | [Fact] 28 | public void CanChangeHowTo() 29 | { 30 | //Arrange 31 | 32 | //Act 33 | testCommand.HowTo = "Execute Unit Tests"; 34 | 35 | //Assert 36 | Assert.Equal("Execute Unit Tests", testCommand.HowTo); 37 | 38 | } 39 | 40 | [Fact] 41 | public void CanChangePlatform() 42 | { 43 | //Arrange 44 | 45 | //Act 46 | testCommand.Platform = "xUnit"; 47 | 48 | //Assert 49 | Assert.Equal("xUnit", testCommand.Platform); 50 | 51 | } 52 | 53 | [Fact] 54 | public void CanChangeCommandLine() 55 | { 56 | //Arrange 57 | 58 | //Act 59 | testCommand.CommandLine = "dotnet test"; 60 | 61 | //Assert 62 | Assert.Equal("dotnet test", testCommand.CommandLine); 63 | 64 | } 65 | 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /CommandAPISolution/test/CommandAPI.Tests/CommandsControllerTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Moq; 4 | using AutoMapper; 5 | using CommandAPI.Models; 6 | using Xunit; 7 | using CommandAPI.Controllers; 8 | using CommandAPI.Data; 9 | using CommandAPI.Profiles; 10 | using Microsoft.AspNetCore.Mvc; 11 | using CommandAPI.Dtos; 12 | 13 | using Newtonsoft.Json.Serialization; 14 | 15 | namespace CommandAPI.Tests 16 | { 17 | public class CommandsControllerTests : IDisposable 18 | { 19 | Mock mockRepo; 20 | CommandsProfile realProfile; 21 | MapperConfiguration configuration; 22 | IMapper mapper; 23 | 24 | public CommandsControllerTests() 25 | { 26 | mockRepo = new Mock(); 27 | realProfile = new CommandsProfile(); 28 | configuration = new MapperConfiguration(cfg => cfg.AddProfile(realProfile)); 29 | mapper = new Mapper(configuration); 30 | } 31 | 32 | public void Dispose() 33 | { 34 | mockRepo = null; 35 | mapper = null; 36 | configuration = null; 37 | realProfile = null; 38 | } 39 | 40 | 41 | 42 | //************************************************** 43 | //* 44 | //GET /api/commands Unit Tests 45 | //* 46 | //************************************************** 47 | 48 | //TEST 1.1 49 | [Fact] 50 | public void GetAllCommands_ReturnsZeroResources_WhenDBIsEmpty() 51 | { 52 | //Arrange 53 | mockRepo.Setup(repo => 54 | repo.GetAllCommands()).Returns(GetCommands(0)); 55 | 56 | var controller = new CommandsController(mockRepo.Object, mapper); 57 | 58 | //Act 59 | var result = controller.GetAllCommands(); 60 | 61 | //Assert 62 | Assert.IsType(result.Result); 63 | } 64 | 65 | //TEST 1.2 66 | [Fact] 67 | public void GetAllCommands_ReturnsOneResource_WhenDBHasOneResource() 68 | { 69 | //Arrange 70 | mockRepo.Setup(repo => 71 | repo.GetAllCommands()).Returns(GetCommands(1)); 72 | 73 | var controller = new CommandsController(mockRepo.Object, mapper); 74 | 75 | //Act 76 | var result = controller.GetAllCommands(); 77 | 78 | //Assert 79 | var okResult = result.Result as OkObjectResult; 80 | 81 | var commands = okResult.Value as List; 82 | 83 | Assert.Single(commands); 84 | } 85 | 86 | //TEST 1.3 87 | [Fact] 88 | public void GetAllCommands_Returns200OK_WhenDBHasOneResource() 89 | { 90 | //Arrange 91 | mockRepo.Setup(repo => 92 | repo.GetAllCommands()).Returns(GetCommands(1)); 93 | 94 | var controller = new CommandsController(mockRepo.Object, mapper); 95 | 96 | //Act 97 | var result = controller.GetAllCommands(); 98 | 99 | //Assert 100 | Assert.IsType(result.Result); 101 | 102 | } 103 | 104 | //TEST 1.4 105 | [Fact] 106 | public void GetAllCommands_ReturnsCorrectType_WhenDBHasOneResource() 107 | { 108 | //Arrange 109 | mockRepo.Setup(repo => 110 | repo.GetAllCommands()).Returns(GetCommands(1)); 111 | 112 | var controller = new CommandsController(mockRepo.Object, mapper); 113 | 114 | //Act 115 | var result = controller.GetAllCommands(); 116 | 117 | //Assert 118 | Assert.IsType>>(result); 119 | } 120 | 121 | //************************************************** 122 | //* 123 | //GET /api/commands/{id} Unit Tests 124 | //* 125 | //************************************************** 126 | 127 | //TEST 2.1 128 | [Fact] 129 | public void GetCommandByID_Returns404NotFound_WhenNonExistentIDProvided() 130 | { 131 | //Arrange 132 | mockRepo.Setup(repo => 133 | repo.GetCommandById(0)).Returns(() => null); 134 | 135 | var controller = new CommandsController(mockRepo.Object, mapper); 136 | 137 | //Act 138 | var result = controller.GetCommandById(1); 139 | 140 | //Assert 141 | Assert.IsType(result.Result); 142 | } 143 | 144 | //TEST 2.2 145 | [Fact] 146 | public void GetCommandByID_Returns200OK__WhenValidIDProvided() 147 | { 148 | //Arrange 149 | mockRepo.Setup(repo => 150 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" }); 151 | 152 | var controller = new CommandsController(mockRepo.Object, mapper); 153 | 154 | //Act 155 | var result = controller.GetCommandById(1); 156 | 157 | //Assert 158 | Assert.IsType(result.Result); 159 | } 160 | 161 | //TEST 2.3 162 | [Fact] 163 | public void GetCommandByID_ReturnsCorrectResouceType_WhenValidIDProvided() 164 | { 165 | //Arrange 166 | mockRepo.Setup(repo => 167 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" }); 168 | 169 | var controller = new CommandsController(mockRepo.Object, mapper); 170 | 171 | //Act 172 | var result = controller.GetCommandById(1); 173 | 174 | //Assert 175 | Assert.IsType>(result); 176 | } 177 | 178 | //************************************************** 179 | //* 180 | //POST /api/commands/ Unit Tests 181 | //* 182 | //************************************************** 183 | 184 | //TEST 3.1 185 | [Fact] 186 | public void CreateCommand_ReturnsCorrectResourceType_WhenValidObjectSubmitted() 187 | { 188 | //Arrange 189 | mockRepo.Setup(repo => 190 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" }); 191 | 192 | var controller = new CommandsController(mockRepo.Object, mapper); 193 | 194 | //Act 195 | var result = controller.CreateCommand(new CommandCreateDto { }); 196 | 197 | //Assert 198 | Assert.IsType>(result); 199 | } 200 | 201 | //TEST 3.2 202 | [Fact] 203 | public void CreateCommand_Returns201Created_WhenValidObjectSubmitted() 204 | { 205 | //Arrange 206 | mockRepo.Setup(repo => 207 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" }); 208 | 209 | var controller = new CommandsController(mockRepo.Object, mapper); 210 | 211 | //Act 212 | var result = controller.CreateCommand(new CommandCreateDto { }); 213 | 214 | //Assert 215 | Assert.IsType(result.Result); 216 | } 217 | 218 | 219 | //************************************************** 220 | //* 221 | //PUT /api/commands/{id} Unit Tests 222 | //* 223 | //************************************************** 224 | 225 | //TEST 4.1 226 | [Fact] 227 | public void UpdateCommand_Returns204NoContent_WhenValidObjectSubmitted() 228 | { 229 | //Arrange 230 | mockRepo.Setup(repo => 231 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" }); 232 | 233 | var controller = new CommandsController(mockRepo.Object, mapper); 234 | 235 | //Act 236 | var result = controller.UpdateCommand(1, new CommandUpdateDto { }); 237 | 238 | //Assert 239 | Assert.IsType(result); 240 | } 241 | 242 | 243 | //TEST 4.2 244 | [Fact] 245 | public void UpdateCommand_Returns404NotFound_WhenNonExistentResourceIDSubmitted() 246 | { 247 | //Arrange 248 | mockRepo.Setup(repo => 249 | repo.GetCommandById(0)).Returns(() => null); 250 | 251 | var controller = new CommandsController(mockRepo.Object, mapper); 252 | 253 | //Act 254 | var result = controller.UpdateCommand(0, new CommandUpdateDto { }); 255 | 256 | //Assert 257 | Assert.IsType(result); 258 | } 259 | 260 | 261 | //************************************************** 262 | //* 263 | //PATCH /api/commands/{id} Unit Tests 264 | //* 265 | //************************************************** 266 | 267 | 268 | //TEST 5.1 269 | [Fact] 270 | public void PartialCommandUpdate_Returns404NotFound_WhenNonExistentResourceIDSubmitted() 271 | { 272 | //Arrange 273 | mockRepo.Setup(repo => 274 | repo.GetCommandById(0)).Returns(() => null); 275 | 276 | var controller = new CommandsController(mockRepo.Object, mapper); 277 | 278 | //Act 279 | var result = controller.PartialCommandUpdate(0, new Microsoft.AspNetCore.JsonPatch.JsonPatchDocument { }); 280 | 281 | //Assert 282 | Assert.IsType(result); 283 | } 284 | 285 | 286 | //************************************************** 287 | //* 288 | //DELETE /api/commands/{id} Unit Tests 289 | //* 290 | //************************************************** 291 | 292 | //TEST 6.1 293 | [Fact] 294 | public void DeleteCommand_Returns200OK_WhenValidResourceIDSubmitted() 295 | { 296 | //Arrange 297 | mockRepo.Setup(repo => 298 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" }); 299 | 300 | var controller = new CommandsController(mockRepo.Object, mapper); 301 | 302 | //Act 303 | var result = controller.DeleteCommand(1); 304 | 305 | //Assert 306 | Assert.IsType(result); 307 | } 308 | 309 | //TEST 6.2 310 | [Fact] 311 | public void DeleteCommand_Returns_404NotFound_WhenNonExistentResourceIDSubmitted() 312 | { 313 | //Arrange 314 | mockRepo.Setup(repo => 315 | repo.GetCommandById(0)).Returns(() => null); 316 | 317 | var controller = new CommandsController(mockRepo.Object, mapper); 318 | 319 | //Act 320 | var result = controller.DeleteCommand(0); 321 | 322 | //Assert 323 | Assert.IsType(result); 324 | 325 | } 326 | 327 | //************************************************** 328 | //* 329 | //Private Support Methods 330 | //* 331 | //************************************************** 332 | 333 | 334 | 335 | 336 | private List GetCommands(int num) 337 | { 338 | var commands = new List(); 339 | if (num > 0) 340 | { 341 | commands.Add(new Command 342 | { 343 | Id = 0, 344 | HowTo = "How to genrate a migration", 345 | CommandLine = "dotnet ef migrations add ", 346 | Platform = ".Net Core EF" 347 | }); 348 | } 349 | return commands; 350 | } 351 | } 352 | } 353 | -------------------------------------------------------------------------------- /Contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to Apress Source Code 2 | 3 | Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. 4 | 5 | ## How to Contribute 6 | 7 | 1. Make sure you have a GitHub account. 8 | 2. Fork the repository for the relevant book. 9 | 3. Create a new branch on which to make your change, e.g. 10 | `git checkout -b my_code_contribution` 11 | 4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. 12 | 5. Submit a pull request. 13 | 14 | Thank you for your contribution! -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Freeware License, some rights reserved 2 | 3 | Copyright (c) 2020 Les Jackson 4 | 5 | Permission is hereby granted, free of charge, to anyone obtaining a copy 6 | of this software and associated documentation files (the "Software"), 7 | to work with the Software within the limits of freeware distribution and fair use. 8 | This includes the rights to use, copy, and modify the Software for personal use. 9 | Users are also allowed and encouraged to submit corrections and modifications 10 | to the Software for the benefit of other users. 11 | 12 | It is not allowed to reuse, modify, or redistribute the Software for 13 | commercial use in any way, or for a user’s educational materials such as books 14 | or blog articles without prior permission from the copyright holder. 15 | 16 | The above copyright notice and this permission notice need to be included 17 | in all copies or substantial portions of the software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS OR APRESS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | 27 | 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Apress Source Code 2 | 3 | This repository accompanies [*The Complete ASP.NET Core 3 API Tutorial*](https://www.apress.com/9781484262542) by Les Jackson (Apress, 2020). 4 | 5 | [comment]: #cover 6 | ![Cover image](9781484262542.jpg) 7 | 8 | Download the files as a zip using the green button, or clone the repository to your machine using Git. 9 | 10 | ## Releases 11 | 12 | Release v1.0 corresponds to the code in the published book, without corrections or updates. 13 | 14 | ## Contributions 15 | 16 | See the file Contributing.md for more information on how you can contribute to this repository. --------------------------------------------------------------------------------