private async Task <IActionResult> DoReport(ReportArgs args) { var t = await Db.GetTopic(args.Topic); if (t == null) { return(new NotFoundResult()); } else if (!t.WriteToken.Equals(args.WriteToken, StringComparison.OrdinalIgnoreCase)) { return(StatusCode(403)); } if (Timeouts.IsTimedOut(t.TopicId)) { return(StatusCode(StatusCodes.Status429TooManyRequests)); } await Herald.PublishMessage(t, args.Message); Timeouts.ApplyCost(t.TopicId, Config.ReportCost); return(new OkResult()); }