gpt4 book ai didi

javascript - 如何从 ajax 调用异步 MVC Controller 方法

转载 作者:行者123 更新时间:2023-12-01 01:10:59 26 4
gpt4 key购买 nike

我有一个 Controller 方法,正在为登录的用户进行数据库查找,然后它将发送一封确认电子邮件,如下所示:

[HttpPost]
public async void ResendConfirmationEmail(string username)
{
var user = await Usermanager.FindByNameAsync(username);
try { SendRegistrationEmail(user); }
catch (Exception e)
{
//TODO: LOGGIN EMAIL ERROR
throw e;
}
}

我想从 ajax 函数中调用它,如下所示:

var ResendRegEmail = function (identity) {
$.ajax({
type: "POST",
url: "/Customer/ResendConfirmationEmail",
data: { username: identity },
success: function (data) {
$("#ResendModal").modal('show');
$("#msgSuccess").html("Email has been sent succesfully please check your email.");
},
error: function (request, textStatus, errorThrown) {
$("#ResendModal").modal('show');
$("#msgError").html(textStatus + " " + errorThrown);
}
})
}

[AllowAnonymous]
public async void SendRegistrationEmail(JustAskUser user)
{ code here }

如果我删除异步,“resendCOnfirmationEmail”功能将按预期工作,但业务要求是使用异步来尽可能快地保持网站的流程。当前接收资源不会加载 500 错误

但随后我收到来自“sendregistrationEmail”的错误 - {“此时无法启动异步操作。异步操作只能在异步处理程序或模块内或页面生命周期中的某些事件期间启动。如果出现此异常执行页面时发生,请确保该页面被标记为 <%@ Page Async=\"true\"%>。此异常还可能表明尝试调用“async void”方法,该方法在 ASP 中通常不受支持.NET 请求处理。相反,异步方法应该返回一个 Task,并且调用者应该等待它。"}

最佳答案

我相信您的问题是您调用 SendRegistrationEmail 的行。因为这个方法是异步的,所以你应该在方法名称之前有一个await关键字。

错误消息包含所述的解决方案。

... Instead, the asynchronous method should return a Task, and the caller should await it

所以你的方法应该像这样修改:

[HttpPost]
public async void ResendConfirmationEmail(string username)
{
var user = await Usermanager.FindByNameAsync(username);
try
{
await SendRegistrationEmail(user);
}
catch (Exception e)
{
//TODO: LOGGIN EMAIL ERROR
throw e;
}
}

关于javascript - 如何从 ajax 调用异步 MVC Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com