为什么剃刀页面返回Task <iactionresult>而不是IActionResult?

时间:2017-06-05 14:22:50

标签: razor asp.net-core-mvc

Razor Pages作为创建以页面为中心的Web应用程序的方式在Asp.Net Core 2.0中引入,并且在许多方面比典型的控制器,视图,模型方法更容易编写。我一直在https://docs.microsoft.com/en-us/aspnet/core/razor-pages/研究文档,其中一件我感到好奇的事情是代码隐藏文件中的操作方法使用了async await模式,因此返回Task<IActionResult>而不是以标准Asp.Net Core操作方法的方式返回IActionResult。我发现它很奇怪,因为这种方法比标准的Asp.Net Core操作方法使用的方法更复杂,而且似乎与Razor Pages的设计简单性相反。

来自该来源的修改示例:

  public class ContactModel : PageModel {

    public async Task<IActionResult> OnPostAsync() {
        //Other code omitted

        return Page();
    }
  }

对于比较,在常规的Asp.Net核心控制器中,相同的代码如下所示:

 public class Contact: Controller {

    [HttpPost]
    public IActionResult OnPost() {           
        //Other code omitted

        return View();
    }
 }

为什么Razor Pages操作方法使用async await模式返回Task<IActionResult>而不是使用常规Asp.Net核心操作方法使用的简单方法,只需返回一个IActionResult?为什么要做出这样的设计选择?

1 个答案:

答案 0 :(得分:1)

我相信您引用的示例是异步的,但这并不能阻止您通过使用与第二个代码块中相同的签名来创建同步的操作(不确定HttpPostAttribute因为它看起来像它的命名惯例)。

public IActionResult OnPost() {  /* code here */ }