Skip to content

Commit 43768e8

Browse files
committed
Allow Request/Response Filters for MessageHandlers.
Allow custom Model Binders to be specified for Request DTOs
1 parent 496ecbd commit 43768e8

12 files changed

Lines changed: 82 additions & 15 deletions

File tree

NuGet/ServiceStack.Client.Silverlight/servicestack.client.silverlight.nuspec

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@
22
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
33
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
44
<id>ServiceStack.Client.Silverlight</id>
5-
<version>3.4.3</version>
5+
<version>3.5.1</version>
66
<authors>Demis Bellot</authors>
77
<owners>Demis Bellot</owners>
88
<summary>Silverlight JSON, XML, JSV ServiceClients for ServiceStack web services</summary>
99
<description>
10-
ServiceStack client binaries for Silverlight. Provides generic JSON, XML and JSV Service Clients allowing you to call ServiceStack web services from a Silverlight client.
10+
ServiceStack client binaries for Silverlight. Provides generic JSON, XML and JSV Service Clients allowing you to call ServiceStack web services from a Silverlight client.
11+
This is now a stub that points to ServiceStack.Common NuGet package which now contains the Silverlight client builds.
1112
</description>
1213
<projectUrl>https://github.com/ServiceStack/ServiceStack</projectUrl>
1314
<licenseUrl>https://github.com/ServiceStack/ServiceStack/blob/master/LICENSE</licenseUrl>
1415
<iconUrl>http://www.servicestack.net/logo-100x100.png</iconUrl>
1516
<tags>Silverlight Fast JSON XML JSV REST Web Services</tags>
1617
<language>en-US</language>
1718
<copyright>servicestack.net 2012 and contributors</copyright>
19+
<dependencies>
20+
<dependency id="ServiceStack.Common" />
21+
</dependencies>
1822
</metadata>
1923
</package>

NuGet/ServiceStack/servicestack.nuspec

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
33
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
44
<id>ServiceStack</id>
5-
<version>3.4.8</version>
5+
<version>3.5.1</version>
66
<authors>Demis Bellot</authors>
77
<owners>Demis Bellot</owners>
88
<summary>Opensource .NET and Mono REST Web Services framework</summary>
99
<description>
10-
Binaries for ServiceStack. New projects should reference host packages: *ServiceStack.Host.AspNet* (hosted at '/') or *ServiceStack.Host.Mvc* (hosted at '/api')
11-
</description>
10+
Binaries for the ServiceStack web framework.
11+
Visit http://www.servicestack.net/ServiceStack.Hello/
12+
and https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice
13+
for walk throughs and docs on creating your first web service.
14+
</description>
1215
<projectUrl>https://github.com/ServiceStack/ServiceStack</projectUrl>
1316
<licenseUrl>https://github.com/ServiceStack/ServiceStack/blob/master/LICENSE</licenseUrl>
1417
<iconUrl>http://www.servicestack.net/logo-100x100.png</iconUrl>

build/build.bat

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ SET BUILD=Release
55

66
REM %MSBUILD% build.msbuild
77

8-
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.dll ..\NuGet\ServiceStack\lib
9-
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.pdb ..\NuGet\ServiceStack\lib
10-
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.xml ..\NuGet\ServiceStack\lib
11-
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.ServiceInterface.* ..\NuGet\ServiceStack\lib
12-
COPY ..\src\ServiceStack.RazorEngine\bin\%BUILD%\ServiceStack.RazorEngine.* ..\NuGet\ServiceStack\lib
13-
14-
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.Common.* ..\NuGet\ServiceStack.Common\lib
15-
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.Interfaces.* ..\NuGet\ServiceStack.Common\lib
8+
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.dll ..\NuGet\ServiceStack\lib\net35
9+
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.pdb ..\NuGet\ServiceStack\lib\net35
10+
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.xml ..\NuGet\ServiceStack\lib\net35
11+
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.ServiceInterface.* ..\NuGet\ServiceStack\lib\net35
12+
COPY ..\src\ServiceStack.RazorEngine\bin\%BUILD%\ServiceStack.RazorEngine.* ..\NuGet\ServiceStack\lib\net35
13+
14+
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.Common.* ..\NuGet\ServiceStack.Common\lib\net35
15+
COPY ..\src\ServiceStack.ServiceInterface\bin\%BUILD%\ServiceStack.Interfaces.* ..\NuGet\ServiceStack.Common\lib\net35
1616

1717
COPY ..\src\ServiceStack.FluentValidation.Mvc3\bin\%BUILD%\ServiceStack.FluentValidation.Mvc3.* ..\NuGet\ServiceStack.Mvc\lib\net4
1818

