从Async Task返回404

时间:2016-05-02 12:18:53

标签: c# asp.net asp.net-mvc asynchronous async-await

我的mvc控制器中有这个方法:

public ActionResult BlaBla()
{
    if (!ModelState.IsValid)
        return new HttpNotFoundResult();

    // ...
}

我想创建它的Async版本。所以,我想改变这样的代码:

public async Task<ActionResult> BlaBla()
{
    if (!ModelState.IsValid)
        return new HttpNotFoundResult(); // Compiling error: this line is not working

    // ...
}

我的问题是如何在使用async Task<...>样式时从我的mvc控制器返回错误代码(404,500,...)?

1 个答案:

答案 0 :(得分:3)

使用async操作时必须有目的,对吧?通常,此目的是执行I / O绑定操作,例如通过您的异步服务公开的远程TCP / HTTP调用。

在此,典型的控制器操作如下所示:

public async Task<ActionResult> BlaBla()
{
    if (!ModelState.IsValid)
    {
        return new HttpNotFoundResult();
    }

    MyViewModel model = await myService.GetTheModel();
    return View(model);
}

在这个例子中,由于你已经等待了方法中的async操作,它将编译得很好。如果您没有任何async操作,那么进行async操作几乎没有意义。它会造成更多伤害然后帮助。所以现在你应该问自己的问题是:我是否真的有一些异步服务可以利用I / O完成端口来证明我需要使用异步操作?