Skip to content

Commit ac07ca6

Browse files
authored
#63 (#64)
1 parent 2cdfd9d commit ac07ca6

File tree

11 files changed

+172
-10
lines changed

11 files changed

+172
-10
lines changed

source/Diol/src/Diol.Core/Features/AspnetcoreProcessor.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ private RequestLogDto ParseRequestLog(TraceEvent traceEvent)
7676

7777
var correlationId = traceEvent.ActivityID.ToString();
7878

79+
var uri = $"{scheme}://{host}{path}";
80+
81+
var queryParameters = Utilities.GetQueryParams(uri);
82+
7983
// all other is headers or metadata
8084
// create event
8185
return new RequestLogDto
@@ -86,7 +90,9 @@ private RequestLogDto ParseRequestLog(TraceEvent traceEvent)
8690
Scheme = scheme,
8791
Host = host,
8892
Path = path,
89-
Metadata = arguments
93+
Metadata = arguments,
94+
QueryParameters = queryParameters,
95+
Uri = uri
9096
};
9197
}
9298

source/Diol/src/Diol.Core/Features/HttpclientProcessor.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
using Newtonsoft.Json;
66
using System;
77
using System.Collections.Generic;
8+
using System.Collections.Specialized;
89
using System.Linq;
10+
using System.Web;
11+
using Diol.Core.Utils;
912

1013
namespace Diol.Core.Features
1114
{
@@ -80,11 +83,14 @@ public static RequestPipelineStartDto ParseRequestPipelineStart(TraceEvent trace
8083

8184
var correlationId = traceEvent.ActivityID.ToString();
8285

86+
var queryParameters = Utilities.GetQueryParams(uri);
87+
8388
return new RequestPipelineStartDto
8489
{
8590
CorrelationId = correlationId,
8691
HttpMethod = httpMethod,
87-
Uri = uri
92+
Uri = uri,
93+
QueryParameters = queryParameters
8894
};
8995
}
9096

source/Diol/src/Diol.Core/Utils/Utils.cs renamed to source/Diol/src/Diol.Core/Utils/Utilities.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Web;
25

36
namespace Diol.Core.Utils
47
{
5-
public static class Utils
8+
public static class Utilities
69
{
710
/// <summary>
811
/// Tries to get the value associated with the specified key from the dictionary and removes the key-value pair if found.
@@ -20,5 +23,15 @@ public static void TryGetValueAndRemove<TKey, TValue>(
2023
if (dictionary.TryGetValue(key, out value))
2124
dictionary.Remove(key);
2225
}
26+
27+
public static Dictionary<string, string> GetQueryParams(string uriValue)
28+
{
29+
var uri = new Uri(uriValue);
30+
var queryParams = HttpUtility.ParseQueryString(uri.Query);
31+
var result = queryParams.AllKeys
32+
.ToDictionary(key => key, key => queryParams[key]);
33+
34+
return result;
35+
}
2336
}
2437
}

source/Diol/src/Diol.Share/Features/Aspnetcores/RequestLogDto.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ public class RequestLogDto : BaseDto
1313
/// <inheritdoc/>
1414
public override string EventName => nameof(RequestLogDto);
1515

16+
/// <summary>
17+
/// Gets or sets the URI of the request.
18+
/// </summary>
19+
public string Uri { get; set; }
20+
1621
/// <summary>
1722
/// Gets or sets the protocol of the request.
1823
/// </summary>
@@ -42,5 +47,10 @@ public class RequestLogDto : BaseDto
4247
/// Gets or sets the metadata associated with the request.
4348
/// </summary>
4449
public Dictionary<string, string> Metadata { get; set; }
50+
51+
/// <summary>
52+
/// Gets or sets the dictionary of query parameters.
53+
/// </summary>
54+
public Dictionary<string, string> QueryParameters { get; set; }
4555
}
4656
}

