Rick Strahl's Web Log
Wind, waves, code and everything in between...
Ad-free experience sponsored by:
- the market leader of .NET and Java APIs for file formats – natively work with DOCX, XLSX, PPT, PDF, images and more
Recent Weblog Posts
November, 2016 (4)
October, 2016 (4)
September, 2016 (5)
August, 2016 (1)
July, 2016 (1)
June, 2016 (6)
May, 2016 (6)
April, 2016 (4)
March, 2016 (3)
February, 2016 (2)
January, 2016 (5)
December, 2015 (1)
November, 2015 (3)
October, 2015 (1)
September, 2015 (2)
August, 2015 (2)
July, 2015 (5)
June, 2015 (5)
May, 2015 (5)
April, 2015 (3)
March, 2015 (5)
February, 2015 (4)
January, 2015 (5)
December, 2014 (3)
Visual Studio (41)
Web Services (18)
Web Api (16)
ASP.NET Core (8)
Microsoft AJAX (8)
Sql Server (8)
Web Connection (7)
West Wind Ajax Toolkit (7)
Entity Framework (6)
Html Help Builder (5)
Live Writer (5)
Source Control (4)
Visual Studio (4)
Help Builder (3)
Software Development (3)
Internet Explorer (2)
ASP.NET vNext (2)
Web Browser Control (1)
Web Deployment Projects (1)
Web Design (1)
Dynamic Types (1)
Control Development (1)
.NET Standard 2.0 - Making Sense of .NET Again
November 23, 2016 - Maui, Hawaii
It's taken awhile but it seems Microsoft is finally nailing the message for .NET going forward and .NET Standard with its common API specification is a huge part in making sure that the same base library of .NET is available on all .NET platforms. In this post I look at what .NET Standard is, how it works and what some of the surrounding issues and impacts are for the .NET Eco system.
Introducing Markdown Monster - a new Markdown Editor
November 04, 2016 - Maui, Hawaii
I'm happy to announce Version 1.0 of Markdown Monster a Markdown Editor and Weblog Publishing tool for Windows. In this post I give a quick tour of Markdown Monster and provide links to all you need to know to check out this great new Markdown editor.
Windows Update Hell
November 03, 2016 - Maui, Hawaii
I've been fighting Windows Update Hell for the last month with failed updates wreaking havoc on my machine. Updates fail to install completely and roll back and then continue to retry each day. Attempts to turn off the particular update now fails as well, so I'm stuck in this groundhog day like loop of pain. This is a cry for help, in hopes somebody has additional ideas on what to try.
C# NumberFormat Sections
November 03, 2016 - Maui, Hawaii
In all the years I've been using C#, I've completely missed that the NumberFormat features using .ToString() or string expressions support sections for positive, negative and zero values. In this post I describe the feature and how it works.
Excluding the node_modules Folder in Visual Studio WebSite Projects
October 30, 2016 - Maui, Hawaii
If you're working on a client side project that includes an NPM folder with a large number of dependencies and you're using a WebSite Project in Visual Studio, you've probably found that this is a terrible combination out of the box. In this post I describe why this is a problem and how you can work around it with a simple hack.
Automating Installation Builds and Chocolatey Packaging
October 25, 2016 - Maui, Hawaii
Having a quick and easy way to build a final deployable applicationsin a few minutes has been a huge motivation for me. I can update code and release a new build as soon as a feature is added or a bug is fixed, and my release cycle is much more frequent than it was before. I used to be much more conservative with releases - if something was broken it'd have to wait. But with an easy release mechanism all of that has changed and I can push new releases out much more frequently and I really like the fact that it works this way. In this post I describe my deployment processing for Markdown Monster for creating an installer, publishing it on my Web site and creating and publishing a Chocolatey package.
Error Handling and ExceptionFilter Dependency Injection for ASP.NET Core APIs
October 16, 2016 - Maui, Hawaii
Exception handling in API applications is important as errors - both handled and unhandled - need to be passed to clients in some way to let them display error information. ASP.NET's default error handling doesn't provide for object error results by default, but you can use an ExceptionFilter to intercept exceptions and format them yourself. In this post I look at how to create an API exception filter to create error object responses, and hook up custom logging of those errors to disk.
Dealing with Anti-Virus False Positives
October 05, 2016 - Maui, Hawaii
I've been struggling with false positive Anti-Virus warnings for Markdown Monster. In this post I describe what problems I was running into and how eventually managed to get a clean distribution of Markdown Monster out the door.
External Network Access to Kestrel and IIS Express in ASP.NET Core
September 28, 2016 - Hood River, Oregon
Recently I needed to connect to my Windows based ASP.NET Core API from my Mac and in order for that to work some configuration settings are necesary so that the ASP.NET applications can serve HTTP content to the external network connection that this entails. In this post I show what you have to do to enable remote connections both using the Kestrel and IIS Express Web servers.
ASP.NET Core and CORS Gotchas
September 26, 2016 - Hood River, Oregon
CORS is a requirement for cross domain XHR calls, and when you use Angular 2.0 default dev server and talk to an ASP.NET Core application you'll need to use CORS to get XHR to talk across the domain boundaries. Here's how to set up CORS and how to test it.
Bootstrap Modal Dialog showing under Modal Background
September 14, 2016 - Hood River, Oregon
On more than a few occasions I've run into issues with Bootstrap's Modal dialog rendering incorrectly with the dialog showing underneath the overlay. There are a number of ways around this problem, but none of them are universal that depend on how your pages are laid out. It's especially problematic for applications that dynamically render components where there's no good control on where the elements are placed outside of the components DOM containership. In this post, I describe a few of the workarounds and their limitations.
September 12, 2016 - Hood River, Oregon
Angular 2.0 and Typescript make it very easy to import external Typescript classes and references using the module loading functionality built into Typescript (and ES6). However, if you need to work with external libraries that aren't built with Typescript you need to do a little extra work in importing and referencing the external libraries. In this post I show two approaches for importing libraries as modules and dereferencing library globals so that the Typescript compiler is happy.
Capturing Zoom Operations in the WPF Web Browser Control
September 05, 2016 - Portland, Oregon
If you need to capture Zoom operations in the Web Browser control - either to avoid letting hte user zoom or to capture the zoom operation and take action on it - you need to dig into the Web Browser's DOM events to capture the scroll wheel and key events. In this post I describe how you can do just that by looking at an application that captures scrolling and rather than zooming adjusts the font size of the content.
Detecting and Setting Zoom Level in the WPF WebBrowser Control
August 22, 2016 - Reykjavik, Iceland
Zoom level detection in the Web Browser control is a pain and in this article I describe one approach I used to both capture the current Zoom level in order to adjust font sizes, and then also explicitly set the Zoom level in the Web Browser control of a WPF application.
Moving to Lets Encrypt SSL Certificates
July 09, 2016 - Lake Garda, Italy
This week marks the expiration of my last paid for SSL certificates and moving all certificates to Lets Encrypt. In the process I had a chance to moving some of my smaller personal and hobby sites as well as moving my wildcard cert for the main site. In this post I'll describe the process I'll describe what tools I used and the process I went through to gradually move my sites over to Lets Encrypt.
First Steps: Exploring .NET Core and ASP.NET Core
June 29, 2016 - Geneva, Switzerland
In this post I'll demonstrate how to get started with .NET Core and ASP.NET using the Command Line Tools. I'll create a few very simple projects and starting with a plain console application, show how to hook up ASP.NET, run an API and MVC app and then run the app locally on Windows and then move it over to run on the Mac. This is not meant to be your typical getting started tutorial that jumps right into Visual Studio and creating a Web project from there. Rather, the purpose of this post is to demonstrate some of the core underpinnings of how .NET Core and ASP.NET Core projects are bootstrapped to run.
ASP.NET Web Site Project Publishing and Changing ACLs
June 28, 2016 - Hood River, OR
When publishing ASP.NET Web Site Projects, the project publish will overwrite server ACLs by clearing them to the inherited defaults and removing rights from common accounts. The result is that if you have custom ACLs set on the server they will be wiped by default. This occurs only on Web Site projects and in this post I remind myself of the .pubxml override setting that disables this default behavior
Upgrading to ASP.NET Core RTM from RC2
June 27, 2016 - Hood River, OR
I installed and upgraded an ASP.NET Core Sample application today and while the actual project upgrade process from RC2 was relatively easy, there were a few hiccups with installation and one of the breaking changes for the RTM release. In this post I'll go over some of the things I ran into and the workarounds.
Use Powershell to bind SSL Certificates to an IIS Host Header Site
June 23, 2016 - Maui, HI
Managing SSL certificates on Windows has always been a pain in the ass and recently with the introduction of SNI to support multiple SSL certificates per site things have changed slightly in order to register certificates with IIS programmatically. In this post I show how to use PowerShell and the IIS WebAdministration snap in commands to create or import and register an SSL Certificate via the Command Line along with how this convoluted process works
ASP.NET Core and .NET Core Overview
June 13, 2016 - Hood River, OR
ASP.NET Core and .NET Core are almost here, with the RTM release scheduled for the end of this month. In this post I’m going to revisit the high level overview architecture of .NET Core and ASP.NET Core since so much has changed, to help you understand how the pieces fit together and what it means to develop on the new stack along with some personal thoughts on how I plan to approach all of this new tech in my own work.
Publishing and Running ASP.NET Core Applications with IIS
June 06, 2016 - Hood River, OR
If you plan on hosting ASP.NET Core applications on IIS, you'll find that the process to get your application to run is quite different than it was with classic ASP.NET. Because ASP.NET Core applications are essentially standalone Console applications that run outside of IIS, some special tooling and new publishing tools are required to get your apps up and running on Windows Server. In this post I'll give an overview of the architecture and show you how to deploy your ASP.NET Core applications using IIS on Windows Server.
IIS Channel Listener Errors in Windows 10 Insider Build 14342
May 30, 2016 - Maui, HI
After installing Insider Build 14342 I ran into some major issues with IIS crashing hard and resulting in stopped Application Pools. After some tracking it turns out this is due to application pool bitness which causes 32 bit Application Pools to crash for me.
Windows Updates and Lost Software Licenses and Activations
May 29, 2016 - Maui, HI
Windows Updates often hose Software Activations and Licenses for various commercial software packages. It's a pain in the ass and it's time to let those vendors that use the outdated practice of counting activations based on Windows OS criteria is no longer viable.
Strongly Typed Configuration Settings in ASP.NET Core
May 23, 2016 - Maui, HI
ASP.NET Core provides built-in support for using strongly typed classes to represent configuration information. The configuration system provides a flexible mechanism for using different configuration storage providers and mapping those providers to your strongly typed objects. In this post I show how to set up strongly typed resources and use them in your ASP.NET Web applications.
Using Westwind.Globalization to edit loose RESX Files
May 18, 2016 - Maui, HI
Although Westwind.Globalization is primarily aimed at Web applications, you can also use it to edit arbitrary RESX files using the Localization Administration interface that comes with the library. In this post I show how you can import RESX resources, then use the editor to manipulate RESX resources interactively, and then export the resources back out, using a local Web application on your machine.
Creating Single Instance WPF Applications that open multiple Files
May 13, 2016 - Maui, HI
If you're building document centric applications, Singleton style EXE applications are pretty common. Rather than creating new windows for each opened file, a more common scenario is to open new tabs in a single instance. In this post I'll describe how to create a WPF application that allows only a single instance to run and passes command line arguments passed in secondary instances to the primary instance and I'll describe some pitfalls that you might have to watch out for.
Getting 'motivated' to move to SSL and HTTPS
May 09, 2016 - Maui, HI
The pressure is on: HTTPS is pushed front and center more and more as we see the browser vendors and API tools providers, making SSL encryption no longer an optional part for many things that you build on the Web. SSL and HTTPS are becoming a requirement and for good reasons. I personally ran into this with the Google Maps API in one of my applications that now requires an HTTPS based client page in order to use this API. In this post I discuss some of the issues and why this is actually a good thing, and some of the steps I took to move my existing site to HTTPS.
Windows 10 Bash Shell Network Connectivity not working?
April 13, 2016 - Maui, HI
When trying out the Windows 10 Bash on Ubuntu shell, I ran into several problems with networking. Turns out that there are issues with IPv6 and by swapping or removing the IPv6 nameserver entries with IPv4 versions connectivity can be restored back.
Google AdSense for AJAX Content
April 09, 2016 - Maui, HI
I recently redesigned one of my Web sites to use dynamic page re-loading for additional page content, which broke the original AdSense ad code. In this post I'll describe how to get AdSense ads to work with AJAX loaded content by explicitly calling Googles ad code from your dynamic navigation code.
Configuring ASP.NET and IIS Request Length for POST Data
April 06, 2016 - Maui, HI
One of the most infuriating things about IIS configuration in general is how the Request length is configured in the IIS and ASP.NET. There are several places that control how much content you can send to the server and over the years this setting has changed in a number of ways. The places where it's configured is not super obvious and they can be fluid because some of these features are...
Custom Message Formatting in WCF to add all Namespaces to the SOAP Envelope
April 02, 2016 - Maui, HI
Over the last few days I've been fighting with a Web Service that does not allow inline namespaces which WCF copiously uses by default in its generated service proxies. In this post I describe how to create a custom message formatter add namespaces explictly to the SOAP envelope.
Reversing Sort Order on DOM Elements using jQuery
March 24, 2016 - Maui, HI
When creating list content in Web pages, it's often quite useful to allow users to sort or reverse the order of items displayed. Creating client side sortable lists is easy to do and in this post Rick shows an easy way to make a list reversible using jQuery.
Code Magazine Article: Flexing your HTML Layout Muscles with Flexbox
March 03, 2016 - Maui, HI
Flexbox is a relatively new CSS based technology that makes it much easier to create structured layouts with HTML and CSS. Based on a containership hierarchy, Flexbox combines the structured features of tables with the free form layout capabilities of arbitrary HTML elements that make it possible to create complex , yet flexible HTML designs much more easily that was otherwise possible. My article in CoDe Magazine describes the reasons for Flexbox, the basics of operation and few practical examples you can use today to put flexbox to use.
Registering and Unregistering a VSIX Extension from the Command Line
March 01, 2016 - Maui, HI
If you use VSIX extensions and you need to install them as part of an installation script, you can use the VSIX Installer executable that ships with Visual Studio to control the install and uninstall process.
Using Let's Encrypt with IIS on Windows
February 22, 2016 - Maui, HI
Let's Encrypt is a new, open source certificate authority for creating free SSL certificates. In this post I show you how you can use some of the API clients on Windows to create Let's Encrypt certificates for use in IIS.
Flexbox Containers, PRE tags and managing Overflow
February 15, 2016 - Maui, HI
I ran into nasty problem with PRE tag overflow behavior, which caused content of PRE tags to not respect the boundaries of the container even when overflow rules were set. It turns out the problem was due to Flexbox and the min-width setting that is set differently than standard DOM Block mode rendering.
FontAwesome Fonts and Mime Types in IIS and other Web Servers
January 25, 2016 - Maui, HI
When using Font-Awesome on IIS (and other Web Servers) you might find that the server is not serving the .WOFF2 or .WOFF file that is requested by Chrome for the FontAwesome font files. Although Fontawesome works fine regardless, you'll want to address the 404 error by serving the preferred file. Here's how.
Microsoft renames ASP.NET 5 to ASP.NET Core 1.0
January 21, 2016 - Maui, HI
ASP.NET 5 has been renamed to ASP.NET Core 1.0 and in the process some major changes are happening to the framework very late in the release cycle. In this post I take a look at some of the concern I have when I see these drastic changes so late in the release cycle and some thoughts on how I've worked with ASP.NET Core so far and some of the trepidations I have moving forward.
Styling all Text Elements with the CSS :not Filter
January 19, 2016 - Maui, HI
HTML5 has a proliferation of INPUT types and when you need to style these types in an application the list can get quite long. You can cut down on the size of the list and simplify remembering which INPUT types you don't want styled as text, by using the CSS :not() selector. This post shows how.
Resetting Entity Framework Migrations to a clean Slate
January 13, 2016 - Maui, HI
I've had a number of problems with Entity Framework Migrations getting out of whack to the point were I can't get the database and the migrations into sync to accept new changes. I've found that rather than spending hours fixing out of whack migrations it's sometimes much easier to simply wipe the slate clean and create a new initial migration. This post describes the steps on how to remove existing migrations and create a new initial migration from the current schema.
jQuery-resizable and Table Column Resizing
January 04, 2016 - Maui, HI
Last week I posted about a small jquery-resizable plug-in I'd built. Many questions came in about how to handle table column resizing using this plug-in and in this post I demonstrate how with a little extra work, you can also create resizable table columns using the jquery-resizable plugin.
A small jQuery Resizable Plug-in
December 21, 2015 - Maui, HI
I recently had a need for a simple resize component and couldn't find a lightweight implementation. I ended up creating a small jquery-resizable plug-in. In this post I discuss a few use cases for resizables and show the jquery-resizable plug-in, how it works and how it's implemented.
Going Big: 40 Glorious inches of 4k with the Philips BDM4065UC
November 23, 2015 - Maui, HI
A couple of weeks ago I bought a behemoth 40 inch 4k monitor, the Philips BDM4065UC. It's a relatively cheap 4k monitor that is massive and as it turns out 40 inches is the perfect resolution to be running for a 4k display. In this post I'll describe what it's like to run a 40" display and provide a few details about this particular monitor.
Path Environment Editing Improvements in Windows 10
November 18, 2015 - Maui, HI
Windows 10 Update 1 has apparently added a nice improvement to editing environment variables and more importantly added a real list based editor for the plethora of global and private paths that seem to sneak into developer machines and their system PATH configurations.
Serving URLs with File Extensions in an ASP.NET MVC Application
November 13, 2015 - Maui, HI
I ran into an issue trying to create a specific file URL for Windows Live Writer in an MVC application, where I needed to return a very specific file based URL with an extension from an MVC application. Turns out that this is not as easy as it sounds.
Mysteriously stubborn IIS 401.2 Errors
October 29, 2015 - Hood River, OR
I ran into a nasty IIS issue yesterday that took me the better part of a day to get myself out of. It involved particularily stubborn Authentication requests from ASP.NET applications when there shouldn't have been any. It turns out the culprit was some corrupted config files - here's the why and how.
Talking about ASP.NET 5 on .NET Rocks
September 08, 2015 - Hood River, OR
Last week I got a chance to talk to Carl and Richard about my experiences with ASP.NET 5. The good, the bad and th obnoxious. Ok maybe none of the latter. Great discussion on why we need a reboot on ASP.NET and how the process of building ASP.NET has affected developers trying to keep up with the latest bits.
Announcing West Wind Web Surge 1.0
September 02, 2015 - Hood River, OR
After an extended beta period I'm happy to announce West Wind WebSurge 1.0. Web Surge is a light weight and super easy to use HTTP Url and Load testing tool that is great for API testing and stress testing Web applications under load. In this post, I'll talk about some of the motivations for this tool and take a tour through a bulk of the features.
August 25, 2015 - Hood River, OR
Upgrading ASP.NET 5 Projects between Beta Versions
August 11, 2015 - Hood River, OR
Upgrading ASP.NET 5 projects from beta to beta has not been pretty. The beta 6 update has been one of the easier ones to work through, but still there's a process involved. In this post I describe the steps I tend to go through for each new beta release.
Windows 10 RTM Upgrade and Driver Update Issues
July 31, 2015 - Hood River, OR
My Windows 10 update from the Insider Previews to RTM did not go smooth. I had a driver issue that apparently was not allowing me to upgrade and Windows 10 doesn't allow for hiding updates. Here's what went wrong and how I fixed it.
July 18, 2015 - Hood River, OR
Multiple Desktops in Windows
July 10, 2015 - Hood River, OR
Windows 10 natively supports multiple desktops which provides great opportunity for reducing clutter while working and getting stuff done. In this post I show how the new Windows 10 multi-desktop features work and also show how you can use multiple desktops in previous versions of Windows.
Windows 10 Upgrade and IIS 503 Errors
July 05, 2015 - Hood River, OR
After upgrading my machine to Windows 10 today I found that IIS, while working was throwing 503 Service Unavailable errors on every page. Turns out the issue is the Rewrite Module wasn't updated in the upgrade and that's causing a hard crash of the IIS module. Here's how to fix this issue.
External Links in Cordova for iOS
July 02, 2015 - Hood River, OR
When building Cordova apps for iOS you need to be prepared to deal with external links that you might want to open outside of the WebView control. By default any 'external' links routed to an href target or window.open() call are still opened in the same WebView rather than externally in Safari or whatever the default browser is. This often is a problem since there's no way to navigate back to your initial content. In this post I describe the problem and how to use a plug-in to work around what should be native behavior in any WebView control.
Rebooting Database Localization for ASP.NET with West Wind Globalization 2.0
June 23, 2015 - Hood River, OR
I'm happy to announce the release of Westwind.Globalization version 2.0 - a database resource localization library for ASP.NET. Version 2 is a major upgrade that includes many new features including support for new database providers, a brand new Web Resource Editor, much improved ASP.NET MVC support, vastly better support for importing and exporting Resx resources, creating of strongly typed classes and much more. There's also a new video that describes features and provides a getting started guide with some detailed background. In this post I review some of the new features and point at additional resources for more information.
Turn off HTML Input Auto Fixups for Mobile Devices
June 15, 2015 - Hood River, OR
You ever run into a Web site that messes with your user input when you don't want it to while using your phone? You know, capitalize the first letter when you're trying to enter a username, or email address, or auto-correct text while typing a part number. As a mobile Web developer it's easy to forget about these automatic behaviors, when you don't want them as auto correction and fixup is the default behavior. To provide the best user experience sometimes we need to be agressive about turning enhancement functionality off. In this post I talk about auto-fixup behaviors for mobile browsers and how to turn them off in your applications. Your users will thank you for paying attention to this small detail.
Using and Debugging External Source Code Packages in ASP.NET 5
June 09, 2015 - Hood River, OR
ASP.NET 5 and the new DNX runtime make it very easy to include external source code based packages into your own projects. It super easy to pull a project - including Microsoft's core DNX runtime projects, from GitHub and then link it into your own projects. This is great for debugging and fixing an immediate problem that might be a show stopper for you, or makes it very easy to contribute back to an open source library. In this post I'll describe a debug scenario I ran into in my last post involving a bug in the DNX runtimes, and show how to download and link the library from Microsoft's GitHub repository, fix the bug and integrate the code into my own project.
IPad Scroll Issues with Fixed Content
June 05, 2015 - Hood River, OR
Ran into some issues with fixed headers again in one of my mobile applications where on an iPad it appeared the content wouldn't scroll properly. I've run into this issue a few times and it turns out it's related to positional layout and specifically problematic on iPad Safari browsers. In this post I'll discuss the problem and the relatively simple workarounds.
Strongly typed AppSettings Configuration in ASP.NET 5
June 03, 2015 - Hood River, OR
ASP.NET 5 features a new configuration system that includes a number of new configuration sources as well as an easy way to consume strongly typed resources. In this post I demonstrate how to use the basic features and show how you can use different configuration stores to hold configuration data.
How to manage Content in NuGet Packages?
May 28, 2015 - Hood River, OR
In getting ready to put out version 2 of Westwind.Globalization I've been rearranging the NuGet package layout a few times and I'm considering further breaking out the package layout. In this post I describe some of the dilemmas I'm looking at in deciding how much abstraction is required in breaking the NuGet packages into easily usable and maintainable components with the least amount of friction.
Interactive ASP.NET Resource Linking and Editing with Westwind.Globalization
May 27, 2015 - Hood River, OR
Resource linking for resource editing is a very useful feature when localizing application, making it easy to jump back and forth between content and the resources that need to be edited. Seeing resource content in context is vital to good application localization. Westwind.Globalization provides a simple HTML based resource linking mechanism and in this post I describe how it works, and how it's implemented in the Westwind.Globalization library.
Right To Left (RTL) Text Display in Angular and ASP.NET
May 23, 2015 - Hood River, OR
Recently I was gently asked to add support for RTL language editing in my Westwind.Globalization library and the Web Resource Editor. The Editor supports displaying resources in all of its localized version, but it didn't respect the RTL setting for languages that required it. In this post I describe how RTL support works in browsers, how you can detect RTL support on a locale in .NET and demonstrate how I integrated basic RTL edit and display support for the Resource Editor using a custom Angular directive.
Angular Select List Value not binding with Static Values
May 21, 2015 - Hood River, OR
Ran into a problem converting from Angular 1.3 to 1.4rc a couple of days ago. The issue is that the way ng-model bindings work has changed, in that Angular 1.4 and later uses exact type matching for value comparisons which results in behavior changes. In my case I ran into a problem with static list values binding to a non-string value which caused the binding to effectively not work at all. Here's what the problem is and how to work around it.
401 Response from ASP.NET Identity when linking to External Accounts
May 05, 2015 - Hood River, OR
A couple of days ago I ran into an odd problem where all of my external ASP.NET Identity providers would fail to redirect to the external provider login URLs. Instead the app fired empty 401 requests without any other indication of failure. It turns out this was a misconfiguration issue, but it took a bit to track this down due to the fact that there's no error trapping and no error information. Here's more info on this edge case failure.
Adding minimal OWIN Identity Authentication to an Existing ASP.NET MVC Application
April 29, 2015 - Maui, HI
ASP.NET 4 provides a new Identity Authentication/Authorization framework that's very comprehensive and works reasonably well for new applications. However, if you have existing applications or use custom user management, it's not very clear how to use just the basic OWIN Authentication/Authorization layer without the full UserManager and Entity Framework implementation. In this post I describe how to use the bare minimum Identity features to hook up a custom domain model for both local and external logins in an ASP.NET MVC application.
ASP.NET MVC HttpVerbs.Delete/Put Routes not firing
April 09, 2015 - Maui, HI
If you're using ASP.NET MVC to build API endpoints in your application you might have run into a problem where the PUT and DELETE HTTP operations don't work - you get a 404 instead. Turns out that the IIS default configuration doesn't include the verbs for a required handler. Here's what the problem is, and how to fix it if it hits you.
Adding Files to the Windows MRU/Recent Document List
April 06, 2015 - Maui, HI
In this post I talk about adding shortcut files to the Windows Most Recently Used (MRU) list that is also used for task bar icon Jump Lists. There are easy APIs that let you add associated files to your application's MRU. With a little extra work you can also read this list inside of your own applications so you can build your application specific MRU lists and let Windows manage the storage of the linked references rather than your own configuration. Here's how.
Prettifying a JSON String in .NET
March 31, 2015 - Maui, HI
Occasionally it's useful to prettify an existing JSON string that you've received from somewhere: An HTTP response you need to look at while debugging or a UI that needs to display JSON to the user. Here's a small tip that makes it easy to take a JSON string and prettify it using the JSON.NET library.
Bitmap types, Binary Resources and Westwind.Globalization
March 27, 2015 - Maui, HI
I've been working on supporting binary resource imports via the Web interface using Westwind.Globalization and I'm debating on whether supporting the .NET convention of importing image resources as Bitmaps is prudent. Bitmaps are rather unwieldy to use and are painful to export to common stream or file formats due to the funky 30 year old encoding architecture used by GDI+. In this post I talk about some of the issues I've run into with Bitmaps and why I'm considering importing resources simple as raw byte data.
Updated DeleteFiles Utility now on Chocolatey
March 24, 2015 - Maui, HI
I've updated my DeleteFiles utility that can be used to recursively delete files and folders. I've recently updated the utility with a few new features including support for long paths (greater than MAX_PATH) that can choke out Explorer and other Windows shells. There are also additional options for previewing and recycle bin support as well quiet command line mode and a few improvements in the timeout filter for file selection. Last but not least, you can now install DeleteFiles directly from Chocolatey so it's easy to load DeleteFiles and get it onto your system and system path in seconds.
ASP.NET MVC, Localization and Westwind.Globalization for Db Resources
March 17, 2015 - Maui, HI
Recently I've been getting a number of questions related to customers having issues with running the Westwind.Globalization Database Resource provider library under ASP.NET MVC. While the original versions of this library were definitely WebForms centric since it originated in the WebForms era, the library has had full support for ASP.NET MVC for a while. In this post I'll review how localization works in ASP.NET MVC and then demonstrate how Westwind.Globalization handles the same scenarios with database resources.
Cordova and Visual Studio CODE Magazine Article
March 04, 2015 - Maui, HI
Looks like my "Taming Mobile Apps with Cordova and Visual Studio" article went live recently. If you want to find out how to use the new and pretty awesome Visual Studio Tools for Apache Cordova for building Web based, hybrid Mobile apps, this article is a great starting point. The article gives an overview of Cordova and then walks through examples with special focus on building iOS apps.
Using FontAwesome Fonts for HTML Radio Buttons and Checkboxes
February 26, 2015 - Maui, HI
Spruce up your boring checkboxes and radio buttons with custom FontAwesome symbols using a little bit of CSS. If you're tired of boring checkboxes and radio buttons, or you simply want a more consistent look of these controls across browsers and controls check out FontAwesome to provide you with customizable checks and boxes to use for selection boxes. In this post I'll show how to use pure CSS to set up FontAwesome checkboxes and radios and talk about a few gotchas I ran into along the way.
Back to Basics: UTC and TimeZones in .NET Web Apps
February 10, 2015 - Maui, HI
Storing dates in persistent storage using UTC dates is a widely accepted best practice. But it's surprisingly complex using date data effectively if you want to let the user see dates and query data in their local time zone. Looking around I noticed that there's not a lot of comprehensive info on this topic, so I decided to take notes and write down some of the approaches I've used in this post. This post combines and overview and a number of helper routines specifically geared towards user timezone adjustments in typical ASP.NET Web applications.