public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req, ILogger log) { IEnumerable <Venue> results = null; HttpResponseMessage response = req.CreateResponse(HttpStatusCode.InternalServerError); try { // Get passed argument (from query if present, if from JSON posted in body if not) log.LogInformation($"GetVenuesByPRN starting"); // NOTE: This is a dirty fix as a workaround to make sure this function works with both "POST" and "GET" properly. // This is needed to fix a bug with this when using "GET" to keep Dev CD app working whilst API-M changes are going in. // TODO: Refactor this eventually. var PRN = string.Empty; try { dynamic args = await(dynamic) req.Content.ReadAsAsync <object>(); PRN = req.RequestUri.ParseQueryString()["prn"]?.ToString() ?? args?.PRN; } catch (Exception e) { PRN = req.RequestUri.ParseQueryString()["prn"]?.ToString(); } if (PRN == null) { //throw new FunctionException("Missing PRN argument", "GetVenuesByPRN", null); response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Missing PRN argument")); } else if (!int.TryParse(PRN, out int parsed)) { //throw new FunctionException("Invalid PRN argument", "GetVenuesByPRN", null); response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Invalid PRN argument")); } else { // Get data results = new VenueStorage().GetByPRN(parsed, log); log.LogInformation($"GetVenuesByPRN returning { results.LongCount() } venues"); // Return results response = req.CreateResponse(results.Any() ? HttpStatusCode.OK : HttpStatusCode.NoContent); response.Content = new StringContent(JsonConvert.SerializeObject(results), Encoding.UTF8, "application/json"); } } catch (Exception ex) { throw ex; } return(response); }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req, ILogger log) { IEnumerable <Venue> results = null; HttpResponseMessage response = req.CreateResponse(HttpStatusCode.InternalServerError); try { // Get passed argument (from query if present, if from JSON posted in body if not) log.LogInformation($"GetVenuesByPRNAndName starting"); //dynamic args = await (dynamic)req.Content.ReadAsAsync<object>(); string PRN = req.RequestUri.ParseQueryString()["prn"]; //?.ToString() ?? args?.PRN; string name = req.RequestUri.ParseQueryString()["name"]; //?.ToString() ?? args?.Name; if (PRN == null) { //throw new FunctionException("Missing PRN argument", "GetVenuesByPRNAndName", null); response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Missing PRN argument")); } else if (name == null) { //throw new FunctionException("Missing ProviderName argument", "GetVenuesByPRNAndName", null); response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Missing Name argument")); } else if (!int.TryParse(PRN, out int parsed)) { //throw new FunctionException("Invalid PRN argument", "GetVenuesByPRNAndName", null); response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Invalid PRN argument")); } else { // Get data results = new VenueStorage().GetByPRN(parsed, log) .Where(p => p.VENUE_NAME.ToLower().StartsWith(name.ToLower()) && p.VENUE_NAME.Length == name.Length); // Return results response = req.CreateResponse(results.Any() ? HttpStatusCode.OK : HttpStatusCode.NoContent); response.Content = new StringContent(JsonConvert.SerializeObject(results), Encoding.UTF8, "application/json"); } } catch (Exception ex) { throw ex; } return(response); }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req, ILogger log) { IEnumerable <Venue> results = null; HttpResponseMessage response = req.CreateResponse(HttpStatusCode.InternalServerError); try { // Get passed argument (from query if present, if from JSON posted in body if not) log.LogInformation($"GetVenuesByUKPRNAndPostCode starting"); string UKPRN = req.RequestUri.ParseQueryString()["UKPRN"]; //?.ToString() ?? (await (dynamic)req.Content.ReadAsAsync<object>())?.UKPRN; string PostCode = req.RequestUri.ParseQueryString()["PostCode"]; //?.ToString() ?? (await (dynamic)req.Content.ReadAsAsync<object>())?.PostCode; if (UKPRN == null) { response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Missing UKPRN argument")); } else if (PostCode == null) { response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Missing PostCode argument")); } else if (!int.TryParse(UKPRN, out int parsedUKPRN)) { response = req.CreateResponse(HttpStatusCode.BadRequest, ResponseHelper.ErrorMessage("Invalid UKPRN argument")); } else { PostCode = PostCode.Replace(" ", string.Empty).Trim().ToLower(); // Get data results = new VenueStorage().GetByPRN(parsedUKPRN, log) .Where(p => p.POSTCODE.Replace(" ", string.Empty).Trim().ToLower() == PostCode); // Return results response = req.CreateResponse(results.Any() ? HttpStatusCode.OK : HttpStatusCode.NoContent); response.Content = new StringContent(JsonConvert.SerializeObject(results), Encoding.UTF8, "application/json"); } } catch (Exception ex) { throw ex; } return(response); }