private bool DispatchRequest(IHttpContext ctx)
{
SetupRequestToProperDatabase(ctx);
CurrentOperationContext.Headers.Value = ctx.Request.Headers;
if (ctx.RequiresAuthentication &&
requestAuthorizer.Authorize(ctx) == false)
return false;
try
{
OnDispatchingRequest(ctx);
if (DefaultConfiguration.HttpCompression)
AddHttpCompressionIfClientCanAcceptIt(ctx);
// Cross-Origin Resource Sharing (CORS) is documented here: http://www.w3.org/TR/cors/
AddAccessControlHeaders(ctx);
if (ctx.Request.HttpMethod == "OPTIONS")
return false;
foreach (var requestResponderLazy in RequestResponders)
{
var requestResponder = requestResponderLazy.Value;
if (requestResponder.WillRespond(ctx))
{
requestResponder.Respond(ctx);
return requestResponder.IsUserInterfaceRequest;
}
}
ctx.SetStatusToBadRequest();
if (ctx.Request.HttpMethod == "HEAD")
return false;
ctx.Write(
@"
<html>
<body>
<h1>Could not figure out what to do</h1>
<p>Your request didn't match anything that Raven knows to do, sorry...</p>
</body>
</html>
");
}
finally
{
CurrentOperationContext.Headers.Value = new NameValueCollection();
currentDatabase.Value = DefaultResourceStore;
currentConfiguration.Value = DefaultConfiguration;
}
return false;
}