Welcome to the Digital Tool Factory blog

Backend web development in Atlanta GA

How to fix Peculiar WordPress Admin Redirection Problems

I recently migrated this blog from its prior position in a subdirectory off of digitaltoolfactory.net to it’s own domain name of blog.digitaltoolfactory.net. After a mild amount of sturm and drang I got the main site working, however I was unable to get to the admin. I got an endless array of “Too Many Redirects” errors […]

How to fix problems with IIS caching, OWIN authentication, Visual Studio and application names

The Setup I was running painfully low on disk space on my C drive and was working with a Visual Studio solution containing 12 projects. A compilation / build got hung up on something, I cancelled the build tried again. That build worked. So far just business as usual. However, I noticed that while I […]

How to fix problems with Application Pools not starting in IIS manager

How can you fix the problem of the application pool refusing to start and throwing the error message of “The service cannot accept control messages at this time”? Happily all you have to do is to go to task manager and kill the W3WP process – then restart the app pool.

How to run WordPress on Azure App Service Linux with NGINX

I recently had to start moving my various WordPress sites from the standard App Service to a standard app service on Linux, using NGINX. However, this does not work out of the box. After much googling and experimentation I came across this extremely well written blog post on the topic. Basically just follow those instructions […]

Remember to await everything in Playwright and Typescript

I’ve recently fallen madly in love with the PlayWright web testing platform. Seemingly is has all of the strengths of every other testing platform, while being legible, transparent and actually working. However, I was thrown for a week by mystery timeouts, failures and heisenbugs. The culprit happened when I all of the repeatable steps into […]

How to fix your web.config files not transforming in Azure Pipelines and Releases

After much sturm and drang I finally found that if you change your build arguements to msbuildArgs: ‘/p:DeployOnBuild=true  /p:WebPublishMethod=Package  /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true  /p:PackageLocation=”$(build.artifactStagingDirectory)”  /p:AutoParameterizationWebConfigConnectionStrings=false’ And do the the other tips listed on this blog then the web.config files should transform like they are supposed to.

A quick write up to document web config changes when deploying to azure using release pipelines in azure devops

So – you want a step by step guide to deploying web apps to azure web apps from azure devops and changing config files in the release pipelines? Look no further. First create the new web.config files, as seen below In the file properties – make sure they are set to “Content” and “Copy Always” […]

How to Get the ID of the logged in user in asp.net mvc web api apicontroller

After much googling, and evening Bing-ing revealed nothing I discovered that for some reason I had the line config.SuppressDefaultHostAuthentication(); In my WebAPIConfig.cs file – I removed that and everything magically worked and I could use User.Identity.GetUserId();

Dynamic page redirects in TestCafe

So – you need to redirect to a dynamic page in TestCafe you say? Try the below const setValue = ClientFunction(() => {var idToUseForRedirection=document.querySelector(‘input[name=”ID”]’).value;document.location.href=”https://someurl.com?id=” + idToUseForRedirection; }); await setValue();

More Test Cafe Goodies

Generating a random string in some logical order const setValue = ClientFunction(() => {var dt = new Date();var dateString =”Steve French Test – ” + dt.getTime();document.querySelector(‘input[name=”ctl00$CPHSIURate$txtRiskName”]’).value =dateString;document.querySelector(‘input[name=”ctl00$CPHSIURate$txtRiskName”]’).dispatchEvent(new window.Event(‘change’, { bubbles: true }))}); await setValue(); as well as const setValue = ClientFunction(() => { document.querySelector(‘input[name=”CaptchaAgentValueAsSupplied”]’).value = document.querySelector(‘input[name=”CaptchaAgentValue”]’).value;});await setValue(); to play with dates const setValue = ClientFunction(() […]