任务异步控制器方法未命中

Wil*_*ins 5 c# asp.net-mvc routes asp.net-mvc-routing async-await

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

现在我们有一个控制器方法:

public async Task<ActionResult> IndexAsync()
Run Code Online (Sandbox Code Playgroud)

因此,如果我们转到http://somedomain.xyz/WhicheverController http://somedomain.xyz/WhicheverController/Index,则会收到404。

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

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

spe*_*der 6

我相信如果你从 AsyncController 派生你的控制器,你的例子会起作用。

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

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

这是以前MVC异步控制器方法的遗物,通常需要一个IndexComplete方法才能工作,但是对于基于Task的异步控制器方法,XxxxComplete不需要匹配方法,但Async遵守约定。

的实际实现AsyncController相当稀疏:

public abstract class AsyncController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)

所以在 MVC 堆栈中的某个地方,测试了控制器的类型,并开启了特殊的路由魔法。