c# - Asp.net web api : redirect unauthorized requst to forbidden page -
im trying redirect unauthorized request forbidden page instead i'm getting forbidden page in response body , how can fix ?
here's startup class :
app.createperowincontext(storecontext.create); app.createperowincontext<applicationusermanager>(applicationusermanager.create); app.createperowincontext<applicationsigninmanager>(applicationsigninmanager.create);  app.usecookieauthentication(new cookieauthenticationoptions {      authenticationtype = defaultauthenticationtypes.applicationcookie,      expiretimespan = timespan.fromdays(30), });  app.useexternalsignincookie(defaultauthenticationtypes.externalcookie);  app.usetwofactorsignincookie(defaultauthenticationtypes.twofactorcookie, timespan.fromminutes(5));  app.usetwofactorrememberbrowsercookie(defaultauthenticationtypes.twofactorrememberbrowsercookie); the method im trying reach :
    [httpget]     [authorize(roles = "admin")]     public string getcurrentusername()     {         return usermanager.findbyemail(user.identity.name).name;     } i have tried things :
- remove loginpath cookieoptions return 401
- create custom authorize attribute
by way im using angular , think issue related ajax call ...
you can extend authorize attribute specify forbidden page. this:
add new class named authorizationattribute inherits authorizeattribute class. , override 2 methods
public class authorizationattribute : authorizeattribute {    protected override bool authorizecore(httpcontextbase httpcontext)    {       //check if user in in role admin , if yes return true, else return false. once returns false, handleunauthorizedrequest triggered automatically       return usermanager.isuserinadminrole(username);    }     protected override void handleunauthorizedrequest(authorizationcontext filtercontext)    {       filtercontext.result = new redirectresult("~/error/forbiddenpage");    } } and in method, use new authorizationattribute class:
    [httpget]     [authorization] //you can write authorization without word attribute     public string getcurrentusername()     {         return usermanager.findbyemail(user.identity.name).name;     } if related ajax, find here: github.com/ronnieoverby/mvc-ajax-auth similar problem solution
Comments
Post a Comment