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

仅限非动作和儿童动作

这两个属性对我来说似乎都一样。防止管道(动作调用程序)调用动作方法。请查看以下代码段:

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

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


当然,由于这两种方法是私有的(至少在默认实现中是这样),因此不会调用这两种方法,但是出于好奇,我想知道两者之间的区别...

最佳答案

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

非动作-就像将方法标记为“私有”一样,以防止通过外部调用或子动作来访问它。适用于保护不需要/不想创建为直接视图的动作。值得一提的是,仅在公共方法上才需要这样做(因为私有/受保护的对象不被视为“可操作的”)。

也可以看看:


Using ChildActionOnly in MVC
ASP .NET MVC NonAction meaning

10-08 06:48