ServiceStack Razor behaviour when path doesn't exist -


i have these settings:

    customhttphandlers = {         {httpstatuscode.notfound, new razorhandler("/notfound")},         {httpstatuscode.unauthorized, new razorhandler("/unauthorized")},     } 

when visit inside /stars folder doesn't exist:

/stars/asdf/xyz

it first checks /stars/asdf/default.cshtml. goes stars/default.cshtml , loads whichever level has default page. so, if /stars root folder doesn't exist @ all, /notfound loaded.

is possible ask load /notfound when /asdf/xyz doesn't exist?

this behaviour under root directory:

http://localhost:2000/asdf take /notfound. however, doesn't under folders.

tnank you.

edit ------------------------------------------------------

i noticed if go bad url /stars/asdf /stars doesn't have default root /default.cshtml exists, in case, both /notfound -> /default loaded 1 after other?!?

my settings wrong? ss glitched?

servicestack's routing priority, follows. servicestack calls servicestackhttphandlerfactory.gethandler handler current route.

servicestackhttphandlerfactory.gethandler returns:

  1. a matching rawhttphandler, if any.
  2. if domain root, handler returned getcatchallhandlerifany(...), if any.
  3. if route matches metadata uri, relevant handler, if any.
  4. the handler returned servicestackhttphandlerfactory.gethandlerforpathinfo if any.
  5. notfoundhandler.

servicestackhttphandlerfactory.gethandlerforpathinfo returns:

  1. if url matches valid rest route, new resthandler.
  2. if url matches existing file or directory, returns
    • the handler returned getcatchallhandlerifany(...), if any.
    • if it's supported filetype, staticfilehandler,
    • if it's not supported filetype, forbiddenhttphandler.
  3. the handler returned getcatchallhandlerifany(...), if any.
  4. null.

the catchallhandlers array contains functions evaluate url , either return handler, or null. functions in array called in sequence , first 1 doesn't return null handles route.

the code controls whether default file served part of staticfilehandler. it's called existing files , directories.

here's relevent fragement:

foreach (var defaultdoc in endpointhost.config.defaultdocuments) {     var defaultfilename = path.combine(fi.fullname, defaultdoc);     if (!file.exists(defaultfilename)) continue;     r.redirect(request.getpathurl() + '/' + defaultdoc);     return; } 

as can see, if default file isn't found @ requested directory, redirects directory chain until finds default file serve. if need change behavior, can override adding catchallhander code. more details writing catchallhandler can found in answer related question, here: https://stackoverflow.com/a/17618851/149060


Comments