Files

50 lines
1.6 KiB
C#
Raw Permalink Normal View History

2020-03-04 11:55:10 +04:00
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Web;
2023-07-29 15:14:52 +03:00
namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule;
public class UtmUtility
2020-03-04 11:55:10 +04:00
{
2023-07-29 15:14:52 +03:00
public static string ApplyParameters(string url, UtmParameters parameters)
=> ApplyParameters(new Uri(url), parameters);
public static string ApplyParameters(Uri uri, UtmParameters parameters)
2020-03-04 11:55:10 +04:00
{
2023-07-29 15:14:52 +03:00
var query = HttpUtility.ParseQueryString(uri.Query);
2023-02-15 18:28:37 +03:00
2023-07-29 15:14:52 +03:00
SetIfNotNull(query, "utm_source", parameters.Source);
SetIfNotNull(query, "utm_medium", parameters.Type);
SetIfNotNull(query, "utm_campaign", parameters.Campaign);
SetIfNotNull(query, "utm_term", parameters.Term);
SetIfNotNull(query, "utm_content", parameters.Content);
2023-02-15 18:28:37 +03:00
2023-07-29 15:14:52 +03:00
var uriBuilder = new UriBuilder(uri);
uriBuilder.Query = BuildQueryString(query);
return uriBuilder.ToString();
}
2023-02-15 18:28:37 +03:00
2023-07-29 15:14:52 +03:00
protected static string BuildQueryString(NameValueCollection query)
{
var queryParameters = new List<string>();
2020-03-04 11:55:10 +04:00
2023-07-29 15:14:52 +03:00
foreach (var keyName in query.AllKeys)
2020-03-04 11:55:10 +04:00
{
2023-07-29 15:14:52 +03:00
var value = query[keyName];
queryParameters.Add($"{HttpUtility.UrlEncode(keyName)}={HttpUtility.UrlEncode(value)}");
2020-03-04 11:55:10 +04:00
}
2023-07-29 15:14:52 +03:00
return String.Join('&', queryParameters);
}
2020-03-04 11:55:10 +04:00
2023-07-29 15:14:52 +03:00
protected static void SetIfNotNull(NameValueCollection queryParameteters, string key, string value)
{
if (string.IsNullOrWhiteSpace(value))
2020-03-04 11:55:10 +04:00
{
2023-07-29 15:14:52 +03:00
return;
2020-03-04 11:55:10 +04:00
}
2023-07-29 15:14:52 +03:00
queryParameteters.Set(key, value);
2020-03-04 11:55:10 +04:00
}
}