C#学习教程:MVC4.NET4.5异步操作方法不重定向一切都在后面工作,但它不会重定向。公共类AccountController:AsyncController{[HttpPost][AllowAnonymous]publicasyncTaskLogin(LoginModelmodel,stringreturnUrl){varclient=newClientHelper("login");account=awaitclient.CallActionType(EnumHelpers.HttpType.Post,model);如果(帐户!=null){validLogin=true;}返回重定向(returnUrl);//这被调用,但页面没有重定向,只是加载}}在完成Action之后我能够让它工作我也把它指向一个异步动作。我猜如果您有任何重定向到另一个的异步操作方法,那么重定向也必须是异步的。这只是一个简单的例子publicasyncTaskLogin(LoginModelmodel){//你会像我一样在这里做一些异步工作。returnRedirectToAction("Action","Controller");//动作也必须是异步的}publicasyncTaskAction(){//这必须是一个异步任务returnView();}[Authorize]publicclassAccountController:Controller{[AllowAnonymous]publicActionResultLogin(stringreturnUrl){ViewBag.ReturnUrl=returnUrl;返回视图();}////POST:/Account/Login[HttpPost][AllowAnonymous][ValidateAntiForgeryToken]publicasyncTaskLogin(LoginViewModelmodel,stringreturnUrl){if(ModelState.IsValid){//首先通过用户名查找用户varuser=awaitUserManager.FindByNameAsync(model.Email);if(user!=null){varvalidCredentials=awaitUserManager.FindAsync(model.Email,model.Password);//当用户被锁定时,进行此检查以确保即使凭据有效//用户也无法登录,直到锁定持续时间为passedif(awaitUserManager.IsLockedOutAsync(user.Id)){ModelState.AddModelError("",string.Format("无效凭据。请重试,或联系支持",60));}//如果用户被锁定且凭据无效//记录失败并检查用户是否被锁定并显示消息,否则,//显示锁定前剩余的尝试次数elseif(awaitUserManager.GetLockoutEnabledAsync(user.Id)&&validCredentials==null){//记录同样可能导致用户被锁定的失败awaitUserManager.AccessFailedAsync(user.Id);字符串消息;if(awaitUserManager.IsLockedOutAsync(user.Id)){message=string.Format("无效凭据。请重试,或联系支持",60);}else{intaccessFailedCount=awaitUserManager.GetAccessFailedCountAsync(user.Id);intattemptsLeft=(5-accessFailedCount);message=string.Format("无效凭据。请重试,或联系支持。",attemptsLeft);}ModelState.AddModelError("",message);}elseif(validCredentials==null){ModelState.AddModelError("","无效凭据。请重试,或联系支持人员。");}else{awaitSignInAsync(user,model.RememberMe);//当令牌验证正确后,清除用于锁定的访问失败计数awaitUserManager.ResetAccessFailedCountAsync(user.Id);returnRedirectToLocal(returnUrl);}}else{ModelState.AddModelError("",string.Format("Invalidcredentials.Pleasetryagain,orcontactsupport",60));}}//如果我们走到这一步,失败了,重新显示表单returnView(model);}[HttpPost][AllowAnonymous][ValidateAntiForgeryToken]publicasyncTaskForgotPassword(ForgotPasswordViewModel模型){if(ModelState.IsValid){varuser=awaitUserManager.FindByNameAsync(model.Email);if(user==null||!(awaitUserManager.IsEmailConfirmedAsync(user.Id))){//不要透露用户不存在或不存在irmed//ModelState.AddModelError("","用户不存在或未确认。");returnRedirectToAction("ForgotPasswordConfirmation","Account");}else{varcode=awaitUserManager.GeneratePasswordResetTokenAsync(user.Id);varcallbackUrl=Url.Action("ResetPassword","Account",new{UserId=user.Id,code=code},protocol:Request.Url.Scheme);字符串数据=System.IO.File.ReadAllText(Server.MapPath(@"~/documents/email_password_reset.txt"));AspNetUseroUser=dbPortal.AspNetUsers.Find(user.Id);//不能使用string.format因为CSSData=Data.Replace("{0}",oUser.Name);//用户名Data=Data.Replace("{1}",callbackUrl);//点击URLData=Data.Replace("{2}",DateTime.Now.Year.ToString());//版权年份awaitUserManager.SendEmailAsync(user.Id,"ResetPassword",Data);returnRedirectToAction("ForgotPasswordConfirmation","Account");}}//如果我们走到这一步,有些东西失败了,重新显示表单returnView(model);}////GET:/Account/ForgotPasswordConfirmation[AllowAnonymous]publicasyncTaskForgotPasswordConfirmation(){returnView();}}上面的解决方案不适合我重定向分享的所有内容,如果对你有用并且需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