source/Diol/src/Diol.Share/Features/Httpclients/RequestPipelineStartDto.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace Diol.Share.Features.Httpclients
1+
using System.Collections.Generic;
2+
3+
namespace Diol.Share.Features.Httpclients
24
{
35
/// <summary>
46
/// Represents the data transfer object for the start of a request pipeline.
@@ -20,5 +22,10 @@ public class RequestPipelineStartDto : BaseDto
2022
/// Gets or sets the URI of the request.
2123
/// </summary>
2224
public string Uri { get; set; }
25+
26+
/// <summary>
27+
/// Gets or sets the dictionary of query parameters.
28+
/// </summary>
29+
public Dictionary<string, string> QueryParameters { get; set; }
2330
}
2431
}

source/Diol/src/Diol.Wpf.Core/ViewModels/AspnetDetailViewModel.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ public string ResponseBodyAsString
8181
set => SetProperty(ref this._responseBodyAsString, value);
8282
}
8383

84+
/// <summary>
85+
/// Gets the collection of request query parameters.
86+
/// </summary>
87+
public ObservableCollection<KeyValuePair<string, string>> RequestQueryParameters { get; private set; } =
88+
new ObservableCollection<KeyValuePair<string, string>>();
89+
8490
/// <summary>
8591
/// Gets the collection of request headers.
8692
/// </summary>
@@ -144,10 +150,18 @@ private void HandleAspnetItemSelectedEvent(string obj)
144150
}
145151

146152
this.Method = item.Request.Method;
147-
this.Uri = $"{item.Request.Scheme}://{item.Request.Host}{item.Request.Path}";
153+
this.Uri = item.Request.Uri;
148154
this.Protocol = item.Request.Protocol;
149155
this.StatusCode = item?.Response?.StatusCode;
150156

157+
if (item.Request.QueryParameters != null)
158+
{
159+
foreach (var queryParameter in item.Request.QueryParameters)
160+
{
161+
this.RequestQueryParameters.Add(new KeyValuePair<string, string>(queryParameter.Key, queryParameter.Value));
162+
}
163+
}
164+
151165
if (item.Request.Metadata != null)
152166
{
153167
foreach (var header in item.Request.Metadata)

source/Diol/src/Diol.Wpf.Core/ViewModels/AspnetMasterViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private void HandleAspnetRequestStartedEvent(string obj)
8282
{
8383
Key = item?.Key,
8484
Method = item?.Request?.Method,
85-
Uri = $"{item.Request.Scheme}://{item.Request.Host}{item.Request.Path}"
85+
Uri = item.Request.Uri
8686
};
8787

8888
this.AspnetLogs.Add(vm);

source/Diol/src/Diol.Wpf.Core/ViewModels/HttpDetailViewModel.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public RequestPipelineStartDto Request
3232
set => SetProperty(ref this._request, value);
3333
}
3434

35+
/// <summary>
36+
/// Gets the collection of request query parameters.
37+
/// </summary>
38+
public ObservableCollection<KeyValuePair<string, string>> RequestQueryParameters { get; private set; } =
39+
new ObservableCollection<KeyValuePair<string, string>>();
40+
3541
/// <summary>
3642
/// Gets the collection of request headers.
3743
/// </summary>
@@ -114,6 +120,14 @@ private void HandleHttpItemSelectedEvent(string obj)
114120

115121
this.Request = item.Request;
116122

