如何指示控制器中的方法不是动作方法?

我有一种情况想要使用页面特定的控制器。在那个控制器中,我有一个动作方法和许多辅助方法。在现实生活中,helper方法是从a继承的,BaseController但是为了简单起见,假设我在控制器类中直接有一个helper方法,如下所示:


[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路由时将抛出a ,并表示


AmbiguousActionException:多个动作匹配。以下操作与路线数据匹配,并且满足所有约束条件:


App.Dev.TestController.Get

App.Dev.TestController.UnprocessedEntityResult


如何告诉路由引擎这UnprocessedEntityResult()不是一种操作方法?我假设必须有一些属性可以应用到该方法,但是我无法找到它。


慕村9548890
浏览 127回答 1
1回答

慕桂英4014372

查找[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);    }}对于派生类型将是可见的,但不会混淆路由表
打开App,查看更多内容
随时随地看视频慕课网APP