Skip to content

ServiceStack Handler Resolution

Prasanna V L edited this page Jul 24, 2013 · 4 revisions

This document explains how the handlers are resolved in ServiceStack, the moment the Context is passed on to the ServiceStackHttpHandlerFactory, and all the actions that happen along with it.

The order of execution is as below, and the first one to be match is executed.

  1. Iterates through the RawHttpHandlers in the order they were added to EndpointConfig.
  2. If its a root request ("/"):
    • Correct requests "/default.aspx" and "/Default.aspx" to "/", as WebDav Server automatically appends them.
    • Iterate through CatchAllHandlers for a match, and if no match is found return DefaultHandler. (Note: DefaultHandler is DefaultHttpHandler if its hosted on the root path or running in a Mono environment. If not, it translates to NonRootModeDefaultHttpHandler)
    • Check if a file exists with the name DefaultRootFileName mentioned in the EndpointConfig.
      • If it doesn't exist, return IndexPageHttpHandler
      • If exists, DefaultHttpHandler is invoked to serve the file if its an allowed extension. If not, ForbiddenHttpHandler is invoked.
  3. Searches the Service Route Collection for the path. If found, RestHandler is invoked.
  4. If its a file system path, and no matches so far:
    • If its a directory, and it exists, but the path does not have the "/" suffix, RedirectHttpHandler invoked with the trailing "/".
    • CatchAllHanders are checked for matches.
    • If file doesn't exist, NotFoundHttpHandler is invoked.
    • If exists, DefaultHttpHandler is invoked to serve the file if its an allowed extension. If not, ForbiddenHttpHandler is invoked.
  5. CatchAllHanders are checked for matches.
  6. If FallbackRestPath is configured RestHander is invoked.
  7. Resolution fails.

TODO: This document is not complete, and is just a rough draft. There are still a few more attempts left in the resolution process.



  1. Getting Started
    1. Create your first webservice
    2. Your first webservice explained
    3. ServiceStack's new API Design
    4. Designing a REST-ful service with ServiceStack
    5. Example Projects Overview
  2. Reference
    1. Order of Operations
    2. The IoC container
    3. Metadata page
    4. Rest, SOAP & default endpoints
    5. SOAP support
    6. Routing
    7. Service return types
    8. Customize HTTP Responses
    9. Plugins
    10. Validation
    11. Error Handling
    12. Security
  3. Clients
    1. Overview
    2. C# client
    3. Silverlight client
    4. JavaScript client
    5. Dart Client
    6. MQ Clients
  4. Formats
    1. Overview
    2. JSON/JSV and XML
    3. ServiceStack's new HTML5 Report Format
    4. ServiceStack's new CSV Format
    5. MessagePack Format
    6. ProtoBuf Format
  5. View Engines 4. Razor & Markdown Razor
    1. Markdown Razor
  6. Hosts
    1. IIS
    2. Self-hosting
    3. Mono
  7. Advanced
    1. Configuration options
    2. Access HTTP specific features in services
    3. Logging
    4. Serialization/deserialization
    5. Request/response filters
    6. Filter attributes
    7. Concurrency Model
    8. Built-in caching options
    9. Built-in profiling
    10. Messaging and Redis
    11. Form Hijacking Prevention
    12. Auto-Mapping
    13. HTTP Utils
    14. Virtual File System
    15. Config API
    16. Physical Project Structure
    17. Modularizing Services
  8. Plugins
    1. Sessions
    2. Authentication/authorization
    3. Request logger
    4. Swagger API
  9. Tests
    1. Testing
    2. HowTo write unit/integration tests
  10. Other Languages
    1. FSharp
    2. VB.NET
  11. Use Cases
    1. Single Page Apps
    2. Azure
    3. Logging
    4. Bundling and Minification
    5. NHibernate
  12. Performance
    1. Real world performance
  13. How To
    1. Sending stream to ServiceStack
    2. Setting UserAgent in ServiceStack JsonServiceClient
    3. ServiceStack adding to allowed file extensions
    4. Default web service page how to
  14. Future
    1. Roadmap
Clone this wiki locally