public async Task <ShortenResponseContract> Shorten([FromBody] ShortenRequestContract contract) { string sessionId = Request.Cookies[_sessionKey]; if (string.IsNullOrWhiteSpace(sessionId)) { sessionId = Guid.NewGuid().ToString(); Response.Cookies.Append(_sessionKey, sessionId, new CookieOptions { Path = "/", HttpOnly = false, IsEssential = true, Expires = DateTime.Now.AddYears(1), }); } return(await _newUrlHandler.HandleAsync(contract, sessionId)); }
public async Task <ShortenResponseContract> HandleAsync(ShortenRequestContract contract, string sessionId) { var shortUrl = ShortenUrlHelper.GetRandomString(); while (await _shortenerService.GetByShortUrl(shortUrl) != null) { shortUrl = ShortenUrlHelper.GetRandomString(); } var doc = new UrlDocument { Created = DateTime.UtcNow, SessionId = sessionId, LongUrl = contract.LongUrl, ShortUrl = shortUrl, }; _shortenerService.SaveNewUrl(doc); return(new ShortenResponseContract { ShortUrl = shortUrl, }); }