c# - ASP.NET Core 2.2 Razor Pages 为什么 OnPost() 有效,但 OnPostAsync() 无效?
问题描述
请有人解释为什么 OnPost() 有效,但 OnPostAsync() 无效。另一个帖子说没有区别,但似乎有......
这有效
public async Task<IActionResult> OnPost()
{
LoggedInUser = await _userManager.GetUserAsync(User);
if (LoggedInUser == null)
SetPageStatusMsg("No user logged in");
else
SetPageStatusMsg($"{LoggedInUser.UserName} is logged-in");
return Page();
}
但这甚至没有被调用
public async Task<IActionResult> OnPostAsync()
{
LoggedInUser = await _userManager.GetUserAsync(User);
if (LoggedInUser == null)
SetPageStatusMsg("No user logged in");
else
SetPageStatusMsg($"{LoggedInUser.UserName} is logged-in");
return Page();
}
也许这是 Core 2.2 的事情,但没有错误,因为我们在 Core 2.2 中从不犯错误;-)
解决方案
我建议将 ASP.NET Core 2.2 升级到 Core 3.0,然后重新构建项目。它应该有帮助。
同时,请确保不要同时使用普通处理程序和异步处理程序,下面有更多信息。
正如该消息来源所说:https ://www.learnrazorpages.com/razor-pages/handler-methods
“OnGet 和 OnGetAsync 是同一个处理程序。不能同时在同一页面中。如果这样做,框架将引发异常:
InvalidOperationException:匹配了多个处理程序。以下处理程序匹配路由数据并满足所有约束:
无效 OnGetAsync(), 无效 OnGet() "
根据我的经验,我尝试同时使用 OnPostAsync 和 OnPost 处理程序,但出现以下错误:
处理请求时发生未处理的异常。InvalidOperationException:匹配了多个处理程序。以下处理程序匹配路由数据并满足所有约束:Microsoft.AspNetCore.Mvc.IActionResult OnPost(),System.Threading.Task'1[Microsoft.AspNetCore.Mvc.IActionResult] OnPostAsync()
因此,要解决此问题,您可以使用一个 OnPostAsync 或一个 OnPost。这是我的想法,如果你有更多的想法,请告诉我。这里有更多信息:https ://codingblast.com/asp-net-core-razor-pages-handlers/
推荐阅读
- python - 在python中的当前日期的另一列中获取上周日的日期
- java - 相机无法在 Poco X3 的一个 android 应用程序中工作
- python - 即使我有模型、yaml 文件等,在 Visual Studio 中使用 DBT 命令也有问题
- r - ggplot2 条形图,每个 x 数据值有两个条形图和两个 y 轴
- android - Android 低功耗蓝牙 (BLE) 环回
- kubernetes - 如果 [X] 容器终止,如何配置多容器 k8s pod 以终止整个 pod?
- java - 如何从列表列表中提取每个值并制作具有不同子列表值的单个列表
- quarkus - Quarkus Rest 服务堆内存在没有任何请求的情况下增长
- c - Visual Studio 代码中不正确的错误曲线
- airflow - 无法从 airflow.www.views 导入名称 dagbag