httpHandlers for child directories

  • Thread starter Thread starter Grant Harmeyer
  • Start date Start date
G

Grant Harmeyer

How would I set up an httpHandler so that it would only apply to certain
child directories of the application?

I.E:
<httpHandlers>
<add verb="*" path="/files/*/*/*/*.aspx"
type="App.HttpHandlers.ThreeDeepPage, App" />
<add verb="*" path="/files/*/*/*.aspx"
type="App.HttpHandlers.TwoDeepPage, App" />
</httpHandlers>

The wildcard character for a directory causes an error, and before I even
tried it I thought it would. I am guessing I would probably have to do this
using a custom configSection, but I'm not sure how to do it.


TIA,

Grant
 
Why don't you just list them out?

<add verb="*" path="/files/certain1/bob.axd", type="..." />
<add verb="*" path="/files/certain2/bob.axd", type="..." />
<add verb="*" path="/files/certain2/deeper/bob.axd", type="..." />

bill
 
The directories will have dynamic names for years, months and days. Also,
the file names will be dynamic (managed by a file system of sorts that I
don't have much control over).

i.e:
<add verb="*" path="/files/2004/10/7/SomeFile.axd", type="..." />
<add verb="*" path="/files/2004/12/15/SomeFile2.axd", type="..." />

Considering that I have no idea how many files there may be or what the 2nd
or 3rd level directory names may be, I was hoping to use wildcards to
achieve this. It's an odd problem I know.

Grant
 
Okay, here is the path you want to take then.

<add verb="*" path="/files/Level1Handler.axd", type="..." />
<add verb="*" path="/files/Level2Handler.axd", type="..." />

In Global.cs, you will want to use HttpContext.RewritePath to achieve this.

Here is a test snippet I used. You might want to explore the Request object
to see if there is a better way, but RawUrl works for demostration purposes.

protected void Application_BeginRequest( object sender, EventArgs e )
{
string url = Context.Request.RawUrl.ToUpper();
if ( url.EndsWith( "LEVEL1HANDLER.AXD" ) ) //this will covert
"files/*/Level1Handler.axd"
{
Context.RewritePath( "/files/Level1Handler.axd" );
}
else if ( url.EndsWith( "LEVEL2HANDLER.AXD" ) )
{
Context.RewritePath( "/files/Level2Hanlder.axd" );
}
}

I hope this is what you are looking for. Or atleast you can use this to get
where you are going.

bill
 
Hi there,
are you sure that HttpHandler is even able to handle child directories? I
red somewhere that for each subdirectory it's own configuration should be
done (I mean: bin directory, IIS configuration, web.config...).

Are you maybe mixing HttpModule with it?

Please correct me if I'm wrong,

Igor
 
Yes, Handlers can "handle" child directories.

For each subdirectory, its full configuration should be done when each
subdirectory is set up as an application in IIS. If a subdirectory is not
set up as an application, it will pull it settings from the parent (root
application) directory. Each subdirectory can override its parent settings,
such as appSettings, etc.

http://msdn.microsoft.com/library/d...pconhierarchicalconfigurationarchitecture.asp

Infact if you try to change the authentication mode for a non-application
subdirectory, it will not allow it. It will give you some "machine beyond
application configuration error".

bill
 
Back
Top