为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕村9548890 2021-04-05 16:17:34
我有一种情况想要使用页面特定的控制器。在那个控制器中,我有一个动作方法和许多辅助方法。在现实生活中,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.GetApp.Dev.TestController.UnprocessedEntityResult如何告诉路由引擎这UnprocessedEntityResult()不是一种操作方法?我假设必须有一些属性可以应用到该方法,但是我无法找到它。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

查找[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);

    }

}

对于派生类型将是可见的,但不会混淆路由表


查看完整回答
反对 回复 2021-04-17
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信