因此,我们有一个 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/