我有一种情况,我想使用特定于页面的控制器。在那个控制器中,我有一个动作方法和一堆辅助方法。在现实生活中,辅助方法是从BaseController
继承而来的,但是为了简单起见,假设我在控制器类中直接有一个辅助方法,如下所示:
[Route("/dev/test")]
public class TestController : Controller {
public IActionResult Get() {
return UnprocessedEntityResult();
}
//Some helper method that I don't want to be considered an
//action method by the routing engine.
public IActionResult UnprocessedEntityResult() {
return StatusCode(StatusCodes.Status422UnprocessableEntity);
}
}
我特别想使用基于属性的路由,我希望在类级别指定基于属性的路由。
鉴于上面编码的情况,当访问AmbiguousActionException
路由时将抛出/dev/test
并且它将指示
AmbiguousActionException:匹配多个动作。以下操作匹配路由数据并满足所有约束:
App.Dev.TestController.Get
App.Dev.TestController.UnprocessedEntityResult
如何告诉路由引擎UnprocessedEntityResult()
不是一种操作方法?我假设必须有一些属性可以应用于该方法,但我无法找到它。
答案 0 :(得分:5)
查找[NonAction]
属性。
表示控制器方法不是操作方法。
[Route("/dev/test")]
public class TestController : Controller {
[HttpGet]
public IActionResult Get() {
return UnprocessedEntityResult();
}
[NonAction]
public IActionResult UnprocessedEntityResult() {
return StatusCode(StatusCodes.Status422UnprocessableEntity);
}
}
或者您也可以保护操作。
[Route("/dev/test")]
public class TestController : Controller {
[HttpGet]
public IActionResult Get() {
return UnprocessedEntityResult();
}
protected IActionResult UnprocessedEntityResult() {
return StatusCode(StatusCodes.Status422UnprocessableEntity);
}
}
派生类型可见,但不会混淆路径表