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
WebLog Posts in Category ASP.NET
April, 2017 (3)
March, 2017 (5)
February, 2017 (2)
January, 2017 (4)
December, 2016 (5)
November, 2016 (4)
October, 2016 (4)
September, 2016 (5)
August, 2016 (1)
July, 2016 (1)
June, 2016 (5)
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)
Visual Studio (44)
Web Services (19)
Web Api (16)
ASP.NET Core (12)
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)
Internet Explorer (4)
Help Builder (3)
Software Development (3)
ASP.NET vNext (2)
Markdown Monster (1)
Internet Explorer (1)
Markdown Monster (1)
Control Development (1)
Dynamic Types (1)
Web Deployment Projects (1)
Web Design (1)
Web Browser Control (1)
Running .NET Core Apps under Windows Subsystem for Linux (Bash for Windows)
April 13, 2017 - Maui, Hawaii
The Windows Shell for Linux (WSL or Bash on Ubuntu on Windows) provides a nice way for Windows and Linux to interact without the overhead of dealing with a separate VM. Using the WSL you can now also run your .NET Core applications directly under Linux without requiring a VM or Docker. In this post I demonstrate how the shell works and how you can run your .NET and ASP.NET Core applications to test operation under Linux.
Updating my AlbumViewer Sample to ASP.NET Core 1.1 and Angular 4
March 31, 2017 - Maui, Hawaii
I updated my AlbumViewer sample application recently to the latest versions of ASP.NET Core (1.1) and the new .csproj project as well Angular 4
New CODE Magazine Article: Getting down to Business with ASP.NET Core
January 12, 2017 - Maui, Hawaii
The latest issue of CODE magazine features my `Getting down to Business with ASP.NET` Core article as the cover article. The article focuses on building an ASP.NET Core backend for an Angular 2 front application, covering all aspects of separating business and Web app logic, dealing with EF Core data access in related tables, CORS to be able to run across domains and simple authentication in a client centric REST service application. Check it out.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Project Navigation and File Nesting in ASP.NET MVC Projects
June 30, 2014 - Hood River, OR
Project navigation in large projects can be a pain as you have to sift through large amounts of files. I found myself re-organizing projects in a few different ways to make project navigation easier. In this blog post I share a few different approaches as well as some useful tooling to improve my daily workflow.
A dynamic RequireSsl Attribute for ASP.NET MVC
June 18, 2014 - Hood River, OR
In ASP.NET MVC the RequireHttps attribute allows for securing controllers and controller methods, but it's limited to either on or off statically. In this post I discuss a custom attribute that can dynamically set SSL usage based on a configuration setting or delegate.
Updated ASP.NET Database Resource Provider
March 31, 2014 - Maui, HI
I've updated my database ASP.NET Resource Provider project into a more formal project with a new home page, and official GitHub repository for the source code as well as a getting started video. In this video I talk about what's new and a few examples on how to use the provider.
Auto Selecting Cultures for Localization in ASP.NET
March 27, 2014 - Maui, HI
When creating multi-language Web sites, one of the key issues you need to deal with is how to assign a culture to display the appropriate resources. Whether you need to auto-switch locales based on browser language, or explicitly assign a locale based on user preferences there is generally some code logic involved in making these decisions. In this post I show what options are available and a small helper that simplifies setting the culture in ASP.NET applications.
Re-examining ASP.NET and Helios Performance Tests
December 09, 2013 - Maui, HI
Spend a little time over the weekend re-running some of my ASP.NET raw throughput benchmarks on my new machine and found some interesting results. Much faster, but also some surprises with self-hosting and efficiency surprises with various Web API approaches.
Routes, Extensionless Paths and UrlEncoding in ASP.NET
November 14, 2013 - Maui, HI
When using custom routing in your ASP.NET applications be careful with encoding routes into paths. Specifically make sure that embedded route paths are properly encoded and that you watch out for a few gotchas related to path encoding. This post demonstrates how to set up routes for a WebForms app and demonstrates a couple of potential problems of manual route encodings and the fixes.
Use IIS Application Initialization for keeping ASP.NET Apps alive
October 02, 2013 - Maui, HI
Ever want to run a service-like, always-on application inside of ASP.NET instead of creating a Windows Service or running a Console application? Need to make sure that your ASP.NET application is always running and comes up immediately after an Application Pool restart even if nobody hits your site? The IIS Application Initialization Module provides this functionality in IIS 7 and later, making it much easier to create always-on ASP.NET applications that can act like a service.
Rendering ASP.NET MVC Razor Views outside of MVC revisited
July 15, 2013 - Pag, Croatia
Rendering ASP.NET MVC Views outside of the context of MVC can be immensely useful for various administration, error and logging tasks. Luckily there are some easy ways to render MVC even outside of an MVC controller. Here's some information on how to make that happen.
A first look at SignalR
May 22, 2013 - Maui, Hawaii
Last month I finally had a chance to use SignalR in a live project for the first time, and I've been impressed by what this technology offers to .NET developers. It's easy to use and provides rich real-time two way messaging between client and server applications, as well as the ability to broadcast message to all connected clients. This is technology that offers many opportunities to rethink of what we can build with Web applications.
A small, intra-app Object to String Serializer
April 01, 2013 - Maui, Hawaii
On a few occasions I've needed a very compact serializer for small and simple, flat object serialization, typically for storage in Cookies or a FormsAuthentication ticket in ASP.NET. XML and JSON serialization are too verbose for those scenarios so a simple property serializer that strings together the values was needed. Originally I did this by hand, but here is a class that automates the process.
Using plUpload to upload Files with ASP.NET
March 12, 2013 - Maui, Hawaii
plUpload is a popular client side multi-file upload component. In this article I describe a small library that abstracts the server side processing of uploaded files with an HTTP handler demonstrate putting it all together with a small Image Upload sample application.
Visual Studio Web Publish Lockup? Check for invisible Window
February 21, 2013 - Seattle
If your Web Publish dialog appears to lock up Visual Studio when you click on the Publish option, most likely the Web Publish window is hidden on a second screen that is not currently visible. Here's how you can work around this annoying little bug.
Caveats with the runAllManagedModulesForAllRequests in IIS 7/8
October 25, 2012 - Maui, Hawaii
IIS 7 and 8 support using Managed Modules to handle access to all IIS request content which is very powerful. But sometimes you actually want to not handle non-ASP.NET content and it's not very obvious how to minimize access to non-ASP.NET requests in managed modules.
Creating STA COM compatible ASP.NET Applications
September 18, 2012 - Maui, Hawaii
When it comes to deploying STA COM components in ASP.NET only WebForms has native support for STA component. Other technologies like MVC, ASMX Web Services and WCF run only in MTA mode. If you need to run your STA COM Components in ASP.NET here is what you need to know and a few tools that help you create STA compatible handlers.
ASP.NET Frameworks and Raw Throughput Performance
September 04, 2012 - Maui, Hawaii
I got curious the other day: How do the various ASP.NET framework compare in raw throughput performance? With so many development choices on the ASP.NET stack available today it's interesting to take an informal look at how raw throughput performance compares.
Rendering ASP.NET MVC Views to String
May 30, 2012 - Hood River, Oregon
Creating templated text output that's not tied to the HTTP output stream is a frequent requirement in my applications. Rendering confirmation emails, password resets, validations and notifications all generate text through templates that require string or stream output that doesn't get sent to HTTP. Here are some helpers that make it easy to create string output from MVC Views...
GZip/Deflate Compression in ASP.NET MVC
April 28, 2012 - Maui, Hawaii
If you want to create ASP.NET MVC content that uses gzip or deflate compression you need to use some custom code. Here's an action filter that compresses content in your ASP.NET MVC applications.
Internet Explorer and Cookie Domains
April 25, 2012 - Maui, Hawaii
Got tripped up today by another IE issue: Internet Explorer will not accept Cookies with local domains set for the Cookie Domain and fail silently.
ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes
April 20, 2012 - Maui, Hawaii
Today I discovered an MVC behavior I hadn't noticed: For HTML helper controls MVC always uses POSTBACK values to display the control value rather than model values when the View is rendering in a POST back. In effect this means that MVC Views can't update the value of controls during a POST back using the standard HTML Helper Controls.
Wishful Thinking: Why can't HTML fix Script Attacks at the Source?
April 14, 2012 - Maui, Hawaii
I'm dealing with user HTML input in a Web application today and again I curse over the complexities involved in sanitizing this html. So today I started dreaming about a possible alternative...
Changing the default HTML Templates to HTML5 in Visual Studio
December 23, 2011 - Maui, Hawaii
The default WebForms templates in Visual Studio still use the XHTML doctype headers by default. HTML5 doctype headers are easier to use and read and with HTML5 support now becoming mainstream and backward compatible with older browsers its time to switch those doctype headers. This post demonstrates how to change the default VS templates or create new templates altogether. With HTML becoming more prominent and the new headers being easier to read and smaller in size, it's
Debugging Application_Start and Module Initialization with IIS and Visual Studio
December 15, 2011 - Maui, Hawaii
If you're running the full version of IIS and you try to debug your Web application's startup code in Application_Start you might have found that you can't debug this code as the debugger doesn't break there. Here's why and some easy ways you can work around this limitation.
HTML 5 Input Types - How useful is this really going to be?
December 10, 2011 - Maui, Hawaii
The HTML 5 input controls enhancements seem like a nice feature - until you look a little closer and realize that that validation and styling these control enhancement use are likely going to interfere with your existing application logic and styling. Here are are some thoughts on the subject.
HTML 5 Input Types on WebForms Controls
December 10, 2011 - Maui, Hawaii
HTML5 input types are new, and as it turns out ASP.NET Webforms input controls can easily create HTML5 input elements.
Loading jQuery Consistently in a .NET Web App
October 10, 2011 - Hood River, Oregon
Loading jQuery into a page consistently across the lifetime of an application involves, managing versions and updating urls frequently. In this post I look at my preferred way to load jQuery and how to manage the script reference that gets embedded into the page with a single update location.
Getting a Web Resource Url in non WebForms Applications
October 05, 2011 - Hood River, Oregon
Need to retrieve Web Resource Urls from a .NET assembly, but not running in WebForms? Here's how you can create a small helper function that lets you retrieve WebResourceUrls from Razor or MVC applications.
ActiveX component can't create Object Error? Check 64 bit Status
June 19, 2011 - Hood River, Oregon
When moving applications to 64 bit servers be sure to check that you don't call old school, 32 bit COM objects. If you do these COM object calls fail. Thankfully IIS 7 and later allows Application Pool configuration to enable 32 bit operation to work around this issue. Here's how.
Built-in GZip/Deflate Compression on IIS 7.x
May 05, 2011 - Maui, Hawaii
IIS 7.x makes content compression via GZip very easy. Here's how compression on IIS works and how you can set it up on your server in a few simple steps.
ASP.NET GZip Encoding Caveats
May 02, 2011 - Maui, Hawaii
GZip and Deflate compression is easy to use in ASP.NET applications, but there are a few caveats that you need to watch out for. This post reviews the basics of implementing compression in ASP.NET code and describes a couple of scenarios that can cause problems when using programmatic compression via Response.Filter.
Error on 64 Bit Install of IIS – LoadLibraryEx failed on aspnet_filter.dll
April 04, 2011 - Maui, Hawaii
Ran into a problem on my 64 bit machine with IIS trying to load 32 bit dlls. Turns out this is a misconfiguration that occurred from some additional installation that failed to set a specific bitness valuie and pointed to 32 bit install. Here's what happened and how it got fixed.
Custom ASP.NET Routing to an HttpHandler
March 28, 2011 - Maui, Hawaii
Routing support in ASP.NET 4.0 has been vastly improved, but custom routing still involves a fairly complex process of creating RouteHandlers and mapping requests properly. In this post I show an example of how to create custom routes automatically via Attribute route mapping for Http Handler endpoints.
Changing an HTML Form's Target with jQuery
January 30, 2011 - Chennai, India
Retrieve the full ASP.NET Form Buffer as a String
January 17, 2011 - Chennai, India
How do you get the full Request.Form buffer in an ASP.NET request as a string? Here's how with a simple function.
WCF REST Service Activation Errors when AspNetCompatibility is enabled
January 06, 2011 - Maui, Hawaii
Ran into a version problem with WCF REST Services when using on IIS and with ASP.NET Compatibility enabled. Turns out there's a potential version conflict in the system .config files that can cause this error to creep up - here's how to fix it.
A Closable jQuery Plug-in
November 29, 2010 - Maui, Hawaii
I've found it very useful to have a closeable plug-in that hide the content of an HTML element providing a visual close image cue. Almost every UI I build these days requires either closing pop up windows or even more commonly requires that items are removed and visually hidden which usually implies 'close' behavior. In addition to removing a bunch of HTML markup, having a plug-in is also quite useful for server controls especially if multiple behaviors (plug-ins) need to be applied.
Adding proper THEAD sections to a GridView
November 18, 2010 - Maui, Hawaii
ASP.NET's GridViews (and the older DataGrid) don't generate the best HTML and one of the common problems I run into is that headers aren't generated with proper thead tags. With a little jQuery script help this can be fixed easily when the page loads. Here's how.
Request Limit Length Limits for IIS’s requestFiltering Module
October 28, 2010 - Maui, Hawaii
Got bit during an update today by code that ran just fine on my dev machine and failed on OpenID logins on the live machine. Turns out RequestFiltering was not allowing the long OpenID urls to be served, a problem that's easy to hit with the default settings in Windows Server 2008.
Microsoft Introduces WebMatrix
August 17, 2010 - Maui, Hawaii
Microsoft recently released a preview of WebMatrix a tool geared towards hobby/non-developer types to build Web applications. This all in one environment is supposed to simplify Web development with having to be an expert. In this post I review some of the interesting features and how they stack up.
AspNetCompatibility in WCF Services – easy to trip up
April 12, 2010 - Maui, Hawaii
When using ASP.NET compatiblity in WCF REST services you'll want to be very careful in matching your configuration settings and service attributes in the correct combination or you may end up with unpleasant and hard to find ServiceActivationExceptions.
HttpContext.Items and Server.Transfer/Execute
January 20, 2010 - Maui, Hawaii
I got bitten by a the fact that the Context.Items collection stays active throughout the ENTIRE lifetime of an ASP.NET request including Server.Transfer and Execute calls. In certain situations this can cause big problems if you expect the items to be unique for the specific page/component request.
Speaking at the Portland Area .NET User Group on Tuesday Sept 1st
August 27, 2009 - Hood River, Oregon
I’ll be speaking at the PADNUG meeting next week in Portland at the Microsoft office. Rich Hubbins asked me to present on jQuery again as I did last year. A lot has changed in the last year and when I gave the last presentation jQuery was just starting to get some attention in the .NET world. By now many more people have been using jQuery for a while so this talk likely will hit a different...
Url.Action() and RouteValue Encoding
July 19, 2009 - Hood River, Oregon
When creating custom URLs with the UrlHelper.Action() method is a great way to create links to other URLs in the current Web application. However, you need to be careful of certain encoding issues as certain characters are not correctly encoded to work properly as parameters.
Creating a quick and dirty jQuery contentEditable Plugin
May 25, 2009 - Maui, Hawaii
Inline editing content is a feature that's novel and highly useful at the same time. I've been using it in a number of admin interfaces to provide very easy and quick text updates to existing content. There are a number of ways to accomplish this but in this post I'll discuss a contentEditable jQuery plugin that makes any content inline editable using the DOM's contentEditable attribute that maintains text formatting in the editable text.
Where's my .NET 3.5 (on IIS), Dude?
March 24, 2008 - Maui, Hawaii
I just delivered a small 3.5 application to a customer in compiled form and told him to install the application on IIS. The company is one I've dealt with on a few occasions and they are .NET aware shop where I deal with developers and a .NET familiar IT department. But it wasn't long after I sent my email that I got a call back from the customer who - slightly embarrassed - mentioned that they couldn't find the 3.5 Runtime option in the ASP.NET configuration panel.