-
Notifications
You must be signed in to change notification settings - Fork 0
Plugins
As of v3.55 ServiceStack introduces a new Plugin API that all of ServiceStack 'add-ons' now implement:
public interface IPlugin
{
void Register(IAppHost appHost);
}
All built-in Plugins are Registered and available via base.Plugins before your Configure() script is run so you have a chance to modify the behaviour or remove un-used plugins which is exactly what the short-hand:
SetConfig(new EndpointHostConfig {
EnableFeatures = Features.All.Remove(Features.Csv)
});
Which under the covers just does:
if ((Feature.Csv & config.EnableFeatures) != Feature.Csv)
Plugins.RemoveAll(x => x is CsvFormat);
Which you now also have an opportunity to also do in your AppHost Configure() start-up script yourself - if you want to remove or customize any pre-loaded plugins.
You can easily use LINQ to fetch any specific plugin:
var htmlFormat = (HtmlFormat)base.Plugins.First(x => x is HtmlFormat);
A list of all of the plugins available on ServiceStack and how to add them:
These plugins below are already added by default, you can remove or customize them using the methods described above.
Providing ServiceStack's CSV Format.
Plugins.Add(new CsvFormat());
Note: By default the CSV Format tries serialize the Response object directly into CSV which is only ideal if your responses return List<Poco>
. If however you mark your Response DTO with the [DataContract]/[DataMember] attributes the CSV Format instead will only serialize the first List<Poco>
it finds on your Response DTO e.g. if you had a List<Poco> Results
property it will only serialize this list in the tabular CSV Format which is typically the behaviour you want.
Providing ServiceStack's Html Format.
Plugins.Add(new HtmlFormat());
This provides ServiceStack's Razor Markdown Format and also enables ServiceStack to serve static .md or .markdown files in either plain text, rendered as HTML (partial), or rendered in HTML inside a static default.shtml HTML template.
Plugins.Add(new MarkdownFormat());
The entire www.servicestack.net/docs website is rendered using static Markdown. More information of Razor Markdown features can be found in:
The rest of ServiceStack's plugins are not enabled by default by can easily be added on adhoc basis, as and when needed.
Enable the validation feature if you want to ensure all of ServiceStack's Fluent validators for Request DTOs IValidator<TRequestDto>
are automatically validated on every request.
Plugins.Add(new ValidationFeature());
More information on ServiceStack's built-in Fluent Validation support is described on the Validation page.
The Authentication Feature enables the Authentication and Authorization support in ServiceStack. It makes available the AuthService at the default route at /auth/{provider}
and also registers AssignRoles and UnAssignRoles services and auto-enables Session support if not already.
An example AuthFeature registration (taken from the SocialBootstrapApi project):
Plugins.Add(new AuthFeature(
() => new CustomUserSession(), //Use your own typed Custom UserSession type
new IAuthProvider[] {
new CredentialsAuthProvider(), //HTML Form post of UserName/Password credentials
new TwitterAuthProvider(appSettings), //Sign-in with Twitter
new FacebookAuthProvider(appSettings), //Sign-in with Facebook
new BasicAuthProvider(), //Sign-in with Basic Auth
}));
This registers and provides your ServiceStack host a myriad of different Authentication options as described above.
If you're not using the AuthFeature above and you still want Session support you need to enable it explicitly with:
Plugins.Add(new SessionFeature());
This will add a Request Filter to instruct any HTTP client calling a ServiceStack web service to create a Temporary (ss-id) and Permanent (ss-pid) cookie if not already done so.
Related to Authentication is Registration which enables the Registration Service at the default route /register
which lets new Users to be registered and validated with the Credentials and Basic AuthProviders.
Plugins.Add(new RegistrationFeature());
See the SocialBootstrapApi project for a working example of Registration and Authentication.
Best way to enable ProtoBuf support is to install the ServiceStack.Plugins.ProtoBuf NuGet package which auto registers the plugin for you. However if you don't want to use NuGet you can add a reference to the ServiceStack.Plugins.ProtoBuf.dll and register the plugin with:
Plugins.Add(new ProtoBufFormat());
- Why ServiceStack?
- What is a message based web service?
- Advantages of message based web services
- Why remote services should use separate DTOs
- Getting Started
- Reference
- Clients
- Formats
- View Engines 4. Razor & Markdown Razor
- Hosts
- Advanced
- Configuration options
- Access HTTP specific features in services
- Logging
- Serialization/deserialization
- Request/response filters
- Filter attributes
- Concurrency Model
- Built-in caching options
- Built-in profiling
- Messaging and Redis
- Form Hijacking Prevention
- Auto-Mapping
- HTTP Utils
- Virtual File System
- Config API
- Physical Project Structure
- Modularizing Services
- Plugins
- Tests
- Other Languages
- Use Cases
- Performance
- How To
- Future