首页 > 解决方案 > 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 中从不犯错误;-)

标签: c#asp.net-corerazor-pages

解决方案


我建议将 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/


推荐阅读