Vienas iš pageidavimų DotNetGroup 3.0 platformai buvo vietoje sutrumpintų nuorodų (pavyzdžiui, http://t.co/53rFHuMG) rodyti originalias (šiuo atveju, http://sergejus.blogas.lt/itishnikai-7-jau-online-1586.html). Vienintelis būdas išskleisti sutrumpintą nuorodą – nueiti pagal ją ir sužinoti originalaus puslapio nuorodą. Krauti visą puslapio turinį nėra efektyvu, laimei, HTTP protokole šalia GET, POST, PUT ir DELETE metodų yra mažiau žinomas metodas HEAD. Jo pagalba web serveris grąžins ne visą puslapio turinį, bet tik HTTP antraštes kartu su originalaus puslapio adresu. C# tai įgyvendinama kelių eilučių pagalba:

public class UrlResolver
{
    public string Resolve(string url)
    {
        var resolvedUrl = url;

        var request = WebRequest.Create(url);
        request.Method = WebRequestMethods.Http.Head;

        try
        {
            using (var response = request.GetResponse())
            {
                resolvedUrl = response.ResponseUri.AbsoluteUri;
            }
        }
        catch (WebException)
        {
        }

        return resolvedUrl;
    }
}

Panaudojimas yra trivialus:

[Test]
public void Given_Shorten_Url_Resolve_Successfully_Resolves_Orignial_Url()
{
    var shortenUrl = "http://t.co/53rFHuMG";
    var originalUrl = "http://sergejus.blogas.lt/itishnikai-7-jau-online-1586.html";
    var resolver = new UrlResolver();

    var resolvedUrl = resolver.Resolve(shortenUrl);

    Assert.AreEqual(originalUrl, resolvedUrl);
}

[Test]
public void Given_Full_Url_Resolve_Sucsessfully_Returns_Same_Url()
{
    var originalUrl = "http://sergejus.blogas.lt/itishnikai-7-jau-online-1586.html";
    var resolver = new UrlResolver();

    var resolvedUrl = resolver.Resolve(originalUrl);

    Assert.AreEqual(originalUrl, resolvedUrl);

}

Aukščiau pateiktas kodas kaip ir kuriamos DotNetGroup 3.0 platformos kodas laisvai prieinami GitHub.

Patiko (0)

Rodyk draugams