---
title: "Swimburger - Blog - Page 7"
description: "Swimburger.net is a blog about .NET, cloud, web development, and whatever comes across Swimburger's plate. Swimburger.net is run by Niels Swimberghe."
canonical: "https://swimburger.net/blog/7"
---

[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1163/dotnet-core-selenium-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1163/dotnet-core-selenium-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1163/dotnet-core-selenium-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1163/dotnet-core-selenium-square.png 500w" sizes="250px" width="250" height="250" alt=".NET Core + Selenium logo steering a web browser window" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## How to UI test using Selenium and .NET Core on Windows, Ubuntu, and MacOS

7/25/2019 - .NET

Selenium is a browser 🌐 automation tool mainly used for UI testing and automating tasks. Selenium is agnostic of operating system, programming language, and browser. You can automate Chrome on MacOS using C#, FireFox using Python on Windows, or Opera using NodeJS on Linux to give you a few examples.



](/blog/dotnet/how-to-ui-test-using-selenium-and-net-core-on-windows-ubuntu-and-maybe-macos)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1152/deleting-old-web-app-logs-using-azure-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1152/deleting-old-web-app-logs-using-azure-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1152/deleting-old-web-app-logs-using-azure-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1152/deleting-old-web-app-logs-using-azure-square.png 500w" sizes="250px" width="250" height="250" alt="PowerShell and Azure WebJobs Logo running a shredder, shredding logs" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Deleting old web app logs using Azure Web Jobs and PowerShell

7/1/2019 - Azure

When you're Azure App Service writes a lot of logs, these logs can quickly pile up and even hit your "File system storage" quota limits. This was something I personally didn't pay attention to for quite some time and was surprised to find multiple gigabytes of logs sitting in my app service. To solve this issue, you can use a PowerShell script and a time triggered Azure Web Job.



](/blog/azure/deleting-old-web-app-logs-using-azure-web-jobs-and-powershell)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1141/bulk-add-ip-access-restrictions-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1141/bulk-add-ip-access-restrictions-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover/media/1141/bulk-add-ip-access-restrictions-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover/media/1141/bulk-add-ip-access-restrictions-square.png 500w" sizes="250px" width="250" height="250" alt="Azure Logo holding a stop sign and PowerShell logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Bulk add IP Access Restrictions to Azure App Service using Az PowerShell

6/5/2019 - Azure

Azure App Services are publicly accessible via Azure's public DNS in the format of "\[NAME\].azurewebsites.net", but there are many reasons for not wanting it to be accessible via the DNS. This script uses the Az PowerShell module to bulk add IP Ranges into the Access Restriction feature in App Service.



](/blog/azure/bulk-add-ip-access-restrictions-to-azure-app-service-using-az-powershell)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1144/bulk-add-cloudflares-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1144/bulk-add-cloudflares-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover/media/1144/bulk-add-cloudflares-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover/media/1144/bulk-add-cloudflares-square.png 500w" sizes="250px" width="250" height="250" alt="Azure logo holding stop sign, PowerShell logo, and Cloudflare logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Bulk add Cloudflare's IPs to Azure App Service Access Restrictions using Az PowerShell

6/5/2019 - Azure

Azure App Services are publicly accessible via Azure's public DNS, but when using Cloudflare you should lock this down to only allow Cloudflare to reach your service. This script will add all Cloudflare's IP ranges to your app service Access Restriction.



](/blog/azure/bulk-add-cloudflares-ips-to-azure-app-service-access-restrictions-using-az-powershell)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1147/bulk-add-ip-access-restrictions-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1147/bulk-add-ip-access-restrictions-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover/media/1147/bulk-add-ip-access-restrictions-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover/media/1147/bulk-add-ip-access-restrictions-square.png 500w" sizes="250px" width="250" height="250" alt="Azure logo holding stop sign and PowerShell logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Bulk add Application Insights Availability Test IPs to Azure App Service Access Restrictions using Az PowerShell

6/5/2019 - Azure

Azure App Services are publicly accessible via Azure's public DNS, but using Access Restrictions you can lock this down. To ensure your App Insight Availability Tests still work, you can use this PowerShell script to bulk insert all the IP ranges.



](/blog/azure/bulk-add-application-insights-availability-test-ips-to-azure-app-service-access-restrictions-using-az-powershell)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1138/thumbnail-cloudflare-clear-cache-azure-pipelines.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1138/thumbnail-cloudflare-clear-cache-azure-pipelines.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1138/thumbnail-cloudflare-clear-cache-azure-pipelines.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1138/thumbnail-cloudflare-clear-cache-azure-pipelines.png 500w" sizes="250px" width="250" height="250" alt="Azure DevOps Pipelines clearing Cloudflare Cache with broom" decoding="async" loading="lazy" style="background-color:#212121"></picture>