123+
if (item.Request.QueryParameters != null)
124+
{
125+
foreach (var queryParameter in item.Request.QueryParameters)
126+
{
127+
this.RequestQueryParameters.Add(new KeyValuePair<string, string>(queryParameter.Key, queryParameter.Value));
128+
}
129+
}
130+
117131
if (item.RequestMetadata != null && item.RequestMetadata.Headers != null)
118132
{
119133
foreach (var header in item.RequestMetadata.Headers)

source/Diol/src/Diol.Wpf.Core/Views/AspnetDetail.xaml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,53 @@
4040
IsReadOnly="True" />
4141
</StackPanel>
4242
</GroupBox>
43+
44+
<GroupBox
45+
Header="Request Query Parameters">
46+
<DataGrid
47+
ItemsSource="{Binding RequestQueryParameters}"
48+
AutoGenerateColumns="False"
49+
IsReadOnly="True"
50+
HeadersVisibility="None"
51+
ScrollViewer.CanContentScroll="False"
52+
ScrollViewer.VerticalScrollBarVisibility="Disabled"
53+
PreviewMouseWheel="DataGrid_PreviewMouseWheel">
54+
<DataGrid.Columns>
55+
<DataGridTemplateColumn
56+
Header="Key"
57+
Width="auto"
58+
MaxWidth="70">
59+
<DataGridTemplateColumn.CellTemplate>
60+
<DataTemplate>
61+
<TextBlock
62+
Text="{Binding Key}"
63+
TextWrapping="Wrap"
64+
FontWeight="Bold"/>
65+
</DataTemplate>
66+
</DataGridTemplateColumn.CellTemplate>
67+
</DataGridTemplateColumn>
68+
<DataGridTemplateColumn
69+
Header="Key"
70+
Width="*">
71+
<DataGridTemplateColumn.CellTemplate>
72+
<DataTemplate>
73+
<TextBlock
74+
Text="{Binding Value}"
75+
TextWrapping="Wrap"/>
76+
</DataTemplate>
77+
</DataGridTemplateColumn.CellTemplate>
78+
</DataGridTemplateColumn>
79+
</DataGrid.Columns>
80+
<DataGrid.InputBindings>
81+
<KeyBinding
82+
Key="C"
83+
Modifiers="Ctrl"
84+
Command="{Binding CopyCommand}"
85+
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
86+
</DataGrid.InputBindings>
87+
</DataGrid>
88+
</GroupBox>
89+
4390
<GroupBox
4491
Header="Request headers">
4592
<DataGrid

source/Diol/src/Diol.Wpf.Core/Views/HttpDetail.xaml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,53 @@
4040
IsReadOnly="True" />
4141
</StackPanel>
4242
</GroupBox>
43+
44+
<GroupBox
45+
Header="Request Query Parameters">
46+
<DataGrid
47+
ItemsSource="{Binding RequestQueryParameters}"
48+
AutoGenerateColumns="False"
49+
IsReadOnly="True"
50+
HeadersVisibility="None"
51+
ScrollViewer.CanContentScroll="False"
52+
ScrollViewer.VerticalScrollBarVisibility="Disabled"
53+
PreviewMouseWheel="DataGrid_PreviewMouseWheel">
54+
<DataGrid.Columns>
55+
<DataGridTemplateColumn
56+
Header="Key"
57+
Width="auto"
58+
MaxWidth="70">
59+
<DataGridTemplateColumn.CellTemplate>
60+
<DataTemplate>
61+
<TextBlock
62+
Text="{Binding Key}"
63+
TextWrapping="Wrap"
64+
FontWeight="Bold"/>
65+
</DataTemplate>
66+
</DataGridTemplateColumn.CellTemplate>
67+
</DataGridTemplateColumn>
68+
<DataGridTemplateColumn
69+
Header="Key"
70+
Width="*">
71+
<DataGridTemplateColumn.CellTemplate>
72+
<DataTemplate>
73+
<TextBlock
74+
Text="{Binding Value}"
75+
TextWrapping="Wrap"/>
76+
</DataTemplate>
77+
</DataGridTemplateColumn.CellTemplate>
78+
</DataGridTemplateColumn>
79+
</DataGrid.Columns>
80+
<DataGrid.InputBindings>
81+
<KeyBinding
82+
Key="C"
83+
Modifiers="Ctrl"
84+
Command="{Binding CopyCommand}"
85+
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
86+
</DataGrid.InputBindings>
87+
</DataGrid>
88+
</GroupBox>
89+
4390
<GroupBox
4491
Header="Request headers">
4592
<DataGrid

0 commit comments

Comments
 (0)