Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Hoptoad Notifier for .NET
Branch: master
Failed to load latest commit information.
HopSharp First successful error sent to hoptoad.
SampleWeb First successful error sent to hoptoad.
.gitignore First successful error sent to hoptoad.
HopSharp.sln First successful error sent to hoptoad.
README.textile Git complaining about all files being different. Is this an CRLF prob…
hoptoad_2_0.xsd Added the XML schema to validate our request data.



HopSharp is a .NET library for use with the Hoptoad exception reporting service by Thoughtbot. Hoptoad allows you to easily track and get notification about exceptions that occur on your site.

The HopSharp library can be used in two forms. First, you can either programmatically report exceptions, if you have a try/catch block and want to ensure a particular exception is reported. And the second is through the use of an HttpModule, which will catch any unhandled exceptions on your site and report them.


To use the library, you’ll need to build the project and drop the HopSharp.dll and the Newtonsoft.Json.dll in your site’s bin directory. To configure the library, you’ll need to edit your web.config to include your API key for HopToad:

    <add key="Hoptoad:ApiKey" value="1234567890abcdefg"/>

To programmatically report exceptions, all you need to do is ensure you’ve included the “HopSharp” namespace, and then call the SendToHoptoad method on the exception. This is done using extension methods. For example:

  using HopSharp;
  try {
	// some code
  catch(Exception ex) {
	// ohhnoes

To use the HttpModule, you will just need to add it as an HttpHandler within your web.config:

    <add name="Hoptoad" type="HopSharp.NotifierHttpModule, HopSharp"/>


There are some important things to do on the HttpModule still. Most importantly, it will be incredibly verbose on its exception handling. In .NET, a 404 is considered an exception, so it will catch, report, and subsequently notify you of any time someone tries to access a URL that doesn’t exist.

To circumvent this, plan on adding the ability to set a series of patterns that you can use to exclude exceptions based on exception type, part of the message, or something along those lines.

Something went wrong with that request. Please try again.