## Clearing Cloudflare cache using PowerShell in Azure DevOps Pipelines

5/28/2019 - Azure

Learn how to purge Cloudflare's cache as part of your Continuous Deployment. This post will walk you through creating a PowerShell task that interacts with Cloudflare's API to clear the cache. This task will run as part of an Azure DevOps Pipelines.



](/blog/azure/clearing-cloudflare-cache-using-powershell-in-azure-devops-pipelines)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1126/social-media-html-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1126/social-media-html-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1126/social-media-html-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1126/social-media-html-square.png 500w" sizes="250px" width="250" height="250" alt="Social Media Logo's in front of arrows" decoding="async" loading="lazy" style="background-color:#1E1E1E"></picture>

## Social Sharing Buttons with zero JavaScript to Twitter, Reddit, LinkedIn, and Facebook

5/20/2019 - Web

Instead of slowing down our site and feeding advertisement profiles, we can use plain HTML to provide social sharing functionality. This post will cover social sharing to Twitter, Reddit, LinkedIn, and Facebook.



](/blog/web/social-sharing-buttons-with-zero-javascript-to-twitter-reddit-linkedin-and-facebook)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1123/azure-discord-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover/media/1123/azure-discord-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover/media/1123/azure-discord-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover/media/1123/azure-discord-square.png 500w" sizes="250px" width="250" height="250" alt="Azure &amp; .NET &amp; Discord Logo" decoding="async" loading="lazy" style="background-color:#5B2D91"></picture>

## Creating a Discord Bot using .NET Core and hosting it on Azure App Services

4/29/2019 - Azure

Discord is an online communication platform built specifically for gaming. Using .NET Core and Azure App Service WebJobs we can host a Discord bot that can listen and respond to voice and text input.



](/blog/azure/creating-a-discord-bot-using-net-core-and-azure-app-services)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1116/thumbnail-optimized.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1116/thumbnail-optimized.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1116/thumbnail-optimized.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1116/thumbnail-optimized.png 500w" sizes="250px" width="250" height="250" alt="PowerShell Logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## PowerShell Snippet: Clearing Cloudflare Cache with Cloudflare's API

2/20/2019 - PowerShell

Cloudflare provides a GUI to purge cache, but every action you can perform using the GUI, you can also do with Cloudflare's API. You could use the API to auto purge the cache whenever you update content in your CMS of choice, or purge the cache as part of your Continuous Delivery pipeline. Using PowerShell we'll interact with Cloudflare's API and purge their cache.



](/blog/powershell/powershell-snippet-clearing-cloudflare-cache-with-cloudflares-api)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5015974440894568x0.5015974440894568/media/1111/cloudflare-thumbnail.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5015974440894568x0.5015974440894568/media/1111/cloudflare-thumbnail.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5015974440894568x0.5015974440894568/media/1111/cloudflare-thumbnail.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5015974440894568x0.5015974440894568/media/1111/cloudflare-thumbnail.png 500w" sizes="250px" width="250" height="250" alt="MS Paint drawn Cloudflare logo" decoding="async" loading="lazy" style="background-color:#fff"></picture>

## Setting up Cloudflare Full Universal SSL/TLS/HTTPS with an Azure App Services

1/27/2019 - Azure

Using Cloudflare's Universal SSL/TLS service, we can provide our website over a safe HTTPS connection. This post walks you through setting up the SSL/TLS encrypted connection from client to Cloudflare, to your Azure Web Application using the Full (strict) option and Cloudflare's origin certificates.



](/blog/azure/setting-up-cloudflare-full-universal-ssl-with-an-azure-app-services)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1103/thumbnail-optimized.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1103/thumbnail-optimized.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1103/thumbnail-optimized.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1103/thumbnail-optimized.png 500w" sizes="250px" width="250" height="250" alt="PowerShell logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## PowerShell Snippet: Crawling a sitemap

1/19/2019 - PowerShell

Here's a PowerShell function that you can use to validate that all pages in your sitemap return a HTTP Status code 200. You can also use it to warm up your website, or ensure your website caching is warm after a cold boot. I personally use it as part of my Continuous Delivery pipeline to warm up my site and Cloudflare's cache.



](/blog/powershell/powershell-snippet-crawling-a-sitemap)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1100/phone-speed-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1100/phone-speed-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1100/phone-speed-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1100/phone-speed-square.png 500w" sizes="250px" width="250" height="250" alt="Phone with speedometer" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Web performance: prevent wasteful hidden image requests (display: none)

1/1/2019 - Web

We often hide images using CSS with "display: none", but this doesn't actually prevent the browser from downloading these images. Using the HTML Picture element, we can serve different versions of an image depending on media queries. We can even use a data-img to prevent images from being downloaded at all and optimize our website speed.



](/blog/web/web-performance-prevent-wasteful-hidden-image-requests)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1091/robot-umbraco-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1091/robot-umbraco-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1091/robot-umbraco-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1091/robot-umbraco-square.png 500w" sizes="250px" width="250" height="250" alt="Robot with Umbraco logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Crawling through Umbraco with Robots

