C# 从异步任务返回404

C# 从异步任务返回404,c#,asp.net,asp.net-mvc,asynchronous,async-await,C#,Asp.net,Asp.net Mvc,Asynchronous,Async Await,我的mvc控制器中有此方法: public ActionResult BlaBla() { if (!ModelState.IsValid) return new HttpNotFoundResult(); // ... } 我想创建它的异步版本。所以,我想这样修改代码: public async Task<ActionResult> BlaBla() { if (!ModelState.IsValid) return ne

我的mvc控制器中有此方法:

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

    // ...
}
我想创建它的异步版本。所以,我想这样修改代码:

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

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

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

我的问题是如何返回错误代码404500。。。在我的mvc控制器中,当使用异步任务样式时?

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

在这种情况下,典型的控制器操作如下所示:

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

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

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

在本例中,由于您已经在方法中等待异步操作,因此它将很好地编译。如果您没有任何异步操作,那么使用异步操作就没有什么意义。它会造成比帮助更大的伤害。所以现在您应该问自己的问题是:我真的有一些异步服务可以利用I/O完成端口来证明我需要使用异步操作吗?

至于其他错误代码,您可以使用基本的HttpStatusCodeResultHttpStatusCode类。HttpNotFoundResult和HttpNotAuthorizedResult的子类分别是两个最常见的状态结果404和401的快捷方式。至于编译错误,这是因为您没有返回任务或等待任何其他方法调用,因此编译器没有自动生成任务返回类型。@BerinLoritsch:如果方法签名中没有异步,则会出现这种情况。但是,使用async时,编译器会为您提供补偿,因此不需要实际返回任务实例。如果您实际上没有等待任何操作,但它仍将编译,那么将收到编译器警告。引发的实际异常是什么?