Asp.net mvc 4 将登录成功从web api返回到mvc 4应用程序
我的同事和我正在编写一份具有登录功能的申请表,用户从mvc 4应用程序登录,并将详细信息提交给web api,以便在验证web api返回包含错误消息(如果有)的loginResult类后,对照数据库中保存的值进行检查还有一本书,用来说明它是否成功 在mvc 4应用程序级别,以下代码用于向web api提交登录详细信息: 登录操作Asp.net mvc 4 将登录成功从web api返回到mvc 4应用程序,asp.net-mvc-4,login,asp.net-web-api,Asp.net Mvc 4,Login,Asp.net Web Api,我的同事和我正在编写一份具有登录功能的申请表,用户从mvc 4应用程序登录,并将详细信息提交给web api,以便在验证web api返回包含错误消息(如果有)的loginResult类后,对照数据库中保存的值进行检查还有一本书,用来说明它是否成功 在mvc 4应用程序级别,以下代码用于向web api提交登录详细信息: 登录操作 [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult>
[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 And Conditions");
}
return View("Login");
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务登录(AccountViewModel)
{
如果(!ModelState.IsValid)返回视图(“登录”,模型);
等待_client.postsjsonasync(“api/applicator/checkapplicator”,型号)
.ContinueWith((postTask)=>postTask.Result.EnsureSuccessStatusCode());
var service=DependencyResolver.Current.GetService();
var loginResult=service.GetLoginResult();
var loginsucess=loginResult.loginsucess;
if(loginsucess!=null&(bool)loginsucess)
{
FormsAuthentication.SetAuthCookie(model.Email,model.RememberMe);
返回重定向路由(“条款和条件”);
}
返回视图(“登录”);
}
然后通过以下方法在web api上接收登录详细信息:
检查申请人方法
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 be 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 is now 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 be correct.";
applicantDB.LastLoginFailure = DateTime.Now;
applicantDB.LoginFailureCount = applicantDB.LoginFailureCount + 1;
applicantRepository.Update(applicantDB);
}
}
return JsonConvert.SerializeObject(loginResult);
}
公共字符串检查申请人(申请人)
{
Int32 passwordFailureTimeoutMins=Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings[“passwordFailureTimeoutMins”]);
Int32 passwordFailureAttempts=Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings[“passwordFailureAttempts]”);
AppliantRepository AppliantRepository=新的AppliantRepository();
申请人applicationdb=applicationrepository.GetById(application.Email);
LoginResult LoginResult=新的LoginResult();
PasswordHelper PasswordHelper=新的PasswordHelper();
if(applicationDB==null)
{
loginResult.LoginSuccess=false;
loginResult.LoginError=“您的密码或登录可能不正确。”;
}
其他的
{
bool登录失败检查;
if(applicationDB.LoginFailureCount>passwordFailureAttempts)
{
System.TimeSpan Diffredesult=DateTime.Now.Subtract(Convert.ToDateTime(applicationDB.LastLoginFailure));
if(衍射结果分钟<密码失败超时分钟)
{
loginFailureCheck=false;
}
其他的
{
loginFailureCheck=true;
}
}
其他的
{
loginFailureCheck=true;
}
if(passwordHelper.CheckPassword(applicator.Password,applicationdb.Password))
{
如果(登录失败检查)
{
如果(应用数据库帐户活动)
{
loginResult.LoginSuccess=true;
loginResult.LoginError=“登录成功。”;
applicationdb.LastLoginFailure=null;
applicationdb.lastloginsucess=DateTime.Now;
applicationDB.LoginFailureCount=0;
applicationrepository.Update(applicationdb);
}
其他的
{
loginResult.LoginSuccess=false;
loginResult.LoginError=“此帐户已被永久禁止。”;
}
}
其他的
{
loginResult.LoginSuccess=false;
loginResult.LoginError=“此帐户现在暂时被禁用,请等待”+passwordFailureTimeoutMins+“分钟后重试”;
applicationdb.LastLoginFailure=DateTime.Now;
AppliantDB.LoginFailureCount=AppliantDB.LoginFailureCount+1;
applicationrepository.Update(applicationdb);
}
}
其他的
{
loginResult.LoginSuccess=false;
loginResult.LoginError=“您的密码或登录可能不正确。”;
applicationdb.LastLoginFailure=DateTime.Now;
AppliantDB.LoginFailureCount=AppliantDB.LoginFailureCount+1;
applicationrepository.Update(applicationdb);
}
}
返回JsonConvert.SerializeObject(loginResult);
}
正如您所看到的,它返回一个JsonConvert.SerializeObject(loginResult)
完成此操作后,流程返回到上面的登录操作结果,然后移动到GetLoginResult()方法,如下所示:
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);
}
}
public LoginResult GetLoginResult()
{
常量字符串uri=”http://localhost:55830/api/Applicant/CheckApplicant";
使用(var httpClient=new httpClient())
{
var response=httpClient.GetStringAsync(uri);
返回JsonConvert.DeserializeObject(response.Result);
}
}
当它到达这一点时,它返回一个错误405方法not allowed
如何在MVC4应用程序级别使用loginResult,从web api发送loginResult的最佳方式是什么
如果您有任何建议,我们将不胜感激。不确定您到底想做什么,但您是否正在阅读上一篇文章的结果?您可以阅读POST的响应消息以获得结果,如下所示
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>();
// do other stuff here
}
public LoginResult CheckApplicant(Applicant applicant)
{
}