From 8239aff9fabaaa7f5c9e2bc4898a80bc5cf9fb24 Mon Sep 17 00:00:00 2001 From: Joe McBride Date: Fri, 3 Feb 2017 12:37:55 -0800 Subject: [PATCH] Updates to support sites that use Authentication * Add IHttpContextAccessor singleton and populate HttpContext * Register JsonInputFormatter as the only InputFormatter * Defer to DefaultAthenticationManager in StubAuthenticationManager --- .../specs_against_aspnet_core_app.cs | 5 -- src/Alba.Testing/BasicScenarioSupport.cs | 3 +- src/Alba.Testing/FormDataExtensionsTests.cs | 4 +- src/Alba/Scenario.cs | 2 +- src/Alba/Stubs/StubAuthenticationManager.cs | 19 +++-- src/Alba/SystemUnderTest.cs | 1 + src/Alba/SystemUnderTestExtensions.cs | 5 ++ src/AlbaRouterStoryteller/project.lock.json | 74 +++++++++---------- src/WebApp/Controllers/JsonController.cs | 13 ++-- src/WebApp/Startup.cs | 8 +- 10 files changed, 68 insertions(+), 66 deletions(-) diff --git a/src/Alba.Testing/Acceptance/specs_against_aspnet_core_app.cs b/src/Alba.Testing/Acceptance/specs_against_aspnet_core_app.cs index bb6371b9..6393df54 100644 --- a/src/Alba.Testing/Acceptance/specs_against_aspnet_core_app.cs +++ b/src/Alba.Testing/Acceptance/specs_against_aspnet_core_app.cs @@ -1,8 +1,5 @@ using System; -using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Formatters; -using Microsoft.Extensions.DependencyInjection; using Shouldly; using WebApp; using WebApp.Controllers; @@ -16,8 +13,6 @@ private Task run(Action configuration) { using (var system = SystemUnderTest.ForStartup()) { - var formatters = system.Services.GetServices().ToArray(); - return system.Scenario(configuration); } } diff --git a/src/Alba.Testing/BasicScenarioSupport.cs b/src/Alba.Testing/BasicScenarioSupport.cs index 5ac0b275..8a9ca582 100644 --- a/src/Alba.Testing/BasicScenarioSupport.cs +++ b/src/Alba.Testing/BasicScenarioSupport.cs @@ -30,6 +30,7 @@ public class BasicScenarioSupport : ISystemUnderTest public BasicScenarioSupport() { var registry = new Registry(); + registry.ForSingletonOf().Use(); registry.Populate(new ServiceDescriptor[0]); Container = new Container(registry); @@ -40,7 +41,7 @@ public HttpContext CreateContext() return new StubHttpContext(Features, Services); } - public IFeatureCollection Features { get; } = null; + public IFeatureCollection Features { get; } = new FeatureCollection(); public IServiceProvider Services => new StructureMapServiceProvider(Container); public RequestDelegate Invoker => Invoke; diff --git a/src/Alba.Testing/FormDataExtensionsTests.cs b/src/Alba.Testing/FormDataExtensionsTests.cs index 62ae1cd0..e05d8fac 100644 --- a/src/Alba.Testing/FormDataExtensionsTests.cs +++ b/src/Alba.Testing/FormDataExtensionsTests.cs @@ -1,6 +1,4 @@ using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; using Alba.Stubs; using Baseline; using Shouldly; @@ -21,7 +19,7 @@ public void round_trip_writing_and_parsing() ["c"] = "really?" }; - var context = new StubHttpContext(null, null); + var context = StubHttpContext.Empty(); context.WriteFormData(form1); diff --git a/src/Alba/Scenario.cs b/src/Alba/Scenario.cs index 6c53c32e..a232f57b 100644 --- a/src/Alba/Scenario.cs +++ b/src/Alba/Scenario.cs @@ -223,7 +223,7 @@ SendExpression IUrlExpression.FormData(Dictionary input) public SendExpression Text(string text) { Body.TextIs(text); - Context.Request.ContentType = "text/plain"; + Context.Request.ContentType = MimeType.Text.Value; return new SendExpression(Context); } diff --git a/src/Alba/Stubs/StubAuthenticationManager.cs b/src/Alba/Stubs/StubAuthenticationManager.cs index 4269256a..9761a5ce 100644 --- a/src/Alba/Stubs/StubAuthenticationManager.cs +++ b/src/Alba/Stubs/StubAuthenticationManager.cs @@ -1,48 +1,51 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Authentication; +using Microsoft.AspNetCore.Http.Authentication.Internal; using Microsoft.AspNetCore.Http.Features.Authentication; namespace Alba { public class StubAuthenticationManager : AuthenticationManager { + private readonly DefaultAuthenticationManager _default; + public StubAuthenticationManager(HttpContext context) { HttpContext = context; + _default = new DefaultAuthenticationManager(context); } public override IEnumerable GetAuthenticationSchemes() { - throw new NotImplementedException(); + return _default.GetAuthenticationSchemes(); } public override Task GetAuthenticateInfoAsync(string authenticationScheme) { - throw new NotImplementedException(); + return _default.GetAuthenticateInfoAsync(authenticationScheme); } public override Task AuthenticateAsync(AuthenticateContext context) { - throw new NotImplementedException(); + return _default.AuthenticateAsync(context); } public override Task ChallengeAsync(string authenticationScheme, AuthenticationProperties properties, ChallengeBehavior behavior) { - throw new NotImplementedException(); + return _default.ChallengeAsync(authenticationScheme, properties, behavior); } public override Task SignInAsync(string authenticationScheme, ClaimsPrincipal principal, AuthenticationProperties properties) { - throw new NotImplementedException(); + return _default.SignInAsync(authenticationScheme, principal, properties); } public override Task SignOutAsync(string authenticationScheme, AuthenticationProperties properties) { - throw new NotImplementedException(); + return _default.SignOutAsync(authenticationScheme, properties); } public override HttpContext HttpContext { get; } diff --git a/src/Alba/SystemUnderTest.cs b/src/Alba/SystemUnderTest.cs index df496239..364061f0 100644 --- a/src/Alba/SystemUnderTest.cs +++ b/src/Alba/SystemUnderTest.cs @@ -56,6 +56,7 @@ public static SystemUnderTest ForStartup(Action configur { _.AddSingleton(environment); _.AddSingleton(new TestServer()); + _.AddSingleton(); }); builder.UseStartup(); diff --git a/src/Alba/SystemUnderTestExtensions.cs b/src/Alba/SystemUnderTestExtensions.cs index 99de511b..c316633d 100644 --- a/src/Alba/SystemUnderTestExtensions.cs +++ b/src/Alba/SystemUnderTestExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; namespace Alba @@ -13,6 +14,10 @@ public static async Task Scenario(this ISystemUnderTest system, using (var scope = system.Services.GetService().CreateScope()) { var scenario = new Scenario(system, scope); + + var contextAccessor = scope.ServiceProvider.GetService(); + contextAccessor.HttpContext = scenario.Context; + configure(scenario); scenario.Rewind(); diff --git a/src/AlbaRouterStoryteller/project.lock.json b/src/AlbaRouterStoryteller/project.lock.json index a4e87f85..3fd23e61 100644 --- a/src/AlbaRouterStoryteller/project.lock.json +++ b/src/AlbaRouterStoryteller/project.lock.json @@ -2960,7 +2960,7 @@ ] }, "Libuv/1.9.0": { - "sha512": "/U4PRouJDIIhex8f/n7TZUd9Gu0D0v2fElD0iVkko6vsj+HEgAQnduW3wZPwYCCIMuROEswvMRB4c4m7KmaTFQ==", + "sha512": "9Q7AaqtQhS8JDSIvRBt6ODSLWDBI4c8YxNxyCQemWebBFUtBbc6M5Vi5Gz1ZyIUlTW3rZK9bIr5gnVyv0z7a2Q==", "type": "package", "path": "Libuv/1.9.0", "files": [ @@ -3084,7 +3084,7 @@ ] }, "Microsoft.CodeAnalysis.Analyzers/1.1.0": { - "sha512": "fYvf9b2OPFbfT0qnfXDnF9GzyCDfBuXDFTFMrULKOnSZ57o8IA+F5NzY65YWwqtYlRRZtPnVLiWWqjGvpst6Zw==", + "sha512": "HS3iRWZKcUw/8eZ/08GXKY2Bn7xNzQPzf8gRPHGSowX7u7XXu9i9YEaBeBNKUXWfI7qjvT2zXtLUvbN0hds8vg==", "type": "package", "path": "Microsoft.CodeAnalysis.Analyzers/1.1.0", "files": [ @@ -3100,7 +3100,7 @@ ] }, "Microsoft.CodeAnalysis.Common/1.3.0": { - "sha512": "SwhLi5cM9p8km4GA3upWFvnJBc86SP7eO34euQtqfw5algyX3GT4N/fNwAUsoC8eci7OsBq+AwzJ8rM7vwrXrA==", + "sha512": "V09G35cs0CT1C4Dr1IEOh8IGfnWALEVAOO5JXsqagxXwmYR012TlorQ+vx2eXxfZRKs3gAS/r92gN9kRBLba5A==", "type": "package", "path": "Microsoft.CodeAnalysis.Common/1.3.0", "files": [ @@ -3116,7 +3116,7 @@ ] }, "Microsoft.CodeAnalysis.CSharp/1.3.0": { - "sha512": "U5f3jM1N2qZa1hO36uyKfQUdIKp+sMTmy12oN8XK2lBCeBjCpyKaEbmp8XFxiw5MSqnYlmksySyA5rMb1hmkDA==", + "sha512": "BgWDIAbSFsHuGeLSn/rljLi51nXqkSo4DZ0qEIrHyPVasrhxEVq7aV8KKZ3HEfSFB+GIhBmOogE+mlOLYg19eg==", "type": "package", "path": "Microsoft.CodeAnalysis.CSharp/1.3.0", "files": [ @@ -3132,7 +3132,7 @@ ] }, "Microsoft.CodeAnalysis.VisualBasic/1.3.0": { - "sha512": "SWJ9CRtNo4dXoaxxwK+tB28Uiz9ZWwFDNok9inMm74eXIF77DR+1BP3sEStyswb3j9Z8RddsB6CHI32rmDSGNA==", + "sha512": "Sf3k8PkTkWqBmXnnblJbvb7ewO6mJzX6WO2t7m04BmOY5qBq6yhhyXnn/BMM+QCec3Arw3X35Zd8f9eBql0qgg==", "type": "package", "path": "Microsoft.CodeAnalysis.VisualBasic/1.3.0", "files": [ @@ -3148,7 +3148,7 @@ ] }, "Microsoft.CSharp/4.0.1": { - "sha512": "VsdwI1tgSRH25H4G+2XpNsi53g6kDbXbR3yCPVm3HeO3lgqySH9M+QUGQDnRQmrSeOKLugUB4g4XC2zRg4pk5g==", + "sha512": "17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", "type": "package", "path": "Microsoft.CSharp/4.0.1", "files": [ @@ -3426,7 +3426,7 @@ ] }, "Microsoft.NETCore.DotNetHost/1.0.1": { - "sha512": "16Oe8O4oLMf15X5ItkxMbyTqxY8dxf1rHFSSv0zBRFYiA+F8PEc7Ms1rRVPEunedV/qI6YG5OxgVFkkEtosRcw==", + "sha512": "uaMgykq6AckP3hZW4dsD6zjocxyXPz0tcTl8OX7mlSUWsyFXdtf45sjdwI0JIHxt3gnI6GihAlOAwYK8HE4niQ==", "type": "package", "path": "Microsoft.NETCore.DotNetHost/1.0.1", "files": [ @@ -3438,7 +3438,7 @@ ] }, "Microsoft.NETCore.DotNetHostPolicy/1.0.1": { - "sha512": "ZK9bjItQySlGOTUNdIZT4Qsb3+Y0jcU2EIMEk4HXVj0h0a3ve2Kv0si13lzpq0c33JfVAg35H/cM+yHjgbtkZg==", + "sha512": "d8AQ+ZVj2iK9sbgl3IEsshCSaumhM1PNTPHxldZAQLOoI1BKF8QZ1zPCNqwBGisPiWOE3f/1SHDbQi1BTRBxuA==", "type": "package", "path": "Microsoft.NETCore.DotNetHostPolicy/1.0.1", "files": [ @@ -3450,7 +3450,7 @@ ] }, "Microsoft.NETCore.DotNetHostResolver/1.0.1": { - "sha512": "nas5sGgUDP6/t9IMBcT7rq5QFE69NAEMCjgiI8JUwZlJtd/lv62ct2ddPUsQ5F63tgRpg1+JTc6/lepSkJ43Ew==", + "sha512": "GEXgpAHB9E0OhfcmNJ664Xcd2bJkz2qkGIAFmCgEI5ANlQy4qEEmBVfUqA+Z9HB85ZwWxZc1eIJ6fxdxcjrctg==", "type": "package", "path": "Microsoft.NETCore.DotNetHostResolver/1.0.1", "files": [ @@ -3512,7 +3512,7 @@ ] }, "Microsoft.NETCore.Windows.ApiSets/1.0.1": { - "sha512": "jLRlTpWAEFMOtIV9JyGwLge2/CJhtZcO3gegK1ZOaep1jlyhLI9Kgi+9Tkb8h65c0fDRNf+QT7WsxVhXz5YZcQ==", + "sha512": "SaToCvvsGMxTgtLv/BrFQ5IFMPRE1zpWbnqbpwykJa8W5XiX82CXI6K2o7yf5xS7EP6t/JzFLV0SIDuWpvBZVw==", "type": "package", "path": "Microsoft.NETCore.Windows.ApiSets/1.0.1", "files": [ @@ -3524,7 +3524,7 @@ ] }, "Microsoft.VisualBasic/10.0.1": { - "sha512": "BAfAOI/+kDt2hEtdDPK7aWX2Q5r3vqzA545dslZWL5sVX7ojlLoH0T9cn29wLxbi2FViwMcc8LAlRXdCN+h/4w==", + "sha512": "HpNyOf/4Tp2lh4FyywB55VITk0SqVxEjDzsVDDyF1yafDN6Bq18xcHowzCPINyYHUTgGcEtmpYiRsFdSo0KKdQ==", "type": "package", "path": "Microsoft.VisualBasic/10.0.1", "files": [ @@ -3603,7 +3603,7 @@ ] }, "Microsoft.Win32.Registry/4.0.0": { - "sha512": "RUQ2UNQFvYY0s8HcrkAk3qgSfTvWZICoDjS+HjB55bQ8QS6L5XxXqaLk9IxN9zCMWg3pNd/Xau2jCEIKRjR/RQ==", + "sha512": "q+eLtROUAQ3OxYA5mpQrgyFgzLQxIyrfT2eLpYX5IEPlHmIio2nh4F5bgOaQoGOV865kFKZZso9Oq9RlazvXtg==", "type": "package", "path": "Microsoft.Win32.Registry/4.0.0", "files": [ @@ -3738,7 +3738,7 @@ ] }, "runtime.native.System.Net.Security/4.0.1": { - "sha512": "6qoYZ0ohW9NUM9EzeZqXzpOE8EwXaqNp28mxAvxT9Mj8UsN8p7jAAY3T2uTVxGO9/ukHx6dEowdg2RgDZZIpgQ==", + "sha512": "Az6Ff6rZFb8nYGAaejFR6jr8ktt9f3e1Q/yKdw0pwHNTLaO/1eCAC9vzBoR9YAb0QeZD6fZXl1A9tRB5stpzXA==", "type": "package", "path": "runtime.native.System.Net.Security/4.0.1", "files": [ @@ -3750,7 +3750,7 @@ ] }, "runtime.native.System.Security.Cryptography/4.0.0": { - "sha512": "dpezpyu5dt42o+zHt5IS8K+zG697h/n+nH89wDIQdEISDuqNbO9BqReMBd3inAVwm3J3eUBSr6+mwvHZou26IA==", + "sha512": "2CQK0jmO6Eu7ZeMgD+LOFbNJSXHFVQbCJJkEyEwowh1SCgYnrn9W9RykMfpeeVGw7h4IBvYikzpGUlmZTUafJw==", "type": "package", "path": "runtime.native.System.Security.Cryptography/4.0.0", "files": [ @@ -4163,7 +4163,7 @@ ] }, "System.ComponentModel.Annotations/4.1.0": { - "sha512": "1I9fLwAQqneKS++9eoG7p5/HT3eI0FQ19NkgkbTb9KGwpUaOEacC193qhL1NnN9fy8Ww3mgS/ny1AD/C7QBeBw==", + "sha512": "rhnz80h8NnHJzoi0nbQJLRR2cJznyqG168q1bgoSpe5qpaME2SguXzuEzpY68nFCi2kBgHpbU4bRN2cP3unYRA==", "type": "package", "path": "System.ComponentModel.Annotations/4.1.0", "files": [ @@ -4468,7 +4468,7 @@ ] }, "System.Diagnostics.FileVersionInfo/4.0.0": { - "sha512": "m7/TremAykKsQB3Y+zdwm5UcMiKhl9OoXR3hW4lugoVKo8LU/2k7YIfAZr0aqUz5VtX71cMjaRwc1Zc9CIAPyw==", + "sha512": "qjF74OTAU+mRhLaL4YSfiWy3vj6T3AOz8AW37l5zCwfbBfj0k7E94XnEsRaf2TnhE/7QaV6Hvqakoy2LoV8MVg==", "type": "package", "path": "System.Diagnostics.FileVersionInfo/4.0.0", "files": [ @@ -4508,7 +4508,7 @@ ] }, "System.Diagnostics.Process/4.1.0": { - "sha512": "iPr+LXSrrZB9MKm0mUDwkVWtTFACDqQ0OYqJWbinCEr7ucA++9fWXRxozWdaqdyVCuFfJh+HdHq6XaMDP+34Pw==", + "sha512": "mpVZ5bnlSs3tTeJ6jYyDJEIa6tavhAd88lxq1zbYhkkCu0Pno2+gHXcvZcoygq2d8JxW3gojXqNJMTAshduqZA==", "type": "package", "path": "System.Diagnostics.Process/4.1.0", "files": [ @@ -4820,7 +4820,7 @@ ] }, "System.Dynamic.Runtime/4.0.11": { - "sha512": "rFAqwjtPti6BmwTtYq/RKfxifkFBjuwXx9GGBJtlsal5ml1tgASUpt+Bwc9tJA9+umPaPuWflHnK4HV91k7epg==", + "sha512": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", "type": "package", "path": "System.Dynamic.Runtime/4.0.11", "files": [ @@ -5329,7 +5329,7 @@ ] }, "System.IO.MemoryMappedFiles/4.0.0": { - "sha512": "q85/y1vabEgVl1v6Z32y2Dgjpry3oKvOsGo9qzCjjTwqCz7/6Aj0CGbl+qFW12O0Spz1CzPrRaWqEz5aaJq18g==", + "sha512": "Xqj4xaFAnLVpss9ZSUIvB/VdJAA7GxZDnFGDKJfiGAnZ5VnFROn6eOHWepFpujCYTsh6wlZ3B33bqYkF0QJ7Eg==", "type": "package", "path": "System.IO.MemoryMappedFiles/4.0.0", "files": [ @@ -5369,7 +5369,7 @@ ] }, "System.IO.UnmanagedMemoryStream/4.0.1": { - "sha512": "XcAYM7802PG7lL1qlSldUJxhQlUTqimqjshx7FNCG3IKCmziC6mvavDx4ZdWdxfrc5gKi+nd4fY2Xuen3Ysf5w==", + "sha512": "wcq0kXcpfJwdl1Y4/ZjDk7Dhx5HdLyRYYWYmD8Nn8skoGYYQd2BQWbXwjWSczip8AL4Z57o2dWWXAl4aABAKiQ==", "type": "package", "path": "System.IO.UnmanagedMemoryStream/4.0.1", "files": [ @@ -5558,7 +5558,7 @@ ] }, "System.Linq.Parallel/4.0.1": { - "sha512": "for2Kb+qef4EXYc35uLl53SqrjWCUPN53Hw6lc4qtr1y8bwo53hUxQdXjgaK78pDGqXsTVM0PFxoSdUXV10+Mw==", + "sha512": "J7XCa7n2cFn32uLbtceXfBFhgCk5M++50lylHKNbqTiJkw5y4Tglpi6amuJNPCvj9bLzNSI7rs1fi4joLMNRgg==", "type": "package", "path": "System.Linq.Parallel/4.0.1", "files": [ @@ -5613,7 +5613,7 @@ ] }, "System.Linq.Queryable/4.0.1": { - "sha512": "3Wu+rNbRu18dDXedGhT2TRDNSgr9DVZ4CyoetDnRGXrcBX1jLao8NcSydxT3mnJBPdCgH569I4wSQONUDIlTvA==", + "sha512": "Yn/WfYe9RoRfmSLvUt2JerP0BTGGykCZkQPgojaxgzF2N0oPo+/AhB8TXOpdCcNlrG3VRtsamtK2uzsp3cqRVw==", "type": "package", "path": "System.Linq.Queryable/4.0.1", "files": [ @@ -5750,7 +5750,7 @@ ] }, "System.Net.NameResolution/4.0.0": { - "sha512": "Q/ab1gE3YJ3BYhBoJryzNS4WFZSkN9nqNn4i9NgyXnn+xAkNrcVnOG4cXvFY2QpGHIZUaN+yt41aMq8bZSbcJQ==", + "sha512": "JdqRdM1Qym3YehqdKIi5LHrpypP4JMfxKQSNCJ2z4WawkG0il+N3XfNeJOxll2XrTnG7WgYYPoeiu/KOwg0DQw==", "type": "package", "path": "System.Net.NameResolution/4.0.0", "files": [ @@ -5867,7 +5867,7 @@ ] }, "System.Net.Requests/4.0.11": { - "sha512": "RDMdyuOQdQ6zDxuLHuIk9ltCXiDOP46xG8N4tU2hNSKdZuEiHTxA6l0h/D/hWz+cGRnCRWmQXp4Z7KmoWG6VGw==", + "sha512": "vxGt7C0cZixN+VqoSW4Yakc1Y9WknmxauDqzxgpw/FnBdz4kQNN51l4wxdXX5VY1xjqy//+G+4CvJWp1+f+y6Q==", "type": "package", "path": "System.Net.Requests/4.0.11", "files": [ @@ -5948,7 +5948,7 @@ ] }, "System.Net.Security/4.0.0": { - "sha512": "GDhMM3S4ekKPo+YvM9Z7NssNbeJ1qBjEY+awTfjN6Mz8uJBHc3xfmAHzdkCJu/R7oBhijPz20P8LnlOhdfQ3vQ==", + "sha512": "uM1JaYJciCc2w7efD6du0EpQ1n5ZQqE6/P43/aI4H5E59qvP+wt3l70KIUF/Ha7NaeXGoGNFPVO0MB80pVHk2g==", "type": "package", "path": "System.Net.Security/4.0.0", "files": [ @@ -6024,7 +6024,7 @@ ] }, "System.Net.WebHeaderCollection/4.0.1": { - "sha512": "zG82WLtETBUPGftZLPPY1k0t2np9Td5uSp/33zkUnvQViEil7En6N7PdVIcJoa6Pqv5kREbooVY6cOrMua1MvQ==", + "sha512": "XX2TIAN+wBSAIV51BU2FvvXMdstUa8b0FBSZmDWjZdwUMmggQSifpTOZ5fNH20z9ZCg2fkV1L5SsZnpO2RQDRQ==", "type": "package", "path": "System.Net.WebHeaderCollection/4.0.1", "files": [ @@ -6098,7 +6098,7 @@ ] }, "System.Numerics.Vectors/4.1.1": { - "sha512": "OLIYTqjTA9WnlyXiFC/WSP70QleVRz0Uon7rGA+MUdbBKqGL4rOU+HGbgQ8gE6Lqkfwu4/lru3BQ0BVeJCYk2A==", + "sha512": "Ex1NSKycC2wi5XBMWUGWPc3lumh6OQWFFmmpZFZz0oLht5lQ+wWPHVZumOrMJuckfUiVMd4p67BrkBos8lcF+Q==", "type": "package", "path": "System.Numerics.Vectors/4.1.1", "files": [ @@ -6278,7 +6278,7 @@ ] }, "System.Reflection.DispatchProxy/4.0.1": { - "sha512": "x+OPJQKuTgVvvszEiF6ac0j2wDsrLv/0NJfuDVqaRUIi8kQFB7QWWEIVGSc2GX/1wxx9k14oPG5V1YWP8EENIA==", + "sha512": "GPPgWoSxQEU3aCKSOvsAc1dhTTi4iq92PUVEVfnGPGwqCf6synaAJGYLKMs5E3CuRfel8ufACWUijXqDpOlGrA==", "type": "package", "path": "System.Reflection.DispatchProxy/4.0.1", "files": [ @@ -6611,7 +6611,7 @@ ] }, "System.Resources.Reader/4.0.0": { - "sha512": "z3ISuJBDBcPBrGom7TSY6/cy/D+yUu5v0o1koDvlbLmTmWliLjvLM+TGDbIj/6jr8Lx8p2/5CODzVFFw9kvqHg==", + "sha512": "VX1iHAoHxgrLZv+nq/9drCZI6Q4SSCzSVyUm1e0U60sqWdj6XhY7wvKmy3RvsSal9h+/vqSWwxxJsm0J4vn/jA==", "type": "package", "path": "System.Resources.Reader/4.0.0", "files": [ @@ -7499,7 +7499,7 @@ ] }, "System.Security.Principal.Windows/4.0.0": { - "sha512": "yU5SU2h/7zypGN2mn/X6V2hX5yX15ranbVHm6IeBdK2TJQ8ErDp2rSGK8Dc9OJU7vV/aUYy4f8AkTBU6u+jtqA==", + "sha512": "iFx15AF3RMEPZn3COh8+Bb2Thv2zsmLd93RchS1b8Mj5SNYeGqbYNCSn5AES1+gq56p4ujGZPrl0xN7ngkXOHg==", "type": "package", "path": "System.Security.Principal.Windows/4.0.0", "files": [ @@ -7592,7 +7592,7 @@ ] }, "System.Text.Encoding.CodePages/4.0.1": { - "sha512": "YEgqOQExgdES51nhCCuTFMVP5sTE37u9ZsY4H5QlNGWgmpUNGHiW57g76gskQDcDKWl+/oy4U62XQFx29947aA==", + "sha512": "h4z6rrA/hxWf4655D18IIZ0eaLRa3tQC/j+e26W+VinIHY0l07iEXaAvO0YSYq3MvCjMYy8Zs5AdC1sxNQOB7Q==", "type": "package", "path": "System.Text.Encoding.CodePages/4.0.1", "files": [ @@ -7953,7 +7953,7 @@ ] }, "System.Threading.Tasks.Dataflow/4.6.0": { - "sha512": "N2fibpY0ogl6czCRUVA1jNpUMpioWCSWgYDtfHHgQ3gxA+3yb7lrUpwpCIU1p6HlHsv3cE60De6i9DLZjJbZOA==", + "sha512": "2hRjGu2r2jxRZ55wmcHO/WbdX+YAOz9x6FE8xqkHZgPaoFMKQZRe9dk8xTZIas8fRjxRmzawnTEWIrhlM+Un7w==", "type": "package", "path": "System.Threading.Tasks.Dataflow/4.6.0", "files": [ @@ -7983,7 +7983,7 @@ ] }, "System.Threading.Tasks.Parallel/4.0.1": { - "sha512": "mnl1GGZ2/e5n4+BjARmDEF9W77pfBs0KgbWXRfkSCZS6lfORVLd+hu58yEER8Kd0/UvHolp7hXcqrAY6cQbdNQ==", + "sha512": "7Pc9t25bcynT9FpMvkUw4ZjYwUiGup/5cJFW72/5MgCG+np2cfVUMdh29u8d7onxX7d8PS3J+wL73zQRqkdrSA==", "type": "package", "path": "System.Threading.Tasks.Parallel/4.0.1", "files": [ @@ -8076,7 +8076,7 @@ ] }, "System.Threading.ThreadPool/4.0.10": { - "sha512": "9WCj2T/rn2lTTngIsJBjjNkn4N77KD5bVR0pkJDPk7JsaJt1Yk/+uCoCNZRRv7soygakKjf3JrSQDIOFdC7GJQ==", + "sha512": "IMXgB5Vf/5Qw1kpoVgJMOvUO1l32aC+qC3OaIZjWJOjvcxuxNWOK2ZTWWYXfij22NHxT2j1yWX5vlAeQWld9vA==", "type": "package", "path": "System.Threading.ThreadPool/4.0.10", "files": [ @@ -8305,7 +8305,7 @@ ] }, "System.Xml.XmlDocument/4.0.1": { - "sha512": "mLMZObAjEaOFhNlex1yykaD83/ADCku6gEJMrxgWsZnTNo7u3+hkyMs/gx+MfcovWj+VtiqVzyyIqhDHM4mtEA==", + "sha512": "2eZu6IP+etFVBBFUFzw2w6J21DqIN5eL9Y8r8JfJWUmV28Z5P0SNU01oCisVHQgHsDhHPnmq2s1hJrJCFZWloQ==", "type": "package", "path": "System.Xml.XmlDocument/4.0.1", "files": [ @@ -8411,7 +8411,7 @@ ] }, "System.Xml.XPath/4.0.1": { - "sha512": "IqqskIve2hdiRWeHCNgGazTBP2es1mJEyXTZcO6hT2YZ4nHb7wJGPx9dXsYRfFeFMes+ZRs0jrenB92clVkU+A==", + "sha512": "UWd1H+1IJ9Wlq5nognZ/XJdyj8qPE4XufBUkAW59ijsCPjZkZe0MUzKKJFBr+ZWBe5Wq1u1d5f2CYgE93uH7DA==", "type": "package", "path": "System.Xml.XPath/4.0.1", "files": [ @@ -8448,7 +8448,7 @@ ] }, "System.Xml.XPath.XDocument/4.0.1": { - "sha512": "iG46gncpKvGXWGVOqP7CJR7lQIMqTbss3ZICr5vamN+HHkwVgHJtsXRHny+kQya99C5WRznG/dvsbzVzKK0c6g==", + "sha512": "FLhdYJx4331oGovQypQ8JIw2kEmNzCsjVOVYY/16kZTUoquZG85oVn7yUhBE2OZt1yGPSXAL0HTEfzjlbNpM7Q==", "type": "package", "path": "System.Xml.XPath.XDocument/4.0.1", "files": [ diff --git a/src/WebApp/Controllers/JsonController.cs b/src/WebApp/Controllers/JsonController.cs index d19554a6..ddb5b8c1 100644 --- a/src/WebApp/Controllers/JsonController.cs +++ b/src/WebApp/Controllers/JsonController.cs @@ -1,9 +1,9 @@ using System; using System.IO; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Formatters; -using Microsoft.Extensions.Configuration.EnvironmentVariables; using Newtonsoft.Json; namespace WebApp.Controllers @@ -18,15 +18,13 @@ public IActionResult Get() } [HttpPost] - public IActionResult Post() + public IActionResult Post([FromBody]Person person) { - var person = new JsonSerializer().Deserialize(new JsonTextReader(new StreamReader(HttpContext.Request.Body))); - return Json(person); } [HttpPut] - public IActionResult Put(Person person) + public IActionResult Put([FromBody]Person person) { return Json(person); } @@ -48,7 +46,10 @@ public JsonInputFormatter() public bool CanRead(InputFormatterContext context) { var contentType = context.HttpContext.Request.ContentType; - return contentType == "text/json" || contentType == "application/json"; + + var supported = new[] { "text/plain", "text/json", "application/json"}; + + return supported.Any(x => contentType?.StartsWith(x) ?? false); } public Task ReadAsync(InputFormatterContext context) diff --git a/src/WebApp/Startup.cs b/src/WebApp/Startup.cs index 73a75804..639ca54f 100644 --- a/src/WebApp/Startup.cs +++ b/src/WebApp/Startup.cs @@ -1,8 +1,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc.Formatters; -using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; using JsonInputFormatter = WebApp.Controllers.JsonInputFormatter; @@ -30,10 +29,9 @@ public void ConfigureServices(IServiceCollection services) services.AddMvc(config => { config.RespectBrowserAcceptHeader = true; + config.InputFormatters.Clear(); + config.InputFormatters.Add(new JsonInputFormatter()); }); - - services.AddTransient(); - } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline