Advanced Generic Handler ASHX - CodeProject®
Advanced Generic Handler ASHX - CodeProject®
http://www.codeproject.com/Articles/353260/ASP-NET-Advanced-Gene...
TanzeelurRehman
2.2K
Sign out
Home
Articles
Quick Answers
Discussions
Learning Zones
Features
Help!
The Lounge
3
Search site
See Also
More like this More by this author
,+
Introduction
In ASP.NET, we have something that is usually overlooked that is called Generic Handlers. I see a lot o f people using pages to process AJAX requests when we can use this much less expensive endpoint. This is an completely worked out Generic Handler that truly knows how to handle your http (AJAX and not) requests.
Background
For a long time I used plain Generic Handlers (ASHX files) to handle my AJAX requests but it felt stupid and painful. I mean, the functionality was there but the whole process of handling the requests wasn't straight forward. So I made a list of the things I would like to have on and handler:
Related Articles
http://localhost/mydemohandler.ashx?help
Let's create a very simple example that receives a name and returns a string (see on the project).
1 of 4
4/3/2012 10:34 AM
http://www.codeproject.com/Articles/353260/ASP-NET-Advanced-Gene...
A generic Image-From-DB class for ASP.NET Generic sorting of customer objects for ObjectDataSource (ASP.NET) ASP.NET Server Side Handler for HTML5 Valums Ajax file Upload Upload and Convert Video File to Flash Video (flv) and Progressive Streaming using ASP.NET Handler Advanced Data Caching features in ASP.NET ASP.NET 1.1 Panel Enter Key Handler Generic InvocationHelper Manage ASP.NET Server Controls, Event Handlers, and Server-Side Validation Using XML and XSLT Advanced Paging GridView with ASP.NET 2.0/3.5 Simple JSON Handler for ASP.NET 2.0 to Implement AJAX Functionality
namespace CodeProject.GenericHandler { public class MyFirstHandler : BaseHandler { // I don't bother specifying the return type, it'll be serialized anyway public object GreetMe(string name) { return string.Format("Hello {0}!", name); } } }
MyFirstHandler.ashx?method=GreetMe&name=AlexCode
{ method: 'The method you want to call', args: { the arguments to pass } }
$.ajax({ url: 'MyFirstHandler.ashx', type: 'GET', data: { method: 'GreetMe', args: { name: 'AlexCode'} }, success: function (data) { alert(data); } });
SkipContentTypeEvaluation = true; SkipDefaultSerialization = true; // you can specify the response content type as follows context.Response.ContentType = "text/html";
Lets see an example on how we could write a method on the handler that returns HTML:
Collapse | Copy Code
public object GiveMeSomeHTML(string text) { StringBuilder sb = new StringBuilder(); sb.Append("<head><title>My Handler!</title></head>"); sb.Append("<body>"); sb.Append(" This is a HTML page returned from the Handler "); sb.Append(" The text passed was: " + text + " "); sb.Append("</body>"); context.Response.ContentType = "text/html"; SkipContentTypeEvaluation = true; SkipDefaultSerialization = true; return sb.ToString(); }
2 of 4
4/3/2012 10:34 AM
http://www.codeproject.com/Articles/353260/ASP-NET-Advanced-Gene...
Say you have a JSON object and a class server side that maps it. Hydrating this class server side is a pain. Usually we pass each property as an argument of the method on the Handler, instantiate a new instance of the class and set the properties one by on... a pain right? NO MORE! This handler now supports automatic class instance creation and property set. Something I like to call Object Hydratation! :) And there's more! If this class have properties that also expose other custom classes they will be hydrated too!! Just make sure all classes have a public default constructorr
Collapse | Copy Code
// Now you can have method like this public object SendPersonData(Person person) { return person.Name; } // your ajax call object would be something like ... data: { method: 'SendPersonData', args:{ person: { Name: 'Alex' } } } ...
Please have a look at the attached code sample for more examples.
Points of Interest
I can say that this handler already saved me a good amount of development and maintenance hours. Currently all my AJAX requests point to a method on an handler like this.
History ;
v1.1 - Added support for complex arguments v1.0 - The first wide open version This is a work in progress, I keep improving it regularly. I have no doubt that you'll try to use this in scenarios I haven't predicted. Please send me your requests and desires, I'll do my best to implement them.
License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
Article Top
Rate this:
Poor
Excellent
Vote
Go Per page
25
Layout
Normal
Update
Refresh
3 of 4
4/3/2012 10:34 AM
http://www.codeproject.com/Articles/353260/ASP-NET-Advanced-Gene...
Handler vs WCF Re: Handler vs WCF Re: Handler vs WCF Last Visit: 10:00 1 Jan '00 General News Last Update: 10:28 3 Apr '12 Suggestion Question Bug
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.
Permalink | Advertise | Privacy | Mobile Web04 | 2.5.120402.1 | Last Updated 2 Apr 2012 Layout: fixed | fluid Article Copyright 2012 by AlexCode Everything else Copyright CodeProject, 1999-2012 Terms of Use
4 of 4
4/3/2012 10:34 AM