繁体   English   中英

ASP.NET - ChildActionOnly 和 NonAction 属性之间有什么区别?

[英]ASP.NET - What's the difference between ChildActionOnly and NonAction attributes?

只是出于好奇,这两个属性之间有什么区别?

NonAction 和 ChildActionOnly

这两个属性对我来说似乎都一样。 阻止管道(动作调用者)调用动作方法。 请看一下这个片段:

[NonAction]
private ActionResult StackOverflow1()
{
    // Omitted for brevity.
    return View();
}

[ChildActionOnly]
private ActionResult StackOverflow2()
{
    // Omitted for brevity.
    return View();
}

当然,这两种方法都不会被调用,因为它们是私有的 - 至少在默认实现中 - 但我想知道只是出于好奇的区别......

ChildActionOnly - 只能由另一个动作调用,而不能直接从外部调用(通过路由)调用。 允许的操作包括Action / RenderAction扩展方法。

NonAction - 类似于标记一种方法“私有”,以防止它无法从外部调用或子操作中访问。 适合保护您不需要/想要作为直接视图创建的操作。 值得一提的是,这只是公共方法所必需的(因为私人/受保护不被认为是“可行的”)。

也可以看看:

操作方法是控制器中的公共方法,可以使用URL调用。 因此,默认情况下,如果控制器中有任何公共方法,则可以使用URL请求调用它。 要限制对控制器中公共方法的访问,可以使用NonAction属性。

子操作方法与NonAction方法不同,因为无法使用Action()RenderAction()帮助程序调用NonAction方法。

子操作方法不会响应URL请求。 如果尝试,将抛出运行时错误 - 只有子请求才能访问子操作。

可以通过使用Action()RenderAction() Html帮助程序从视图发出子请求来调用子操作方法。

操作方法不需要将[ChildActionOnly]属性用作子操作,但使用此属性可以防止是否要阻止因用户请求而调用操作方法。

儿童行为通常与部分观点相关联,但这不是强制性的。

使用子操作方法,可以缓存视图的某些部分。 这是子动作方法的主要优点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM