c# - Find controller name from AuthenticateRequest -


in web.config have configuration -> system.webserver -> modules , have added module named basicauthhttpmodule. has init event assigns authenticaterequest handler.

public void init(httpapplication context) {    context.authenticaterequest += onapplicationauthenticaterequest;    context.endrequest += onapplicationendrequest; }  private static void onapplicationauthenticaterequest(object sender, eventargs e) {    // find controller name here    var request = httpcontext.current.request; } 

in code above onapplicationauthenticaterequest checks request.headers["authorization"] , ensures user valid. not want happen specific controller though. tried adding allowanonymous attribute , methods. no changes.

how find controller? requestcontext.routedata doesn't contain anything. in requested url don't want parse string. seems hacky. also, server/controllerwithoutaccess/index?controllerwithaccess=1 contain name of controller allowing anonymous access reference different controller.

[edit]: ((system.web.httpapplication)sender).context.request points request variable in code. same. meanwhile, request.requestcontext.routedata has null route, null routehandler , values contains 0 items.

given seem have missing route details, think you'll have recreate routing table based on current context:

private static void onapplicationauthenticaterequest(object sender, eventargs e)  {     var context = ((httpapplication)sender).context;     var routedata = routetable.routes.getroutedata(new httpcontextwrapper(context));      var controllername = routedata.values["controller"];     ... } 

keep in mind event going fire every image, css, script file well, expensive operation. may want interrogate request context more make intelligent decision whether need running more expensive code.


Comments