From 2b129c93ace59cb7c1ee32d555c91f79df571d7c Mon Sep 17 00:00:00 2001 From: Alex Angas Date: Sun, 29 Jul 2018 16:16:18 +0100 Subject: [PATCH 1/2] AssemblyVersionLayoutRenderer - fixed full framework tests to use linked file --- .../AssemblyVersionLayoutRendererTests.cs | 15 +++++++++++-- .../AssemblyVersionLayoutRendererTests.cs | 22 ------------------- NLog.Web.Tests/NLog.Web.Tests.csproj | 2 +- .../Properties/AssemblyInfo-test.cs | 1 + 4 files changed, 15 insertions(+), 25 deletions(-) delete mode 100644 NLog.Web.Tests/AssemblyVersionLayoutRendererTests.cs diff --git a/NLog.Web.AspNetCore.Tests/LayoutRenderers/AssemblyVersionLayoutRendererTests.cs b/NLog.Web.AspNetCore.Tests/LayoutRenderers/AssemblyVersionLayoutRendererTests.cs index 0ca26b18..8c78b15a 100644 --- a/NLog.Web.AspNetCore.Tests/LayoutRenderers/AssemblyVersionLayoutRendererTests.cs +++ b/NLog.Web.AspNetCore.Tests/LayoutRenderers/AssemblyVersionLayoutRendererTests.cs @@ -3,17 +3,20 @@ using System.Linq; using System.Threading.Tasks; using NLog.Layouts; -using NLog.Web.Tests.LayoutRenderers; using Xunit; -namespace NLog.Web.AspNetCore.Tests.LayoutRenderers +namespace NLog.Web.Tests.LayoutRenderers { public class AssemblyVersionLayoutRendererTests : TestBase { [Fact] public void AssemblyNameVersionTest() { +#if ASP_NET_CORE Layout layout = "${assembly-version:NLog.Web.AspNetCore.Tests}"; +#else + Layout layout = "${assembly-version:NLog.Web.Tests}"; +#endif var result = layout.Render(LogEventInfo.CreateNullEvent()); Assert.Equal("1.2.3.0", result); } @@ -21,7 +24,11 @@ public void AssemblyNameVersionTest() [Fact] public void AssemblyNameFileVersionTest() { +#if ASP_NET_CORE Layout layout = "${assembly-version:name=NLog.Web.AspNetCore.Tests:type=file}"; +#else + Layout layout = "${assembly-version:NLog.Web.Tests:type=file}"; +#endif var result = layout.Render(LogEventInfo.CreateNullEvent()); Assert.Equal("1.2.3.1", result); } @@ -29,7 +36,11 @@ public void AssemblyNameFileVersionTest() [Fact] public void AssemblyNameInformationalVersionTest() { +#if ASP_NET_CORE Layout layout = "${assembly-version:name=NLog.Web.AspNetCore.Tests:type=informational}"; +#else + Layout layout = "${assembly-version:NLog.Web.Tests:type=informational}"; +#endif var result = layout.Render(LogEventInfo.CreateNullEvent()); Assert.Equal("1.2.3.2", result); } diff --git a/NLog.Web.Tests/AssemblyVersionLayoutRendererTests.cs b/NLog.Web.Tests/AssemblyVersionLayoutRendererTests.cs deleted file mode 100644 index 44fbb71b..00000000 --- a/NLog.Web.Tests/AssemblyVersionLayoutRendererTests.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using NLog.Config; -using NLog.Layouts; -using NLog.Web.Tests.LayoutRenderers; -using Xunit; - -namespace NLog.Web.AspNetCore.Tests.LayoutRenderers -{ - public class AssemblyVersionLayoutRendererTests : TestBase - { - [Fact] - public void AssemblyNameVersionTest() - { - Layout l = "${assembly-version:NLog.Web.Tests}"; - var result = l.Render(LogEventInfo.CreateNullEvent()); - Assert.Equal("1.2.3.0", result); - } - } -} diff --git a/NLog.Web.Tests/NLog.Web.Tests.csproj b/NLog.Web.Tests/NLog.Web.Tests.csproj index 0866a1e2..aca1ae26 100644 --- a/NLog.Web.Tests/NLog.Web.Tests.csproj +++ b/NLog.Web.Tests/NLog.Web.Tests.csproj @@ -112,7 +112,7 @@ TestBase.cs - + diff --git a/NLog.Web.Tests/Properties/AssemblyInfo-test.cs b/NLog.Web.Tests/Properties/AssemblyInfo-test.cs index 10430213..6162c294 100644 --- a/NLog.Web.Tests/Properties/AssemblyInfo-test.cs +++ b/NLog.Web.Tests/Properties/AssemblyInfo-test.cs @@ -34,5 +34,6 @@ // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.2.3.0")] [assembly: AssemblyFileVersion("1.2.3.1")] +[assembly: AssemblyInformationalVersion("1.2.3.2")] [assembly: Xunit.CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file From 1c122683da2b2cbbb58837f6ef99409db953f867 Mon Sep 17 00:00:00 2001 From: Alex Angas Date: Sun, 29 Jul 2018 16:54:39 +0100 Subject: [PATCH 2/2] AspNetLayoutMultiValueRendererBase, AspNetRequestQueryStringLayoutRenderer, AspNetRequestCookieLayoutRenderer - adds ValuesOnly property and tests, plus fixes multi-value test bugs in the latter --- .../AspNetCookieLayoutRendererTests.cs | 146 +++++++++++++++--- .../AspNetQueryStringLayoutRendererTests.cs | 126 +++++++++++---- .../AspNetLayoutMultiValueRendererBase.cs | 63 +++++--- .../AspNetRequestCookieLayoutRenderer.cs | 55 +++---- .../AspNetRequestQueryStringLayoutRenderer.cs | 10 +- 5 files changed, 292 insertions(+), 108 deletions(-) diff --git a/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetCookieLayoutRendererTests.cs b/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetCookieLayoutRendererTests.cs index 91a20d14..c12b474d 100644 --- a/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetCookieLayoutRendererTests.cs +++ b/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetCookieLayoutRendererTests.cs @@ -78,12 +78,7 @@ public void KeyNotFoundRendersEmptyString_Json_Formatting() [Fact] public void KeyFoundRendersValue_Multiple_Cookies_Flat_Formatting() { -#if ASP_NET_CORE - //no multivalue cookie keys in ASP.NET core var expectedResult = "key=TEST,Key1=TEST1"; -#else - var expectedResult = "key=TEST&Key1=TEST1"; -#endif var renderer = CreateRenderer(); @@ -92,16 +87,10 @@ public void KeyFoundRendersValue_Multiple_Cookies_Flat_Formatting() Assert.Equal(expectedResult, result); } - [Fact] public void KeyFoundRendersValue_Multiple_Cookies_Flat_Formatting_separators() { -#if ASP_NET_CORE - //no multivalue cookie keys in ASP.NET core var expectedResult = "key:TEST|Key1:TEST1"; -#else - var expectedResult = "key:TEST&Key1=TEST1"; -#endif var renderer = CreateRenderer(); renderer.ValueSeparator = ":"; @@ -167,15 +156,131 @@ public void KeyFoundRendersValue_Multiple_Cookies_Json_Formatting(bool singleAsA Assert.Equal(expectedResult, result); } + [Fact] + public void KeyNotFoundRendersEmptyString_Flat_Formatting_ValuesOnly() + { + var renderer = CreateRenderer(); + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Flat; + renderer.CookieNames = new List { "notfound" }; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Empty(result); + } + + [Fact] + public void KeyNotFoundRendersEmptyString_Json_Formatting_ValuesOnly() + { + var renderer = CreateRenderer(); + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; + renderer.CookieNames = new List { "notfound" }; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Empty(result); + } + + [Fact] + public void KeyFoundRendersValue_Cookie_Multiple_Items_Flat_Formatting_ValuesOnly() + { + var expectedResult = "TEST,TEST1"; + + var renderer = CreateRenderer(); + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_Cookie_Multiple_Items_Flat_Formatting_separators_ValuesOnly() + { + var expectedResult = "TEST|TEST1"; + + var renderer = CreateRenderer(); + renderer.ValueSeparator = ":"; + renderer.ItemSeparator = "|"; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_Single_Item_Flat_Formatting_ValuesOnly() + { + var expectedResult = "TEST"; + + var renderer = CreateRenderer(addSecondCookie: false); + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_Single_Item_Json_Formatting_ValuesOnly() + { + var expectedResult = "[\"TEST\"]"; + + var renderer = CreateRenderer(addSecondCookie: false); + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_Single_Item_Json_Formatting_no_array_ValuesOnly() + { + // With ValuesOnly enabled, only arrays are valid + var expectedResult = "[\"TEST\"]"; + + var renderer = CreateRenderer(addSecondCookie: false); + + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; + renderer.SingleAsArray = false; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Theory] + [InlineData(false)] + [InlineData(true)] + public void KeyFoundRendersValue_Cookie_Multiple_Items_Json_Formatting_ValuesOnly(bool singleAsArray) + { + var expectedResult = "[\"TEST\",\"TEST1\"]"; + + var renderer = CreateRenderer(); + + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; + renderer.SingleAsArray = singleAsArray; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + //no multivalue cookie keys in ASP.NET core #if !ASP_NET_CORE [Fact] public void KeyFoundRendersValue_Multiple_Cookies_And_Cookie_Values_Flat_Formatting() { - var expectedResult = "key=TEST&Key1=TEST1,key2=Test&key3=Test456"; + var expectedResult = "key=TEST,key2=Test&key3=Test456"; - var renderer = CreateRenderer(addMultiValueCookieKey: true); + var renderer = CreateRenderer(addSecondCookie: true, addMultiValueCookieKey: true); renderer.CookieNames = new List { "key", "key2" }; string result = renderer.Render(new LogEventInfo()); @@ -187,7 +292,7 @@ public void KeyFoundRendersValue_Multiple_Cookies_And_Cookie_Values_Flat_Formatt public void KeyFoundRendersValue_Multiple_Cookies_And_Cookie_Values_Json_Formatting() { var expectedResult = "[{\"key\":\"TEST\"},{\"Key1\":\"TEST1\"},{\"key2\":\"Test\"},{\"key3\":\"Test456\"}]"; - var renderer = CreateRenderer(addMultiValueCookieKey: true); + var renderer = CreateRenderer(addSecondCookie: true, addMultiValueCookieKey: true); renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; string result = renderer.Render(new LogEventInfo()); @@ -308,18 +413,21 @@ void AddCookie(string key, string result) #else var cookie1 = new HttpCookie("key", "TEST"); + var cookies = new HttpCookieCollection { cookie1 }; cookieNames.Add("key"); + if (addSecondCookie) { - cookie1["Key1"] = "TEST1"; + var cookie2 = new HttpCookie("Key1", "TEST1"); + cookies.Add(cookie2); + cookieNames.Add("Key1"); } - var cookies = new HttpCookieCollection { cookie1 }; if (addMultiValueCookieKey) { - var cookie2 = new HttpCookie("key2", "Test"); - cookie2["key3"] = "Test456"; - cookies.Add(cookie2); + var multiValueCookie = new HttpCookie("key2", "Test"); + multiValueCookie["key3"] = "Test456"; + cookies.Add(multiValueCookie); cookieNames.Add("key2"); } diff --git a/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetQueryStringLayoutRendererTests.cs b/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetQueryStringLayoutRendererTests.cs index 706b5101..582fc25a 100644 --- a/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetQueryStringLayoutRendererTests.cs +++ b/NLog.Web.AspNetCore.Tests/LayoutRenderers/AspNetQueryStringLayoutRendererTests.cs @@ -13,6 +13,7 @@ using HttpContextBase = Microsoft.AspNetCore.Http.HttpContext; using HttpSessionState = Microsoft.AspNetCore.Http.ISession; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Http.Internal; #endif using NLog.Web.LayoutRenderers; @@ -62,9 +63,6 @@ public void KeyNotFoundRendersEmptyString_Json_Formatting() Assert.Empty(result); } - - - [Fact] public void KeyFoundRendersValue_QueryString_Single_Item_Flat_Formatting() { @@ -186,6 +184,85 @@ public void KeyFoundRendersValue_QueryString_Multiple_Item_Json_Formatting() Assert.Equal(expectedResult, result); } + [Fact] + public void KeyFoundRendersValue_QueryString_Single_Item_Flat_Formatting_ValuesOnly() + { + var expectedResult = "1"; + + var renderer = CreateAndMockRenderer(CreateTuple("Id", "1")); + + renderer.QueryStringKeys = new List { "Id" }; + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Flat; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_QueryString_Single_Item_Json_Formatting_ValuesOnly() + { + var expectedResult = "[\"1\"]"; + + var renderer = CreateAndMockRenderer(CreateTuple("Id", "1")); + + renderer.QueryStringKeys = new List { "Id" }; + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_QueryString_Multiple_Item_Flat_Formatting_ValuesOnly() + { + var expectedResult = "1,2"; + + var renderer = CreateAndMockRenderer(CreateTuple("Id", "1"), CreateTuple("Id2", "2")); + + renderer.QueryStringKeys = new List { "Id", "Id2" }; + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Flat; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] + public void KeyFoundRendersValue_QueryString_Multiple_Item_Json_Formatting_ValuesOnly() + { + var expectedResult = "[\"1\",\"2\"]"; + + var renderer = CreateAndMockRenderer(CreateTuple("Id", "1"), CreateTuple("Id2", "2")); + + renderer.QueryStringKeys = new List { "Id", "Id2" }; + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Json; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + + [Fact] public void MultipleValuesForOneKeyShouldWork_ValuesOnly() + { + var expectedResult = "1,2,3"; + + var renderer = CreateAndMockRenderer(CreateTuple("Id", "1", "2", "3")); + + renderer.QueryStringKeys = null; + renderer.OutputFormat = AspNetRequestLayoutOutputFormat.Flat; + renderer.ValuesOnly = true; + + string result = renderer.Render(new LogEventInfo()); + + Assert.Equal(expectedResult, result); + } + /// /// Create tuple with 1 or more values (with 1 key) @@ -198,48 +275,33 @@ private static Tuple CreateTuple(string key, params string[] v return new Tuple(key, values); } - - private static AspNetQueryStringLayoutRenderer CreateAndMockRenderer(params Tuple[] values) + private AspNetQueryStringLayoutRenderer CreateAndMockRenderer(params Tuple[] pairs) { - var renderer = new AspNetQueryStringLayoutRenderer(); - #if !ASP_NET_CORE - var httpContext = Substitute.For(); - var namedClollection = new NameValueCollection(); - foreach (var tuple in values) + var pairCollection = new NameValueCollection(); +#else + var httpContext = this.HttpContext; + var pairCollection = new QueryBuilder(); +#endif + + foreach (var tuple in pairs) { foreach (var value in tuple.Item2) { - namedClollection.Add(tuple.Item1, value); + pairCollection.Add(tuple.Item1, value); } - } - httpContext.Request.QueryString.Returns(namedClollection); - - renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext); +#if !ASP_NET_CORE + httpContext.Request.QueryString.Returns(pairCollection); #else - var httpContext = Substitute.For(); - var dict = new Dictionary(); - foreach (var tuple in values) - { - dict.Add(tuple.Item1, new StringValues(tuple.Item2)); - - } - IQueryCollection querystringValues = new QueryCollection(dict); - - httpContext.Request.Query.Returns(querystringValues); - - renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext); + httpContext.Request.QueryString = pairCollection.ToQueryString(); #endif + var renderer = new AspNetQueryStringLayoutRenderer(); + renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext); return renderer; - - - } - - } } diff --git a/NLog.Web.AspNetCore/LayoutRenderers/AspNetLayoutMultiValueRendererBase.cs b/NLog.Web.AspNetCore/LayoutRenderers/AspNetLayoutMultiValueRendererBase.cs index 61bd6fe8..6458cd59 100644 --- a/NLog.Web.AspNetCore/LayoutRenderers/AspNetLayoutMultiValueRendererBase.cs +++ b/NLog.Web.AspNetCore/LayoutRenderers/AspNetLayoutMultiValueRendererBase.cs @@ -7,7 +7,7 @@ namespace NLog.Web.LayoutRenderers { /// - /// Layout renderers for ASP.NET rendering multiple values. + /// Layout renderers for ASP.NET rendering multiple key/value pairs. /// public abstract class AspNetLayoutMultiValueRendererBase : AspNetLayoutRendererBase { @@ -35,40 +35,43 @@ public abstract class AspNetLayoutMultiValueRendererBase : AspNetLayoutRendererB public AspNetRequestLayoutOutputFormat OutputFormat { get; set; } = AspNetRequestLayoutOutputFormat.Flat; /// - /// Serialize multiple values + /// Only render values if true, otherwise render key/value pairs. /// - /// The values with key and value. + public bool ValuesOnly { get; set; } + + /// + /// Serialize multiple key/value pairs + /// + /// The key/value pairs. /// Add to this builder. - protected void SerializeValues(IEnumerable> values, - StringBuilder builder) + protected void SerializePairs(IEnumerable> pairs, StringBuilder builder) { - switch (OutputFormat) { case AspNetRequestLayoutOutputFormat.Flat: - SerializValuesFlat(values, builder); + SerializePairsFlat(pairs, builder); break; case AspNetRequestLayoutOutputFormat.Json: - SerializeValuesJson(values, builder); + SerializePairsJson(pairs, builder); break; } } - private void SerializeValuesJson(IEnumerable> values, StringBuilder builder) + private void SerializePairsJson(IEnumerable> pairs, StringBuilder builder) { var firstItem = true; - var valueList = values.ToList(); + var pairsList = pairs.ToList(); - if (valueList.Count > 0) + if (pairsList.Count > 0) { - var addArray = valueList.Count > (SingleAsArray ? 0 : 1); + var addArray = pairsList.Count > (SingleAsArray | ValuesOnly ? 0 : 1); if (addArray) { builder.Append('['); } - foreach (var kpv in valueList) + foreach (var kpv in pairsList) { var key = kpv.Key; var value = kpv.Value; @@ -78,27 +81,34 @@ private void SerializeValuesJson(IEnumerable> value } firstItem = false; - //quoted key - builder.Append('{'); - AppendQuoted(builder, key); + if (!ValuesOnly) + { + // Quoted key + builder.Append('{'); + AppendQuoted(builder, key); + + builder.Append(':'); + } - builder.Append(':'); - //quoted value; + // Quoted value AppendQuoted(builder, value); - builder.Append('}'); + + if (!ValuesOnly) + { + builder.Append('}'); + } } if (addArray) { builder.Append(']'); } } - } - private void SerializValuesFlat(IEnumerable> values, StringBuilder builder) + private void SerializePairsFlat(IEnumerable> pairs, StringBuilder builder) { var firstItem = true; - foreach (var kpv in values) + foreach (var kpv in pairs) { var key = kpv.Key; var value = kpv.Value; @@ -108,8 +118,13 @@ private void SerializValuesFlat(IEnumerable> values builder.Append(ItemSeparator); } firstItem = false; - builder.Append(key); - builder.Append(ValueSeparator); + + if (!ValuesOnly) + { + builder.Append(key); + builder.Append(ValueSeparator); + } + builder.Append(value); } } diff --git a/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestCookieLayoutRenderer.cs b/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestCookieLayoutRenderer.cs index f5118234..c73c9ead 100644 --- a/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestCookieLayoutRenderer.cs +++ b/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestCookieLayoutRenderer.cs @@ -54,46 +54,48 @@ protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent) if (this.CookieNames?.Count > 0 && cookies?.Count > 0) { var cookieValues = GetCookies(cookies); - SerializeValues(cookieValues, builder); + SerializePairs(cookieValues, builder); } } - #if !ASP_NET_CORE private IEnumerable> GetCookies(HttpCookieCollection cookies) { - if (CookieNames != null) + var cookieNames = this.CookieNames; + if (cookieNames != null) { - foreach (var cookieName in CookieNames) + foreach (var cookieName in cookieNames) { - var value = cookies[cookieName]; - - if (value != null) + var httpCookie = cookies[cookieName]; + if (httpCookie == null) { - if (this.OutputFormat == AspNetRequestLayoutOutputFormat.Json) + continue; + } + + if (this.OutputFormat == AspNetRequestLayoutOutputFormat.Json) + { + // Split multi-valued cookie, as allowed for in the HttpCookie API for backwards compatibility with classic ASP + var isFirst = true; + foreach (var multiValueKey in httpCookie.Values.AllKeys) { - //split - var isFirst = true; - foreach (var key in value.Values.AllKeys) + var cookieKey = multiValueKey; + if (isFirst) { - var key2 = key; - if (isFirst) - { - key2 = cookieName; - isFirst = false; - } - yield return new KeyValuePair(key2, value.Values[key]); + cookieKey = cookieName; + isFirst = false; } + yield return new KeyValuePair(cookieKey, httpCookie.Values[multiValueKey]); } - else - { - yield return new KeyValuePair(cookieName, value.Value); - } + } + else + { + yield return new KeyValuePair(cookieName, httpCookie.Value); } } } } + #else private IEnumerable> GetCookies(IRequestCookieCollection cookies) @@ -103,15 +105,16 @@ private IEnumerable> GetCookies(IRequestCookieColle { foreach (var cookieName in cookieNames) { - if (cookies.TryGetValue(cookieName, out var cookieValue)) + if (!cookies.TryGetValue(cookieName, out var cookieValue)) { - yield return new KeyValuePair(cookieName, cookieValue); + continue; } + + yield return new KeyValuePair(cookieName, cookieValue); } } } -#endif - +#endif } } diff --git a/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestQueryStringLayoutRenderer.cs b/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestQueryStringLayoutRenderer.cs index 519e8264..2e4763d8 100644 --- a/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestQueryStringLayoutRenderer.cs +++ b/NLog.Web.AspNetCore/LayoutRenderers/AspNetRequestQueryStringLayoutRenderer.cs @@ -45,9 +45,6 @@ protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent) if (httpRequest == null) return; - - - var printAllQueryString = this.QueryStringKeys == null || this.QueryStringKeys.Count == 0; var queryStringKeys = this.QueryStringKeys; #if !ASP_NET_CORE @@ -56,7 +53,6 @@ protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent) if (queryStrings == null) return; - if (printAllQueryString) { queryStringKeys = new List(queryStrings.Keys.Count); @@ -81,11 +77,11 @@ protected override void DoAppend(StringBuilder builder, LogEventInfo logEvent) } #endif - var values = GetValues(queryStrings, queryStringKeys); - SerializeValues(values, builder); + var pairs = GetPairs(queryStrings, queryStringKeys); + SerializePairs(pairs, builder); } - private static IEnumerable> GetValues( + private static IEnumerable> GetPairs( #if ASP_NET_CORE IQueryCollection queryStrings, #else