asp.net mvc 4 - return login success from a web api to an mvc 4 application -


my colleague , myself working on application form login functionality user logs in mvc 4 app , there details submitted web api checked against values held in database once verified web api returns loginresult class contains error message (if any) , bool stating whether has been successful or not.

at mvc 4 application level code below used submit login details web api:

login action

[httppost]     [validateantiforgerytoken]     public async task<actionresult> login(accountviewmodel model)     {         if (!modelstate.isvalid) return view("login", model);          await _client.postasjsonasync("api/applicant/checkapplicant", model)            .continuewith((posttask) => posttask.result.ensuresuccessstatuscode());          var service = dependencyresolver.current.getservice<iapplyservice>();          var loginresult = service.getloginresult();          var loginsuccess = loginresult.loginsuccess;          if (loginsuccess != null && (bool) loginsuccess)         {             formsauthentication.setauthcookie(model.email, model.rememberme);              return redirecttoroute("terms , conditions");         }          return view("login");     } 

the login details received @ web api in method:

check applicant method

public string checkapplicant(applicant applicant)     {         int32 passwordfailuretimeoutmins = convert.toint32(system.configuration.configurationsettings.appsettings["passwordfailuretimeoutmins"]);         int32 passwordfailureattempts = convert.toint32(system.configuration.configurationsettings.appsettings["passwordfailureattempts"]);          applicantrepository applicantrepository = new applicantrepository();         applicant applicantdb = applicantrepository.getbyid(applicant.email);         loginresult loginresult = new loginresult();         passwordhelper passwordhelper = new passwordhelper();          if (applicantdb == null)         {             loginresult.loginsuccess = false;             loginresult.loginerror = "your password or login may not correct.";         }         else         {                              bool loginfailurecheck;                           if (applicantdb.loginfailurecount > passwordfailureattempts)             {                 system.timespan diffresult = datetime.now.subtract(convert.todatetime(applicantdb.lastloginfailure));                 if (diffresult.minutes < passwordfailuretimeoutmins)                 {                     loginfailurecheck = false;                 }                 else                 {                     loginfailurecheck = true;                 }             }             else             {                 loginfailurecheck = true;             }              if (passwordhelper.checkpassword(applicant.password, applicantdb.password))             {                 if(loginfailurecheck)                 {                     if(applicantdb.accountactive)                     {                                                 loginresult.loginsuccess = true;                         loginresult.loginerror = "login successful.";                         applicantdb.lastloginfailure = null;                         applicantdb.lastloginsuccess = datetime.now;                         applicantdb.loginfailurecount = 0;                         applicantrepository.update(applicantdb);                                         }                     else                     {                         loginresult.loginsuccess = false;                         loginresult.loginerror = "this account has been permanently banned.";                     }                 }                 else                 {                     loginresult.loginsuccess = false;                     loginresult.loginerror = "this account temporarily disabled please wait " + passwordfailuretimeoutmins + " minutes before trying again";                     applicantdb.lastloginfailure = datetime.now;                     applicantdb.loginfailurecount = applicantdb.loginfailurecount + 1;                     applicantrepository.update(applicantdb);                 }             }             else             {                 loginresult.loginsuccess = false;                 loginresult.loginerror = "your password or login may not correct.";                 applicantdb.lastloginfailure = datetime.now;                 applicantdb.loginfailurecount = applicantdb.loginfailurecount + 1;                 applicantrepository.update(applicantdb);             }         }         return jsonconvert.serializeobject(loginresult);     } 

as can see returns jsonconvert.serializeobject(loginresult).

when done process returns login actionresult above moves getloginresult() method shown below:

getloginresult

public loginresult getloginresult()     {         const string uri = "http://localhost:55830/api/applicant/checkapplicant";          using (var httpclient = new httpclient())         {             var response = httpclient.getstringasync(uri);             return jsonconvert.deserializeobject<loginresult>(response.result);         }     } 

when point returns error 405 method not allowed.

how consume loginresult @ mvc 4 app level , best way of sending loginresult web api?

any advice appreciated.

not sure trying making read result of previous post? can read response message of post result, this.

public async task<actionresult> login(accountviewmodel model) {     if (!modelstate.isvalid) return view("login", model);      var message = await _client.postasjsonasync                        ("api/applicant/checkapplicant", model);      message.ensuresuccessstatuscode();      loginresult result = await message.content.readasasync<loginresult>();      // other stuff here } 

change web api action method return loginresult directly. framework serialize you.

public loginresult checkapplicant(applicant applicant) {  } 

Comments