c# - 任务异步 Controller 方法未命中

标签 c# asp.net-mvc routes asp.net-mvc-routing async-await

因此,我们有一个 MVC 项目,该项目已通过不同版本的 MVC 从 1 升级到 4。

现在我们有一个 Controller 方法:

public async Task<ActionResult> IndexAsync()

所以如果我们转到http://somedomain.xyz/WhicheverController http://somedomain.xyz/无论是哪个 Controller /索引,我们都会收到 404。

http://somedomain.xyz/WhicheverController/IndexAsync 路由到该方法就好了。

我们的路由出了什么问题?

最佳答案

我相信,如果您改为从 AsyncController 派生 Controller,您的示例将有效。

public class MyController:AsyncController
{
    public async Task<ActionResult> IndexAsync()
    {
       return View(); //view called "Index.cshtml", not "IndexAsync.cshtml"
    }
}

所以现在您可以在没有 Async 后缀的情况下点击 ~/My/Index,尽管 Async 出现在 Controller 名称中。

这是以前 MVC 异步 Controller 方法的遗留物,通常需要 IndexComplete 方法才能工作,但是对于基于任务的异步 Controller 方法,匹配的 XxxxComplete 方法不是必需的,但遵守 Async 约定。

AsyncController 的实际实现相当稀疏:

public abstract class AsyncController : Controller
{
}

所以在 MVC 堆栈的某个地方, Controller 的类型被测试,并且特殊的路由魔术被打开。

关于c# - 任务异步 Controller 方法未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20221603/

相关文章:

c# - 为参与者 '{actorName}' 获取基于回合的并发锁在 {time} 后超时

ssl - 我的 nodejs 应用程序 SSL 证书没有被考虑在内(IBM CLOUD)

asp.net-mvc-4 - Asp.net MVC4 Bundle 被尾部斜线的 URL 重写规则破坏

c# - 从另一个类更新进度条

c# - 从 64 位 exe 访问 32 位 DLL 的方法

c# - 在 C# LINQ 中实现 RANK OVER SQL 子句

c# - MVC 4路由找不到 Controller

asp.net-mvc - Fluent NHibernate 获取已保存对象的 ID

c# - 如何在 MVC 4 中显示来自路径的图像?

c# - 在asp.net MVC中获取第三个参数