12/31/2018 - Umbraco

The robots.txt file’s main purpose is to tell robots (Google Bot, Bing Bot, etc.) what to index for their search engine, and also what not to. Usually you want most of your website crawled by Google, such as blog posts, product pages, etc., but most websites will have some pages/sections that shouldn’t be indexed or listed in search engines.



](/blog/umbraco/crawling-through-umbraco-with-robots)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1080/umbraco_and_insight.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1080/umbraco_and_insight.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1080/umbraco_and_insight.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1080/umbraco_and_insight.png 500w" sizes="250px" width="250" height="250" alt="Azure Application Insights logo + Umbraco logo" decoding="async" loading="lazy" style="background-color:#691C7C"></picture>

## Ignoring Umbraco ping.aspx from Azure Application Insights

10/30/2018 - Umbraco

Application Performance Monitors provide you with a lot of data, but some of that data may not be relevant. Specifically, in Umbraco there is a page at \\umbraco\\ping.aspx that is being called frequently to keep the site alive. This is very useful to prevent the site from "dying" (?), but the data for this request isn't that relevant and could skew your statistics. Using Azure Application Insights ITelemetryProcessor, we can prevent ping request from being sent to Azure Application Insights.



](/blog/umbraco/ignoring-umbraco-ping-from-azure-application-insights)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5017667844522968x0.5017667844522968/media/1084/crawling-through-umbraco-square.png" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5017667844522968x0.5017667844522968/media/1084/crawling-through-umbraco-square.png 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5017667844522968x0.5017667844522968/media/1084/crawling-through-umbraco-square.png 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5017667844522968x0.5017667844522968/media/1084/crawling-through-umbraco-square.png 500w" sizes="250px" width="250" height="250" alt="Spider Web with Umbraco logo" decoding="async" loading="lazy" style="background-color:#2D2D2D"></picture>

## Crawling through Umbraco with Sitemaps

10/14/2018 - Umbraco

Websites come in all shapes and sizes. Some are fast, some are beautiful, and some are a complete mess. Whether it's a high-quality site is irrelevant if people can’t find it, but search engines are here to help. Though the competition to get on first page is tough, this series will dive into some common practices to make your website crawlable.



](/blog/umbraco/crawling-through-umbraco-with-sitemaps)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1070/rnicm96itqa1gdiodkbe_part-1-1.jpg" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1070/rnicm96itqa1gdiodkbe_part-1-1.jpg 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1070/rnicm96itqa1gdiodkbe_part-1-1.jpg 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1070/rnicm96itqa1gdiodkbe_part-1-1.jpg 500w" sizes="250px" width="250" height="250" alt="Firebase Logo + VueJS Logo + Google Keep Logo + Heart icon" decoding="async" loading="lazy" style="background-color:#1D6CBA"></picture>

## Exploring VueJS and Firebase

7/28/2017 - Frontend

A while back I started experimenting with the up and coming javascript library VueJS for an internal admin dashboard. I started learning about VueJS at Laracasts where they have a great mostly free series about VueJS. I was a little skeptical about yet another JavaScript framework/library to solve our modern day SPA needs. Though VueJS felt like a breath of fresh air. It is both refreshingly new, yet still very familiar (to AngularJS or MVVM in .NET.)



](/blog/frontend/exploring-vuejs-and-firebase)[

<picture><img class="blog-post-card__image" src="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1072/phidippus_audax_male-1.jpg" srcset="/cdn-cgi/image/width=250,format=auto,quality=90,height=250,fit=cover,gravity=0.5x0.5/media/1072/phidippus_audax_male-1.jpg 250w, /cdn-cgi/image/width=375,format=auto,quality=90,height=375,fit=cover,gravity=0.5x0.5/media/1072/phidippus_audax_male-1.jpg 375w, /cdn-cgi/image/width=500,format=auto,quality=90,height=500,fit=cover,gravity=0.5x0.5/media/1072/phidippus_audax_male-1.jpg 500w" sizes="250px" width="250" height="250" alt="Adorable spider" decoding="async" loading="lazy" style="background-color:#9FB74F"></picture>

## Updated Ajax + SEO Guidelines

11/7/2015 - Web

When you build an Ajax based website and want to be SEO friendly, there are a couple of techniques you have to apply. Back in 2009, Google made a proposal on how to make your Ajax pages crawlable.



](/blog/web/updated-ajax-seo-guidelines)

[Previous Page](/blog/6#main-content)[Show All Posts](/blog/all#main-content)

[Prev](/blog/6#main-content)
