public static async Task <HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "UrlRedirect/{shortUrl}")] HttpRequestMessage req, string shortUrl, ExecutionContext context, ILogger log) { log.LogInformation($"C# HTTP trigger function processed for Url: {shortUrl}"); string redirectUrl = "https://costv.guide"; if (!string.IsNullOrWhiteSpace(shortUrl)) { var config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); redirectUrl = config["defaultRedirectUrl"]; StorageTableHelper stgHelper = new StorageTableHelper(config["UlsDataStorage"]); var tempUrl = new ShortUrlEntity(string.Empty, shortUrl); var newUrl = await stgHelper.GetShortUrlEntity(tempUrl); if (newUrl != null) { log.LogInformation($"Found it: {newUrl.Url}"); newUrl.Clicks++; stgHelper.SaveClickStatsEntity(new ClickStatsEntity(newUrl.RowKey)); await stgHelper.SaveShortUrlEntity(newUrl); redirectUrl = WebUtility.UrlDecode(newUrl.Url); } } else { log.LogInformation("Bad Link, resorting to fallback."); } var currentQuery = HttpUtility.ParseQueryString(req.RequestUri.Query); var redirectUriBuilder = new UriBuilder(redirectUrl); var redirectQuery = HttpUtility.ParseQueryString(redirectUriBuilder.Query); foreach (var key in currentQuery.AllKeys) { redirectQuery[key] = currentQuery[key]; redirectUriBuilder.Query = redirectQuery.ToString(); } var response = req.CreateResponse(HttpStatusCode.Redirect); response.Headers.Add("Location", redirectUriBuilder.ToString()); return(response); }
public static async Task <HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "UrlRedirect/{shortUrl}")] HttpRequestMessage req, string shortUrl, ExecutionContext context, ILogger log) { log.LogInformation($"C# HTTP trigger function processed for Url: {shortUrl}"); string redirectUrl = "https://azure.com"; if (!String.IsNullOrWhiteSpace(shortUrl)) { var config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); redirectUrl = config["defaultRedirectUrl"]; StorageTableHelper stgHelper = new StorageTableHelper(config["UlsDataStorage"]); var tempUrl = new ShortUrlEntity(string.Empty, shortUrl); var newUrl = await stgHelper.GetShortUrlEntity(tempUrl); if (newUrl != null) { log.LogInformation($"Found it: {newUrl.Url}"); newUrl.Clicks++; var host = req.RequestUri.GetLeftPart(UriPartial.Authority); var shortUrlAddress = Utility.GetShortUrl(host, shortUrl); await RunWebhooks(stgHelper, new ClickStatsResponse(newUrl.Title, shortUrlAddress, newUrl.Url, newUrl.Clicks)); stgHelper.SaveClickStatsEntity(new ClickStatsEntity(newUrl.RowKey)); await stgHelper.SaveShortUrlEntity(newUrl); redirectUrl = newUrl.Url; } } else { log.LogInformation("Bad Link, resorting to fallback."); } var res = req.CreateResponse(HttpStatusCode.Redirect); res.Headers.Add("Location", redirectUrl); return(res); }
public static async Task <HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "UrlRedirect/{shortUrl}")] HttpRequestMessage req, string shortUrl, ExecutionContext context, ILogger log) { log.LogInformation($"C# HTTP trigger function processed for Url: {shortUrl}"); var redirectUrl = "http://azure.com"; if (!String.IsNullOrWhiteSpace(shortUrl)) { var config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); StorageTableHelper stgHelper = new StorageTableHelper(config["UlsDataStorage"]); var tempUrl = new ShortUrlEntity(string.Empty, shortUrl); var newUrl = await stgHelper.GetShortUrlEntity(tempUrl); if (newUrl != null) { log.LogInformation($"Found it: {newUrl.Url}"); redirectUrl = WebUtility.UrlDecode(newUrl.Url); } } else { log.LogInformation("Bad Link, resorting to fallback."); } var res = req.CreateResponse(HttpStatusCode.Redirect); res.Headers.Add("Location", redirectUrl); return(res); }