From 58c229ae7e2987bdcee707c647e13912d5482b7e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 07:04:01 +0000 Subject: [PATCH 1/7] Initial plan From 94074d65b92ce5602d3b067f56fd514421508d6b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 07:10:24 +0000 Subject: [PATCH 2/7] Fix date format to use RFC 1123 format instead of culture-dependent format Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs | 4 ++-- DevProxy.Plugins/Behavior/RateLimitingPlugin.cs | 2 +- DevProxy.Plugins/Behavior/RetryAfterPlugin.cs | 2 +- DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs | 4 ++-- DevProxy.Plugins/Mocking/MockResponsePlugin.cs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs index d7911602..1367af77 100644 --- a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs +++ b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs @@ -289,7 +289,7 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus) { var session = e.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); if (errorStatus == HttpStatusCode.TooManyRequests) @@ -330,7 +330,7 @@ private void UpdateProxyBatchResponse(ProxyRequestArgs ev, GraphBatchResponsePay var session = ev.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); diff --git a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs index 44864c19..b210450e 100644 --- a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs +++ b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs @@ -246,7 +246,7 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs index 25e58efc..2a6c96b9 100644 --- a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs +++ b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs @@ -108,7 +108,7 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs b/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs index d3d0f717..10321d9c 100644 --- a/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs +++ b/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs @@ -62,7 +62,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo { GraphBatchResponsePayloadResponse? response = null; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var headers = ProxyUtils .BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate); @@ -155,7 +155,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo } var batchRequestId = Guid.NewGuid().ToString(); - var batchRequestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var batchRequestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var batchHeaders = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, batchRequestId, batchRequestDate); var batchResponse = new GraphBatchResponsePayload { diff --git a/DevProxy.Plugins/Mocking/MockResponsePlugin.cs b/DevProxy.Plugins/Mocking/MockResponsePlugin.cs index 69c2d1f6..269843ab 100644 --- a/DevProxy.Plugins/Mocking/MockResponsePlugin.cs +++ b/DevProxy.Plugins/Mocking/MockResponsePlugin.cs @@ -348,7 +348,7 @@ private void ProcessMockResponseInternal(ProxyRequestArgs e, MockResponse matchi { string? body = null; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var headers = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate); var statusCode = HttpStatusCode.OK; if (matchingResponse.Response?.StatusCode is not null) From b6301712f9513c7cfd6624beeb7fc35b88a682ec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 11:50:35 +0000 Subject: [PATCH 3/7] Change date format from RFC 1123 to ISO-8601 as requested Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs | 4 ++-- DevProxy.Plugins/Behavior/RateLimitingPlugin.cs | 2 +- DevProxy.Plugins/Behavior/RetryAfterPlugin.cs | 2 +- DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs | 4 ++-- DevProxy.Plugins/Mocking/MockResponsePlugin.cs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs index 1367af77..de94009a 100644 --- a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs +++ b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs @@ -289,7 +289,7 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus) { var session = e.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); if (errorStatus == HttpStatusCode.TooManyRequests) @@ -330,7 +330,7 @@ private void UpdateProxyBatchResponse(ProxyRequestArgs ev, GraphBatchResponsePay var session = ev.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); diff --git a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs index b210450e..8e606423 100644 --- a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs +++ b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs @@ -246,7 +246,7 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs index 2a6c96b9..1699656d 100644 --- a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs +++ b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs @@ -108,7 +108,7 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs b/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs index 10321d9c..0bc4b276 100644 --- a/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs +++ b/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs @@ -62,7 +62,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo { GraphBatchResponsePayloadResponse? response = null; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); var headers = ProxyUtils .BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate); @@ -155,7 +155,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo } var batchRequestId = Guid.NewGuid().ToString(); - var batchRequestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var batchRequestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); var batchHeaders = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, batchRequestId, batchRequestDate); var batchResponse = new GraphBatchResponsePayload { diff --git a/DevProxy.Plugins/Mocking/MockResponsePlugin.cs b/DevProxy.Plugins/Mocking/MockResponsePlugin.cs index 269843ab..b25337c8 100644 --- a/DevProxy.Plugins/Mocking/MockResponsePlugin.cs +++ b/DevProxy.Plugins/Mocking/MockResponsePlugin.cs @@ -348,7 +348,7 @@ private void ProcessMockResponseInternal(ProxyRequestArgs e, MockResponse matchi { string? body = null; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); var headers = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate); var statusCode = HttpStatusCode.OK; if (matchingResponse.Response?.StatusCode is not null) From 40793bbd683bc83396fcc39dc02e6ab2e7f35474 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 11:40:45 +0000 Subject: [PATCH 4/7] Revert to RFC 1123 format as requested Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs | 4 ++-- DevProxy.Plugins/Behavior/RateLimitingPlugin.cs | 2 +- DevProxy.Plugins/Behavior/RetryAfterPlugin.cs | 2 +- DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs | 4 ++-- DevProxy.Plugins/Mocking/MockResponsePlugin.cs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs index de94009a..1367af77 100644 --- a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs +++ b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs @@ -289,7 +289,7 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus) { var session = e.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); if (errorStatus == HttpStatusCode.TooManyRequests) @@ -330,7 +330,7 @@ private void UpdateProxyBatchResponse(ProxyRequestArgs ev, GraphBatchResponsePay var session = ev.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); diff --git a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs index 8e606423..b210450e 100644 --- a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs +++ b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs @@ -246,7 +246,7 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs index 1699656d..2a6c96b9 100644 --- a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs +++ b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs @@ -108,7 +108,7 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs b/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs index 0bc4b276..10321d9c 100644 --- a/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs +++ b/DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs @@ -62,7 +62,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo { GraphBatchResponsePayloadResponse? response = null; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var headers = ProxyUtils .BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate); @@ -155,7 +155,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo } var batchRequestId = Guid.NewGuid().ToString(); - var batchRequestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var batchRequestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var batchHeaders = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, batchRequestId, batchRequestDate); var batchResponse = new GraphBatchResponsePayload { diff --git a/DevProxy.Plugins/Mocking/MockResponsePlugin.cs b/DevProxy.Plugins/Mocking/MockResponsePlugin.cs index b25337c8..269843ab 100644 --- a/DevProxy.Plugins/Mocking/MockResponsePlugin.cs +++ b/DevProxy.Plugins/Mocking/MockResponsePlugin.cs @@ -348,7 +348,7 @@ private void ProcessMockResponseInternal(ProxyRequestArgs e, MockResponse matchi { string? body = null; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("o", CultureInfo.InvariantCulture); + var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); var headers = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate); var statusCode = HttpStatusCode.OK; if (matchingResponse.Response?.StatusCode is not null) From 550db0cde2a7d18e2e53105f7a653e7a452a950a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 12:11:42 +0000 Subject: [PATCH 5/7] Use RFC 1123 for HTTP headers and ISO 8601 for InnerError.Date Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs | 8 +++++--- DevProxy.Plugins/Behavior/RateLimitingPlugin.cs | 8 +++++--- DevProxy.Plugins/Behavior/RetryAfterPlugin.cs | 8 +++++--- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs index 1367af77..5cb9632d 100644 --- a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs +++ b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs @@ -289,9 +289,11 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus) { var session = e.Session; var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); + var now = DateTime.Now; + var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture); + var requestDateInnerError = now.ToString("o", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; - var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate); + var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader); if (errorStatus == HttpStatusCode.TooManyRequests) { var retryAfterDate = DateTime.Now.AddSeconds(Configuration.RetryAfterInSeconds); @@ -314,7 +316,7 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus) InnerError = new() { RequestId = requestId, - Date = requestDate + Date = requestDateInnerError } }), ProxyUtils.JsonSerializerOptions diff --git a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs index b210450e..57386e17 100644 --- a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs +++ b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs @@ -246,8 +246,10 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); - headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); + var now = DateTime.Now; + var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture); + var requestDateInnerError = now.ToString("o", CultureInfo.InvariantCulture); + headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( new() @@ -257,7 +259,7 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS InnerError = new() { RequestId = requestId, - Date = requestDate + Date = requestDateInnerError } }), ProxyUtils.JsonSerializerOptions diff --git a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs index 2a6c96b9..72792e43 100644 --- a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs +++ b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs @@ -108,8 +108,10 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt if (ProxyUtils.IsGraphRequest(request)) { var requestId = Guid.NewGuid().ToString(); - var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture); - headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate)); + var now = DateTime.Now; + var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture); + var requestDateInnerError = now.ToString("o", CultureInfo.InvariantCulture); + headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( new() @@ -119,7 +121,7 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt InnerError = new() { RequestId = requestId, - Date = requestDate + Date = requestDateInnerError } }), ProxyUtils.JsonSerializerOptions From 1bb9f12796f1db2db2186a9050780897a1a1e49d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 11:17:22 +0000 Subject: [PATCH 6/7] Replace 'o' format with 's' format for ISO 8601 dates Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs | 2 +- DevProxy.Plugins/Behavior/RateLimitingPlugin.cs | 2 +- DevProxy.Plugins/Behavior/RetryAfterPlugin.cs | 2 +- DevProxy.Plugins/Generation/HarGeneratorPlugin.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs index 5cb9632d..fa6ddfb8 100644 --- a/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs +++ b/DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs @@ -291,7 +291,7 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus) var requestId = Guid.NewGuid().ToString(); var now = DateTime.Now; var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture); - var requestDateInnerError = now.ToString("o", CultureInfo.InvariantCulture); + var requestDateInnerError = now.ToString("s", CultureInfo.InvariantCulture); var request = session.HttpClient.Request; var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader); if (errorStatus == HttpStatusCode.TooManyRequests) diff --git a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs index 57386e17..1793008a 100644 --- a/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs +++ b/DevProxy.Plugins/Behavior/RateLimitingPlugin.cs @@ -248,7 +248,7 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS var requestId = Guid.NewGuid().ToString(); var now = DateTime.Now; var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture); - var requestDateInnerError = now.ToString("o", CultureInfo.InvariantCulture); + var requestDateInnerError = now.ToString("s", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs index 72792e43..d62bcac1 100644 --- a/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs +++ b/DevProxy.Plugins/Behavior/RetryAfterPlugin.cs @@ -110,7 +110,7 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt var requestId = Guid.NewGuid().ToString(); var now = DateTime.Now; var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture); - var requestDateInnerError = now.ToString("o", CultureInfo.InvariantCulture); + var requestDateInnerError = now.ToString("s", CultureInfo.InvariantCulture); headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader)); body = JsonSerializer.Serialize(new GraphErrorResponseBody( diff --git a/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs b/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs index 766ef525..bcda0e41 100644 --- a/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs +++ b/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs @@ -102,7 +102,7 @@ private HarEntry CreateHarEntry(RequestLog log) var entry = new HarEntry { - StartedDateTime = currentTime.ToString("o"), + StartedDateTime = currentTime.ToString("s"), Time = 0, // We don't have actual timing data in RequestLog Request = new HarRequest { From 8ea43c5e29f6d9cb01cba710f33d33d05183ed0d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 12:00:11 +0000 Subject: [PATCH 7/7] Revert HarGeneratorPlugin to use 'o' format for HAR spec compliance Co-authored-by: waldekmastykarz <11164679+waldekmastykarz@users.noreply.github.com> --- DevProxy.Plugins/Generation/HarGeneratorPlugin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs b/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs index bcda0e41..766ef525 100644 --- a/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs +++ b/DevProxy.Plugins/Generation/HarGeneratorPlugin.cs @@ -102,7 +102,7 @@ private HarEntry CreateHarEntry(RequestLog log) var entry = new HarEntry { - StartedDateTime = currentTime.ToString("s"), + StartedDateTime = currentTime.ToString("o"), Time = 0, // We don't have actual timing data in RequestLog Request = new HarRequest {