【问题标题】:ASP.NET Core 2.2 Razor Pages why does OnPost() work, but OnPostAsync() doesn't?ASP.NET Core 2.2 Razor Pages 为什么 OnPost() 有效,但 OnPostAsync() 无效?
【发布时间】:2019-03-12 11:45:01
【问题描述】:

请有人解释为什么 OnPost() 有效,但 OnPostAsync() 无效。另一个post 说没有区别,但貌似有……

这行得通

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 进行了测试,一切正常。你得到 404 了吗?
  • 你能添加完整的代码吗? (与周围的类/控制器)

标签: c# asp.net-core razor-pages


【解决方案1】:

我建议将 ASP.NET Core 2.2 升级到 Core 3.0。并重新构建项目。它应该会有所帮助。

同时,请确保正常处理程序和异步处理程序不能同时使用,下面有更多信息。

正如该消息来源所说:https://www.learnrazorpages.com/razor-pages/handler-methods

“OnGet 和 OnGetAsync 是同一个处理程序。不能同时在同一页面中。如果这样做,框架将引发异常:

InvalidOperationException:匹配了多个处理程序。以下处理程序匹配路由数据并满足所有约束:

Void OnGetAsync(), Void 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/

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 2018-10-29
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2021-07-27
    • 2022-01-12
    相关资源
    最近更新 更多