c# - Autofac and Web Api 2 - How to get the User (authenticated or not) -
i having issue users , autofac. followed guide said current user use in services, must first create wrapper class this:
public class principalprovider : iprincipalprovider { public iprincipal user => httpcontext.current?.user; } and need register perdependency in module this:
builder.registertype<principalprovider>().as<iprincipalprovider>().instanceperdependency(); then have simple controller:
private readonly ihealthcheckprovider _healthcheckprovider; /// <summary> /// default constructor /// </summary> /// <param name="healthcheckprovider">the provider used health checks</param> public healthcheckcontroller(ihealthcheckprovider healthcheckprovider) { _healthcheckprovider = healthcheckprovider; } /// <summary> /// lists current services , status details /// </summary> /// <returns></returns> [httpget] [route("")] public async task<ihttpactionresult> listasync() => ok(await _healthcheckprovider.listasync()); the healthcheck provider has principal provider injected , list method tries current user:
private readonly cormarconfig _config; private readonly ihealthcheckservice _healthcheckservice; private readonly iunitofwork _unitofwork; private readonly lazy<iprincipalprovider> _principalprovider; public healthcheckprovider(iunitofwork unitofwork, cormarconfig config, ihealthcheckservice healthcheckservice, lazy<iprincipalprovider> principalprovider) { _unitofwork = unitofwork; _config = config; _healthcheckservice = healthcheckservice; _principalprovider = principalprovider; } public async task<ilist<healthcheck>> listasync() { var models = await _healthcheckservice.list().tolistasync(); var user = _principalprovider.value.user; return models; } the problem have user null. know how can solve this?
and reference sake, here config method in startupconfig.cs class:
public void configuration(iappbuilder app) { // cors must first, or not work app.usecors(corsoptions.allowall); cultureinfo.defaultthreadcurrentculture = cultureinfo.createspecificculture("en-gb"); // our configuration var config = new httpconfiguration(); var container = configureinversionofcontrol(app, config); var scope = config.dependencyresolver.getrootlifetimescope(); var serveroptions = configureoauthtokengeneration(app, scope); // configur our application configureoauthtokenconsumption(app); configurewebapi(config, scope); // register autofac middleware first. adds // autofac-injected middleware registered container. app.useautofacmiddleware(container); app.useautofacwebapi(config); app.useoauthauthorizationserver(serveroptions); app.usewebapi(config); } i don't think wrong in there, never know.
Comments
Post a Comment