Razor Pages是在Asp.Net Core 2.0中引入的一种创建以页面为中心的Web应用程序的方式,与典型的控制器、视图、模型方法相比,许多方面更容易编写。我一直在研究https://learn.microsoft.com/en-us/aspnet/core/razor-pages/上的文档,其中一个我觉得很奇怪的事情是,在代码后台文件中的操作方法利用了async await模式,因此返回一个Task<IActionResult>而不是像标准的Asp.Net Core操作方法一样返回IActionResult。我发现这种方法比标准的Asp.Net Core操作方法更复杂,这似乎与Razor Pages的设计简单性相矛盾。
来自该来源的修改后的示例:
为什么Razor Pages的操作方法使用
来自该来源的修改后的示例:
public class ContactModel : PageModel {
public async Task<IActionResult> OnPostAsync() {
//Other code omitted
return Page();
}
}
作为比较,在普通的Asp.Net Core控制器中,这段代码看起来像:
public class Contact: Controller {
[HttpPost]
public IActionResult OnPost() {
//Other code omitted
return View();
}
}
为什么Razor Pages的操作方法使用
async
await
模式返回Task<IActionResult>
,而不像常规的Asp.Net核心操作方法那样简单地返回IActionResult
?为什么做出这样的设计选择?
Task<T>
的泛型版本。 (假设编译器允许它)如果您没有使用async/await返回Task,则无法等待您的调用,并且无法将结果返回给调用者。我认为最好您阅读有关async/await如何工作的内容。使用Async和Await进行异步编程 - Igorasync
await
示例开始是很奇怪的,特别是考虑到所有操作方法本质上都是异步的,因为它们在中间件之后被调用,而中间件使用了异步等待。但根据您的评论,我能够在此页面上找到一个示例:https://dzone.com/articles/creating-simple-shoutbox-using-aspnet-core-razor-p,证实Razor页面实际上可以简单地返回IActionResult。如果您将您的回复作为答案,我会接受它。 - RonC