src/ServiceStack.Common/Messaging/MessageHandlerFactory.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ public class MessageHandlerFactory<T>
77
{
88
public const int DefaultRetryCount = 2; //Will be a total of 3 attempts
99
private readonly IMessageService messageService;
10+
11+
public Func<IMessage, IMessage> RequestFilter { get; set; }
12+
public Func<object, object> ResponseFilter { get; set; }
13+
1014
private readonly Func<IMessage<T>, object> processMessageFn;
1115
private readonly Action<IMessage<T>, Exception> processExceptionFn;
1216
public int RetryCount { get; set; }
@@ -34,7 +38,24 @@ public MessageHandlerFactory(IMessageService messageService,
3438

3539
public IMessageHandler CreateMessageHandler()
3640
{
37-
return new MessageHandler<T>(messageService, processMessageFn,
41+
if (this.RequestFilter == null && this.ResponseFilter == null)
42+
{
43+
return new MessageHandler<T>(messageService, processMessageFn,
44+
processExceptionFn, this.RetryCount);
45+
}
46+
47+
return new MessageHandler<T>(messageService, msg =>
48+
{
49+
if (this.RequestFilter != null)
50+
msg = (IMessage<T>) this.RequestFilter(msg);
51+
52+
var result = this.processMessageFn(msg);
53+
54+
if (this.ResponseFilter != null)
55+
result = this.ResponseFilter(result);
56+
57+
return result;
58+
},
3859
processExceptionFn, this.RetryCount);
3960
}
4061
}

src/ServiceStack.ServiceInterface/Testing/BasicAppHost.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public T TryResolve<T>()
4747

4848
public List<HttpHandlerResolverDelegate> CatchAllHandlers { get; set; }
4949

50+
public Dictionary<Type, Func<IHttpRequest, object>> RequestBinders
51+
{
52+
get { throw new NotImplementedException(); }
53+
}
54+
5055
public EndpointHostConfig Config { get; set; }
5156

5257
public void RegisterService(Type serviceType, params string[] atRestPaths)

src/ServiceStack.ServiceInterface/Testing/TestAppHost.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public T TryResolve<T>()
6161

6262
public List<HttpHandlerResolverDelegate> CatchAllHandlers { get; private set; }
6363

64+
public Dictionary<Type, Func<IHttpRequest, object>> RequestBinders
65+
{
66+
get { throw new NotImplementedException(); }
67+
}
68+
6469
public EndpointHostConfig Config { get; set; }
6570

6671
public void RegisterService(Type serviceType, params string[] atRestPaths)

src/ServiceStack/WebHost.EndPoints/AppHostBase.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ public T TryResolve<T>()
130130
return this.Container.TryResolve<T>();
131131
}
132132

133+
public Dictionary<Type, Func<IHttpRequest, object>> RequestBinders
134+
{
135+
get { return EndpointHost.ServiceManager.ServiceController.RequestTypeFactoryMap; }
136+
}
137+
133138
public IContentTypeFilter ContentTypeFilters
134139
{
135140
get
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
1-
namespace ServiceStack.WebHost.Endpoints
1+
using System;
2+
using ServiceStack.ServiceHost;
3+
4+
namespace ServiceStack.WebHost.Endpoints
25
{
36
public static class AppHostExtensions
47
{
58
public static void RegisterService<TService>(this IAppHost appHost, params string[] atRestPaths)
69
{
710
appHost.RegisterService(typeof(TService), atRestPaths);
811
}
12+
13+
public static void RegisterRequestBinder<TRequest>(this IAppHost appHost, Func<IHttpRequest, object> binder)
14+
{
15+
appHost.RequestBinders[typeof(TRequest)] = binder;
16+
}
917
}
1018
}

src/ServiceStack/WebHost.EndPoints/EndpointHostConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ private static string ExtractHandlerPathFromWebServerConfigurationXml(string raw
249249

250250
public ServiceManager ServiceManager { get; internal set; }
251251
public IServiceController ServiceController { get { return ServiceManager.ServiceController; } }
252+
252253
public string MetadataPageBodyHtml { get; set; }
253254
public string MetadataOperationPageBodyHtml { get; set; }
254255

src/ServiceStack/WebHost.EndPoints/IAppHost.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ public interface IAppHost : IResolver
5555
/// </summary>
5656
List<HttpHandlerResolverDelegate> CatchAllHandlers { get; }
5757

58+
/// <summary>
59+
/// Provide a custom model minder for a specific Request DTO
60+
/// </summary>
61+
Dictionary<Type, Func<IHttpRequest, object>> RequestBinders { get; }
62+
5863
/// <summary>
5964
/// The AppHost config
6065
/// </summary>

0 commit comments

Comments
 (0)