ASP.NET 5 中的 HandleUnknownAction
HandleUnknownAction in ASP.NET 5
什么是 ASP.NET MVC 5
的等价物
Controller.HandleUnknownAction()
在 ASP.NET MVC 6 / ASP.NET 5?
没有真正的等价物。
Action Selection in MVC5/WebAPI2 是一个三阶段过程:
1. 运行 路线
2. Select 一个控制器
3. Select 一个动作
在 MVC6 中,步骤 2 消失了。使用路由值直接选择操作 - 您会注意到 Controller.BeginExecute
也不见了。控制器现在 'thin'。
如果需要,您可以通过使用直接进入相关操作的路线来模拟此行为。
在您的控制器中定义一个名为 HandleUnknownAction
的操作
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute("unknown_action", "{controller}/{*params}", defaults: new { action = "HandleUnknownAction"});
另一种方法是简单地将未知操作定义为路线的参数:
[Route("[controller]")]
public class FooController : Controller
{
[HttpGet("{viewName}")]
public IActionResult HandleUnknownAction(string viewName)
{
return View(viewName);
}
}
使用这种方法,url foo/bar
将 return 视图 bar.cshtml
,foo/baz
将 return baz.cshtml
等等
什么是 ASP.NET MVC 5
的等价物Controller.HandleUnknownAction()
在 ASP.NET MVC 6 / ASP.NET 5?
没有真正的等价物。
Action Selection in MVC5/WebAPI2 是一个三阶段过程: 1. 运行 路线 2. Select 一个控制器 3. Select 一个动作
在 MVC6 中,步骤 2 消失了。使用路由值直接选择操作 - 您会注意到 Controller.BeginExecute
也不见了。控制器现在 'thin'。
如果需要,您可以通过使用直接进入相关操作的路线来模拟此行为。
在您的控制器中定义一个名为 HandleUnknownAction
的操作
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute("unknown_action", "{controller}/{*params}", defaults: new { action = "HandleUnknownAction"});
另一种方法是简单地将未知操作定义为路线的参数:
[Route("[controller]")]
public class FooController : Controller
{
[HttpGet("{viewName}")]
public IActionResult HandleUnknownAction(string viewName)
{
return View(viewName);
}
}
使用这种方法,url foo/bar
将 return 视图 bar.cshtml
,foo/baz
将 return baz.cshtml
等等