Tuesday, October 22, 2019

XML, C# - Parse To XML Example


  internal static class ParseHelpers
    {
        private static JavaScriptSerializer json;
        private static JavaScriptSerializer Json { get { return json ?? (json = new JavaScriptSerializer()); } }

        public static Stream ToStream(this string @this)
        {
            var stream = new MemoryStream();
            var writer = new StreamWriter(stream);
            writer.Write(@this);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }


        public static T ParseXml<T>(this string @this) where T : class
        {
            var reader = XmlReader.Create(@this.Trim().ToStream(), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document });
            return new XmlSerializer(typeof(T)).Deserialize(reader) as T;
        }

        public static T ParseJson<T>(this string @this) where T : class
        {
            return Json.Deserialize<T>(@this.Trim());
        }

        public static string ToOnlyAlphaNumericInput(this string input)
        {
            if (input == null)
            {
                return null;
            }
            return Regex.Replace(input, @"[^\w]", string.Empty);
        }
        public static string ToOnlyNormalTextInput(this string input)
        {
            if (input == null)
            {
                return null;
            }
            return Regex.Replace(input, @"[^\w\.@!? ,/:+()'´-]", string.Empty);
        }
    }

Friday, October 11, 2019

Episerver - Handle Canonical Links


   /// <summary>
        /// Handle Canonical
        /// </summary>
        public static string SetupCanonicalUrl(SitePageData currentPage, HttpContext cont)
        {
            if (currentPage == null) { return string.Empty; }

            var externalUrl = currentPage.PageLink.GetExternalUrl();

            //Is Simple URL: Check
            if (!string.IsNullOrEmpty(currentPage.ExternalURL) &&
                String.Compare(currentPage.ExternalURL, cont.Request.Url.Segments.Last().Replace("/", ""),
                    StringComparison.OrdinalIgnoreCase) == 0)
            {
                //If 404 page no canoncial otherwise canonical
                var baseType = currentPage.GetType().BaseType;
                if (baseType != null && (!string.IsNullOrEmpty(externalUrl) && baseType.Name != typeof(NotFoundPage).Name))
                {
                    return WriteCanonicalLink(externalUrl);
                }
            }

            else
            {
                //Set Canonical if SEO override is set.
                if (currentPage.SetUniqueCanoncial != null)
                {
                    return WriteCanonicalLink(currentPage.SetUniqueCanoncial);
                }

                //Ordinary Canonical
                return WriteCanonicalLink(externalUrl);
            }
            return string.Empty;
        }

        private static string WriteCanonicalLink(String externalUrl)
        {
            HtmlLink canonicalLink = new HtmlLink();
            canonicalLink.Attributes.Add("rel", "canonical");
            canonicalLink.Href = externalUrl.TrimAndLower();
            return canonicalLink.Href;
        }+

  public static string GetExternalUrl(this PageData pageData)
        {

            var urlString = UrlResolver.Current.GetUrl(pageData.ContentLink, ((ILocalizable)pageData).Language.Name, new VirtualPathArguments { ForceCanonical = true });
            if (string.IsNullOrEmpty(urlString))
            {
                return urlString;
            }

            var uri = new Uri(urlString, UriKind.RelativeOrAbsolute);
            if (uri.IsAbsoluteUri)
            {
                return urlString;
            }

            if (!uri.IsAbsoluteUri)
            {
                var siteDefResolver = ServiceLocator.Current.GetInstance<ISiteDefinitionResolver>();
                SiteDefinition siteDefinition = siteDefResolver.GetByContent(
                    contentLink: pageData.ContentLink,
                    fallbackToWildcard: true,
                    fallbackToEmpty: true);

                return new Uri(siteDefinition.SiteUrl, uri).ToString();
            }

            return urlString;
        }

Thursday, October 10, 2019

Episerver Rest API and Routing Example


    /// <summary>
    /// The REST WEB API Configuration class
    /// </summary>
    [InitializableModule]
    [ModuleDependency(typeof(FrameworkInitialization))]
    public class WebApiConfig : IInitializableModule
    {
        public static string ApiRoute = "api";

        public void Initialize(InitializationEngine contextd)
        {
            // Enable Web API routing
            GlobalConfiguration.Configure(config =>
            {
                // Attribute routing
                config.MapHttpAttributeRoutes();

                var formatters = GlobalConfiguration.Configuration.Formatters;
                var jsonFormatter = formatters.JsonFormatter;
                var settings = jsonFormatter.SerializerSettings;

                var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
                jsonFormatter.SerializerSettings.Converters.Add(enumConverter);

                settings.Formatting = Formatting.Indented;

                config.Formatters.Remove(config.Formatters.XmlFormatter);

                // config.MapHttpAttributeRoutes();

                config.Routes.MapHttpRoute(
                    name: "RestAPI",
                    routeTemplate: ApiRoute + "/{controller}/{id}",
                    defaults: new {id = RouteParameter.Optional});
            });


        }

        public void Uninitialize(InitializationEngine context)
        {
            throw new NotImplementedException();
        }
    }





[RoutePrefix("api")]
    public class RestApiController : ApiController
    {


  [HttpGet]
        [Route("methods")]
        public string MethodsIndex()
        { //do something
        }

}

Monday, October 7, 2019

c# - Memory Cache example and call to async method.


  public static T GetRestObjectFromServiceOrCache<T>(string cacheItemName, Func<int, T> objectMethod, int id)
        {
            var expiration = CommonFactory.GetSettingsPage().RewardCategoryCacheTime == 0 ? DateTime.Now.AddHours(24) : DateTime.Now.AddHours(CommonFactory.GetSettingsPage().RewardCategoryCacheTime);

            ObjectCache cache = MemoryCache.Default;
            var cachedObject = (T)cache[cacheItemName];
            if (cachedObject == null)
            {
                CacheItemPolicy policy = new CacheItemPolicy
                {
                    AbsoluteExpiration = expiration
                };
                cachedObject = objectMethod(id);
                cache.Set(cacheItemName, cachedObject, policy);
            }

            return cachedObject;
        }
And Use it with this:
 var rewards = Task.Run(async () => await RestApiHelper.GetShopGroup(RestApiHelper.PartnerSe, id)).Result;