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));
        }
Beispiel #2
0
        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,
            });
        }