2013-02-09 42 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