在Asp.Net MVC中使用NonAction修饰的私有方法和动作之间的区别

时间:2013-02-09 10:14:43

标签: asp.net-mvc private

在Asp.Net MVC中,如果我用属性NonAction修饰一个动作方法,那么访问该站点的用户就不会允许它被调用。 当我做private时,也会发生同样的事情 那么两者之间的区别是什么?有NonAction属性的特殊目的吗?

例如,

之间的区别是什么
[NonAction]
public ActionResult SomeAction(){}

private ActionResult SomeAction(){}

在asp.net MVC的上下文当然我知道一个是public而另一个是private

2 个答案:

答案 0 :(得分:8)

这是唯一的区别。如果您希望某个方法具有使其成为操作的签名但您不希望成为操作,则使用该属性。

用于此的一个示例是操作方法调用以为其生成ActionResult的方法:

[NonAction]
public JsonResult JsonInfo(string id, string value) {
  return Json(new { id = id, value = value });
}

public JsonResult GetBusInfo() {
  return JsonInfo("4", "Bus");
}

public JsonResult GetCarInfo() {
  return JsonInfo("8", "Car");
}

将其公开而不是私有的原因是其他控制器中的操作也可以使用它。

答案 1 :(得分:0)

两者与动作方法相同,您可以单独使用或一起使用。

[NonAction]           
        private ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            FEED_TBL fEED_TBL = db.FEED_TBL.Find(id);
            if (fEED_TBL == null)
            {
                return HttpNotFound();
            }
            return View(fEED_TBL);
        }

如果像上面的代码那样声明它,那么当我们尝试转到详细操作方法时,它将不会转到它。它会显示错误。

{{ HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.}}

这表明我们在视图上的详细链接确实找到了对细节操作方法和控制器的任何引用。