Skip to content

Commit 3bba647

Browse files
committed
web api action filter subscribed to base app events
1 parent 6c213a5 commit 3bba647

File tree

4 files changed

+220
-14
lines changed

4 files changed

+220
-14
lines changed

src/JQDT.MVC/JQDataTableAttribute.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System;
44
using System.Web.Mvc;
5+
using JQDT.ActionFilters;
56
using JQDT.Application;
67
using JQDT.DI;
78
using JQDT.Exceptions;
@@ -12,7 +13,7 @@
1213
/// </summary>
1314
/// <seealso cref="System.Web.Mvc.ActionFilterAttribute" />
1415
[AttributeUsage(validOn: AttributeTargets.Method, AllowMultiple = false)]
15-
public class JQDataTableAttribute : ActionFilterAttribute
16+
public class JQDataTableAttribute : ActionFilterAttribute, IJQDTActionFilter
1617
{
1718
private readonly IServiceLocator serviceLocator;
1819

@@ -63,7 +64,6 @@ public override void OnActionExecuted(ActionExecutedContext filterContext)
6364
/// <param name="requestInfoModel">The request information model.</param>
6465
public virtual void OnDataProcessing(ref object data, RequestInfoModel requestInfoModel)
6566
{
66-
// No data processing logic by default;
6767
}
6868

6969
/// <summary>
@@ -73,7 +73,6 @@ public virtual void OnDataProcessing(ref object data, RequestInfoModel requestIn
7373
/// <param name="requestInfoModel">The request information model.</param>
7474
public virtual void OnDataProcessed(ref object data, RequestInfoModel requestInfoModel)
7575
{
76-
// No data processing logic by default;
7776
}
7877

7978
/// <summary>
@@ -83,7 +82,6 @@ public virtual void OnDataProcessed(ref object data, RequestInfoModel requestInf
8382
/// <param name="requestInfoModel">The request information model.</param>
8483
public virtual void OnSearchDataProcessing(ref object data, RequestInfoModel requestInfoModel)
8584
{
86-
// No data processing logic by default;
8785
}
8886

8987
/// <summary>
@@ -93,7 +91,6 @@ public virtual void OnSearchDataProcessing(ref object data, RequestInfoModel req
9391
/// <param name="requestInfoModel">The request information model.</param>
9492
public virtual void OnSearchDataProcessed(ref object data, RequestInfoModel requestInfoModel)
9593
{
96-
// No data processing logic by default;
9794
}
9895

9996
/// <summary>
@@ -103,7 +100,6 @@ public virtual void OnSearchDataProcessed(ref object data, RequestInfoModel requ
103100
/// <param name="requestInfoModel">The request information model.</param>
104101
public virtual void OnCustomFiltersDataProcessing(ref object data, RequestInfoModel requestInfoModel)
105102
{
106-
// No data processing logic by default;
107103
}
108104

109105
/// <summary>
@@ -113,7 +109,6 @@ public virtual void OnCustomFiltersDataProcessing(ref object data, RequestInfoMo
113109
/// <param name="requestInfoModel">The request information model.</param>
114110
public virtual void OnCustomFiltersDataProcessed(ref object data, RequestInfoModel requestInfoModel)
115111
{
116-
// No data processing logic by default;
117112
}
118113

119114
/// <summary>
@@ -123,7 +118,6 @@ public virtual void OnCustomFiltersDataProcessed(ref object data, RequestInfoMod
123118
/// <param name="requestInfoModel">The request information model.</param>
124119
public virtual void OnColumnsFilterDataProcessing(ref object data, RequestInfoModel requestInfoModel)
125120
{
126-
// No data processing logic by default;
127121
}
128122

129123
/// <summary>
@@ -133,7 +127,6 @@ public virtual void OnColumnsFilterDataProcessing(ref object data, RequestInfoMo
133127
/// <param name="requestInfoModel">The request information model.</param>
134128
public virtual void OnColumnsFilterDataProcessed(ref object data, RequestInfoModel requestInfoModel)
135129
{
136-
// No data processing logic by default;
137130
}
138131

139132
/// <summary>
@@ -143,7 +136,6 @@ public virtual void OnColumnsFilterDataProcessed(ref object data, RequestInfoMod
143136
/// <param name="requestInfoModel">The request information model.</param>
144137
public virtual void OnSortDataProcessing(ref object data, RequestInfoModel requestInfoModel)
145138
{
146-
// No data processing logic by default;
147139
}
148140

149141
/// <summary>
@@ -153,7 +145,6 @@ public virtual void OnSortDataProcessing(ref object data, RequestInfoModel reque
153145
/// <param name="requestInfoModel">The request information model.</param>
154146
public virtual void OnSortDataProcessed(ref object data, RequestInfoModel requestInfoModel)
155147
{
156-
// No data processing logic by default;
157148
}
158149

159150
/// <summary>
@@ -163,7 +154,6 @@ public virtual void OnSortDataProcessed(ref object data, RequestInfoModel reques
163154
/// <param name="requestInfoModel">The request information model.</param>
164155
public virtual void OnPagingDataProcessing(ref object data, RequestInfoModel requestInfoModel)
165156
{
166-
// No data processing logic by default;
167157
}
168158

169159
/// <summary>
@@ -173,7 +163,6 @@ public virtual void OnPagingDataProcessing(ref object data, RequestInfoModel req
173163
/// <param name="requestInfoModel">The request information model.</param>
174164
public virtual void OnPagingDataProcessed(ref object data, RequestInfoModel requestInfoModel)
175165
{
176-
// No data processing logic by default;
177166
}
178167

179168
private void PerformOnActionExecuted(ActionExecutedContext filterContext)

src/JQDT.WebAPI/JQDataTableAttribute.cs

Lines changed: 123 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,23 @@
44
using System.Net.Http;
55
using System.Net.Http.Formatting;
66
using System.Web.Http.Filters;
7+
using JQDT.ActionFilters;
78
using JQDT.Application;
89
using JQDT.Exceptions;
910
using JQDT.Models;
1011

1112
/// <summary>
1213
/// Used to decorate the action that returns data table response
1314
/// </summary>
15+
/// <seealso cref="JQDT.ActionFilters.IJQDTActionFilter" />
1416
/// <seealso cref="System.Web.Http.Filters.ActionFilterAttribute" />
15-
public class JQDataTableAttribute : ActionFilterAttribute
17+
public class JQDataTableAttribute : ActionFilterAttribute, IJQDTActionFilter
1618
{
1719
/// <summary>
1820
/// Occurs after the action method is invoked.
1921
/// </summary>
2022
/// <param name="actionExecutedContext">The action executed context.</param>
23+
/// <exception cref="JQDataTablesException">Unhandled JQDataTable exception</exception>
2124
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
2225
{
2326
try
@@ -42,6 +45,105 @@ public virtual void OnDataProcessed(ref object data, RequestInfoModel requestInf
4245
// No data processing logic by default;
4346
}
4447

48+
/// <summary>
49+
/// Called before all data processors execute.
50+
/// </summary>
51+
/// <param name="data">The data.</param>
52+
/// <param name="requestInfoModel">The request information model.</param>
53+
public void OnDataProcessing(ref object data, RequestInfoModel requestInfoModel)
54+
{
55+
}
56+
57+
/// <summary>
58+
/// Called before search data processor executes.
59+
/// </summary>
60+
/// <param name="data">The data.</param>
61+
/// <param name="requestInfoModel">The request information model.</param>
62+
public void OnSearchDataProcessing(ref object data, RequestInfoModel requestInfoModel)
63+
{
64+
}
65+
66+
/// <summary>
67+
/// Called after search data processor executes.
68+
/// </summary>
69+
/// <param name="data">The data.</param>
70+
/// <param name="requestInfoModel">The request information model.</param>
71+
public void OnSearchDataProcessed(ref object data, RequestInfoModel requestInfoModel)
72+
{
73+
}
74+
75+
/// <summary>
76+
/// Called before custom filters data processor executes.
77+
/// </summary>
78+
/// <param name="data">The data.</param>
79+
/// <param name="requestInfoModel">The request information model.</param>
80+
public void OnCustomFiltersDataProcessing(ref object data, RequestInfoModel requestInfoModel)
81+
{
82+
}
83+
84+
/// <summary>
85+
/// Called after custom filters data processor executes.
86+
/// </summary>
87+
/// <param name="data">The data.</param>
88+
/// <param name="requestInfoModel">The request information model.</param>
89+
public void OnCustomFiltersDataProcessed(ref object data, RequestInfoModel requestInfoModel)
90+
{
91+
}
92+
93+
/// <summary>
94+
/// Called before columns filters data processor executes.
95+
/// </summary>
96+
/// <param name="data">The data.</param>
97+
/// <param name="requestInfoModel">The request information model.</param>
98+
public void OnColumnsFilterDataProcessing(ref object data, RequestInfoModel requestInfoModel)
99+
{
100+
}
101+
102+
/// <summary>
103+
/// Called after columns filters data processor executes.
104+
/// </summary>
105+
/// <param name="data">The data.</param>
106+
/// <param name="requestInfoModel">The request information model.</param>
107+
public void OnColumnsFilterDataProcessed(ref object data, RequestInfoModel requestInfoModel)
108+
{
109+
}
110+
111+
/// <summary>
112+
/// Called before sort data processor executes.
113+
/// </summary>
114+
/// <param name="data">The data.</param>
115+
/// <param name="requestInfoModel">The request information model.</param>
116+
public void OnSortDataProcessing(ref object data, RequestInfoModel requestInfoModel)
117+
{
118+
}
119+
120+
/// <summary>
121+
/// Called after sort data processor executes.
122+
/// </summary>
123+
/// <param name="data">The data.</param>
124+
/// <param name="requestInfoModel">The request information model.</param>
125+
public void OnSortDataProcessed(ref object data, RequestInfoModel requestInfoModel)
126+
{
127+
}
128+
129+
/// <summary>
130+
/// Called before paging data processor executes.
131+
/// </summary>
132+
/// <param name="data">The data.</param>
133+
/// <param name="requestInfoModel">The request information model.</param>
134+
public void OnPagingDataProcessing(ref object data, RequestInfoModel requestInfoModel)
135+
{
136+
}
137+
138+
/// <summary>
139+
/// Called after paging data processor executes.
140+
/// </summary>
141+
/// <param name="data">The data.</param>
142+
/// <param name="requestInfoModel">The request information model.</param>
143+
public void OnPagingDataProcessed(ref object data, RequestInfoModel requestInfoModel)
144+
{
145+
}
146+
45147
private void PerformOnActionExecuted(HttpActionExecutedContext actionExecutedContext)
46148
{
47149
var modelType = ((System.Net.Http.ObjectContent)actionExecutedContext.Response.Content).ObjectType;
@@ -55,9 +157,29 @@ private void PerformOnActionExecuted(HttpActionExecutedContext actionExecutedCon
55157
actionExecutedContext.Response.Content = new ObjectContent(typeof(object), formattedObjectResult, new JsonMediaTypeFormatter());
56158
}
57159

160+
/// <summary>
161+
/// Subscribes to events.
162+
/// </summary>
163+
/// <param name="application">The application.</param>
58164
private void SubscribeToEvents(IApplicationBase application)
59165
{
166+
application.OnDataProcessingEvent += this.OnDataProcessing;
60167
application.OnDataProcessedEvent += this.OnDataProcessed;
168+
169+
application.OnSearchDataProcessingEvent += this.OnSearchDataProcessing;
170+
application.OnSearchDataProcessedEvent += this.OnSearchDataProcessed;
171+
172+
application.OnCustomFiltersDataProcessingEvent += this.OnCustomFiltersDataProcessing;
173+
application.OnCustomFiltersDataProcessedEvent += this.OnCustomFiltersDataProcessed;
174+
175+
application.OnColumnsFilterDataProcessingEvent += this.OnColumnsFilterDataProcessing;
176+
application.OnColumnsFilterDataProcessedEvent += this.OnColumnsFilterDataProcessed;
177+
178+
application.OnSortDataProcessingEvent += this.OnSortDataProcessing;
179+
application.OnSortDataProcessedEvent += this.OnSortDataProcessed;
180+
181+
application.OnPagingDataProcessingEvent += this.OnPagingDataProcessing;
182+
application.OnPagingDataProcessedEvent += this.OnPagingDataProcessed;
61183
}
62184

63185
private object GetObjectResult(ResultModel result)
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
namespace JQDT.ActionFilters
2+
{
3+
using JQDT.Models;
4+
5+
/// <summary>
6+
/// jQuery Data Tables Action Filter
7+
/// </summary>
8+
public interface IJQDTActionFilter
9+
{
10+
/// <summary>
11+
/// Called before all data processors execute.
12+
/// </summary>
13+
/// <param name="data">The data.</param>
14+
/// <param name="requestInfoModel">The request information model.</param>
15+
void OnDataProcessing(ref object data, RequestInfoModel requestInfoModel);
16+
17+
/// <summary>
18+
/// Called after all data processors execute.
19+
/// </summary>
20+
/// <param name="data">The data.</param>
21+
/// <param name="requestInfoModel">The request information model.</param>
22+
void OnDataProcessed(ref object data, RequestInfoModel requestInfoModel);
23+
24+
/// <summary>
25+
/// Called before search data processor executes.
26+
/// </summary>
27+
/// <param name="data">The data.</param>
28+
/// <param name="requestInfoModel">The request information model.</param>
29+
void OnSearchDataProcessing(ref object data, RequestInfoModel requestInfoModel);
30+
31+
/// <summary>
32+
/// Called after search data processor executes.
33+
/// </summary>
34+
/// <param name="data">The data.</param>
35+
/// <param name="requestInfoModel">The request information model.</param>
36+
void OnSearchDataProcessed(ref object data, RequestInfoModel requestInfoModel);
37+
38+
/// <summary>
39+
/// Called before custom filters data processor executes.
40+
/// </summary>
41+
/// <param name="data">The data.</param>
42+
/// <param name="requestInfoModel">The request information model.</param>
43+
void OnCustomFiltersDataProcessing(ref object data, RequestInfoModel requestInfoModel);
44+
45+
/// <summary>
46+
/// Called after custom filters data processor executes.
47+
/// </summary>
48+
/// <param name="data">The data.</param>
49+
/// <param name="requestInfoModel">The request information model.</param>
50+
void OnCustomFiltersDataProcessed(ref object data, RequestInfoModel requestInfoModel);
51+
52+
/// <summary>
53+
/// Called before columns filters data processor executes.
54+
/// </summary>
55+
/// <param name="data">The data.</param>
56+
/// <param name="requestInfoModel">The request information model.</param>
57+
void OnColumnsFilterDataProcessing(ref object data, RequestInfoModel requestInfoModel);
58+
59+
/// <summary>
60+
/// Called after columns filters data processor executes.
61+
/// </summary>
62+
/// <param name="data">The data.</param>
63+
/// <param name="requestInfoModel">The request information model.</param>
64+
void OnColumnsFilterDataProcessed(ref object data, RequestInfoModel requestInfoModel);
65+
66+
/// <summary>
67+
/// Called before sort data processor executes.
68+
/// </summary>
69+
/// <param name="data">The data.</param>
70+
/// <param name="requestInfoModel">The request information model.</param>
71+
void OnSortDataProcessing(ref object data, RequestInfoModel requestInfoModel);
72+
73+
/// <summary>
74+
/// Called after sort data processor executes.
75+
/// </summary>
76+
/// <param name="data">The data.</param>
77+
/// <param name="requestInfoModel">The request information model.</param>
78+
void OnSortDataProcessed(ref object data, RequestInfoModel requestInfoModel);
79+
80+
/// <summary>
81+
/// Called before paging data processor executes.
82+
/// </summary>
83+
/// <param name="data">The data.</param>
84+
/// <param name="requestInfoModel">The request information model.</param>
85+
void OnPagingDataProcessing(ref object data, RequestInfoModel requestInfoModel);
86+
87+
/// <summary>
88+
/// Called after paging data processor executes.
89+
/// </summary>
90+
/// <param name="data">The data.</param>
91+
/// <param name="requestInfoModel">The request information model.</param>
92+
void OnPagingDataProcessed(ref object data, RequestInfoModel requestInfoModel);
93+
}
94+
}

src/JQDT/JQDT.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
<Reference Include="System.Data" />
5858
</ItemGroup>
5959
<ItemGroup>
60+
<Compile Include="ActionFilters\IJQDTActionFilter.cs" />
6061
<Compile Include="Application\ApplicationBase.cs" />
6162
<Compile Include="Application\ExecuteFunctionProvider.cs" />
6263
<Compile Include="Application\IApplicationBase.cs" />

0 commit comments

Comments
 (0)