MVC4 .NET 4.5异步操作方法不重定向
我正在尝试在我的MVC 4应用程序中实现任务操作方法。 一切都在后面工作,但它没有重定向。
public class AccountController : AsyncController { [HttpPost] [AllowAnonymous] public async Task Login(LoginModel model, string returnUrl) { var client = new ClientHelper("login"); account = await client.CallActionType(EnumHelpers.HttpType.Post, model); if (account != null) { validLogin = true; } return Redirect(returnUrl); // This is called but the page does not redirect, just sits a load } }
在制作Action之后我能够让它工作我也将它指向异步动作。 我猜你是否有任何异步操作方法重定向到另一个,那么重定向也必须是异步的。
这只是一个简单的例子
public async Task Login(LoginModel model) { //You would do some async work here like I was doing. return RedirectToAction("Action","Controller");//The action must be async as well } public async Task Action() {//This must be an async task return View(); }
[Authorize] public class AccountController : Controller { [AllowAnonymous] public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUrl; return View(); } // // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { // find user by username first var user = await UserManager.FindByNameAsync(model.Email); if (user != null) { var validCredentials = await UserManager.FindAsync(model.Email, model.Password); // When a user is lockedout, this check is done to ensure that even if the credentials are valid // the user can not login until the lockout duration has passed if (await UserManager.IsLockedOutAsync(user.Id)) { ModelState.AddModelError("", string.Format("Invalid credentials. Please try again, or contact support", 60)); } // if user is subject to lockouts and the credentials are invalid // record the failure and check if user is lockedout and display message, otherwise, // display the number of attempts remaining before lockout else if (await UserManager.GetLockoutEnabledAsync(user.Id) && validCredentials == null) { // Record the failure which also may cause the user to be locked out await UserManager.AccessFailedAsync(user.Id); string message; if (await UserManager.IsLockedOutAsync(user.Id)) { message = string.Format("Invalid credentials. Please try again, or contact support", 60); } else { int accessFailedCount = await UserManager.GetAccessFailedCountAsync(user.Id); int attemptsLeft = (5 - accessFailedCount); message = string.Format("Invalid credentials. Please try again, or contact support.", attemptsLeft); } ModelState.AddModelError("", message); } else if (validCredentials == null) { ModelState.AddModelError("", "Invalid credentials. Please try again, or contact support."); } else { await SignInAsync(user, model.RememberMe); // When token is verified correctly, clear the access failed count used for lockout await UserManager.ResetAccessFailedCountAsync(user.Id); return RedirectToLocal(returnUrl); } } else { ModelState.AddModelError("", string.Format("Invalid credentials. Please try again, or contact support", 60)); } } // If we got this far, something failed, redisplay form return View(model); } [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task ForgotPassword(ForgotPasswordViewModel model) { if (ModelState.IsValid) { var user = await UserManager.FindByNameAsync(model.Email); if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id))) { // Don't reveal that the user does not exist or is not confirmed //ModelState.AddModelError("", "The user either does not exist or is not confirmed."); return RedirectToAction("ForgotPasswordConfirmation", "Account"); } else { var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); var callbackUrl = Url.Action("ResetPassword", "Account", new { UserId = user.Id, code = code }, protocol: Request.Url.Scheme); string Data = System.IO.File.ReadAllText(Server.MapPath(@"~/documents/email_password_reset.txt")); AspNetUser oUser = dbPortal.AspNetUsers.Find(user.Id); // can't use string.format becuase of CSS Data = Data.Replace("{0}", oUser.Name); // user name Data = Data.Replace("{1}", callbackUrl); // URL to click Data = Data.Replace("{2}", DateTime.Now.Year.ToString()); // copyright year await UserManager.SendEmailAsync(user.Id, "Reset Password", Data); return RedirectToAction("ForgotPasswordConfirmation", "Account"); } } // If we got this far, something failed, redisplay form return View(model); } // // GET: /Account/ForgotPasswordConfirmation [AllowAnonymous] public async Task ForgotPasswordConfirmation() { return View(); } }
上述解决方案对我不起作用
- 安装文件的位置 – Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5
- 如何正确使用Task.WhenAll()
- 如何防止回到上一页
- 带有方括号的Uri.EscapeUriString
- ReactiveUI 5.0.2中缺少ReactiveAsyncCommand
- App_Global.asax.compiled和App_Global.asax.dll丢失了吗? WebApi .NET 4.5项目
- 如何使用CSharpCodeProvider定位.net 4.5?
- 是否可以使用协议缓冲区序列化System.Object对象列表
- Window AllowTransparency = true时WPF硬件加速了吗?