2013-02-09 78 views
9

在Asp.Net MVC中修饰私有方法和动作之间的差异如果我修饰一个属性为NonAction的动作方法,那么它将不会被允许被访问该站点的用户调用。 当我做它时也会发生同样的情况private

那么这两者之间有什么区别,并且是否存在一个特殊用途,其中NonAction属性已被创建?Asp.Net MVC

例如什么在asp.net MVC的,当然,我知道一个是public的背景下,另一个

[NonAction] 
public ActionResult SomeAction(){} 

而且

private ActionResult SomeAction(){} 

之间的区别是private

回答

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"); 
} 

的原因,使其公开,而不是私人会如此,在其它控制器操作可能也使用它。

+0

其他控制器如何使用标记为NonAction的'public'方法? – mipe34 2013-02-09 23:59:14

+3

@ mipe34:通过创建控制器的实例并调用该方法。 – Guffa 2013-02-10 01:06:07

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); 
     } 

如果声明它像上面的代码,那么当我们将尽力去细节操作方法也不会去it.Rather它会显示错误。

{{ 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.}} 

这表明我们的详细链接视图确实发现任何参考细节行动方法和我们的控制器。

+1

为什么要大写? – manetsus 2016-05-15 13:46:16

+0

404的响应很常见。无论他们中的任何一个或两者在一起,你都会得到相同的回应。你想指出什么? – 2016-05-15 15:02:17