【发布时间】:2015-11-02 18:59:09
【问题描述】:
期待为MVC 5 Boilerplate template添加身份验证,下一段代码在它自己的original sample project中运行良好,但是当将其内容集成到样板模板中,并尝试注册新用户时,出现了冲突和出现浏览器异常,指向以下“等待”行:
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account");
ViewBag.Message = "Check your email and confirm your account, you must be confirmed "
+ "before you can log in.";
ViewBag.Link = callbackUrl;
return View("Info");
}
AddErrors(result);
}
return View(model);
}
我在很多地方读到过,当发生异步问题时,人们建议将其设为同步,但就我而言,很多事情会变得不兼容。我想知道如何保持这种方法异步,因为它原来是 in the template,
【问题讨论】:
-
首先,这是一个警告,而不是错误。它不会阻止您的应用程序工作,它只是表明您正在做一些奇怪的事情。其次,完全正确——您的
GetItems方法没有任何awaits,因此声明中的async关键字是无用的,并且该方法将是100% 同步的——它没有理由返回aTask要么。 -
浏览器给出了一个例外,我不能忽视它,请阅读整个问题,包括模板讨论。
-
您是否将警告作为错误进行编译?
-
您能否使用minimal reproducible example 更新您的帖子以及您面临的确切错误。帖子中提到的编译时警告不太可能是您运行网站时显示的错误。
-
好吧,您没有发布任何异常,那么我们应该如何帮助您解决您遇到的异常?您发布的消息是编译器警告,而不是运行时异常。它与突出显示的行无关(除非它以某种方式参与 JIT 编译),因此您的真正错误更有可能仍然存在,以某种方式隐藏。删除有问题的代码(从您的绝对同步方法中删除
async),然后重试 - 也许您会得到真正的错误。
标签: c# .net asp.net-mvc asynchronous boilerplate