public override async Task Invoke(IOwinContext context)
{
if(context.Request.Method.Equals("get", StringComparison.OrdinalIgnoreCase) &&
context.Request.Path.GetExtension().Equals("query", StringComparison.OrdinalIgnoreCase))
{
try
{
// Deserialize the querystring and dispatch it
var query = DeserializeFromQueryString(context.Request.Path.ToString(), context.Request.Query);
var result = await CqrsApplication.GetService<QueryBus>().Dispatch(query);
context.Response.StatusCode = 200;
await context.Response.WriteAsync(result?.ToString() ?? "null");
}
catch(AggregateException aEx)
{
var ex = aEx.InnerExceptions.FirstOrDefault();
ExceptionHandler(ex ?? aEx);
context.Response.StatusCode = 500;
await context.Response.WriteAsync($"{{ \"queryAccepted\": false, \"error\": \"{ex?.Message}\" }}");
}
catch(Exception ex)
{
ExceptionHandler(ex);
context.Response.StatusCode = 500;
await context.Response.WriteAsync($"{{ \"queryAccepted\": false, \"error\": \"{ex.Message}\" }}");
}
}
else
{
await Next.Invoke(context);
}
}